{"version":3,"file":"main.339b101ae0b61002.js","mappings":"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mpB,EACAlpB,EACAy4B,EACAC,EACAC,EACAC,EACAC,EACA54B,GACAC,GACA44B,GACAC,EACAn6B,GACAC,EACAm6B,EACAC,EACAC,EACAC,GACAnxE,EACAlqB,GACAqiE,EACAi5B,GACAuI,EACAC,EACAtI,GACAv6B,GACA5pF,GACAokH,GACAtsB,IAEAzpH,MACEvK,EACAinD,EACAwxB,EACAj4D,EACA++H,EACA/mE,EACAE,EACAkuC,EACAC,EACAC,EACAmpB,EACAlpB,EACAy4B,EACAC,EACAC,EACAC,EACAC,EACA54B,GACAC,GACA44B,GACAC,EACAn6B,GACAC,EACAm6B,EACAC,EACAC,EACAC,GACAnxE,EACAlqB,GACAqiE,EACAm5B,GACAv6B,GACA5pF,GACAokH,GACAH,GACAnsB,IAEF57H,KAAKswJ,eAAiBA,EACtBtwJ,KAAKuwJ,UAAYA,CACnB,CAEO,oCAAOC,GACZ,OAAO,IAAIH,EACT,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,GACA,GACA,GACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,KACA,GACA,GACA,KACA,KACA,GACA,KACA,KACA,EACA,KAEJ,CAEO,eAAO5iI,CAASgjI,GACrB,IAAIxtJ,EAA6B,KAEG,IAAAytJ,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAwDpC,OAxDI,EAAChnJ,KAAMwmJ,KACTxtJ,EAAS,IAAIotJ,EACXI,EAAuB7oJ,GACvB6oJ,EAAuB5hG,cACvB4hG,EAAuBpwE,QACvB0oE,IAAiB1yG,OACjBo6G,EAAuBzH,wBAA0ByH,EAAuBzH,wBAA0B,KAClG9B,IAAa+B,sCAAsCwH,GACnDvH,IAA0Bz7H,SAASgjI,GACnCA,EAAuBjiC,wBACvBiiC,EAAuBtH,mCACvBsH,EAAuB/hC,wBACvB+hC,EAAuB5Y,iBACvB5tI,KAAMwmJ,EAAuBrH,qBAAuBqH,EAAuB9hC,iCAAmC8hC,EAAuBrH,uBACrI9oJ,KAAImwJ,EAAuBrJ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B,yBAAjBA,iCAHA,CAACslL,OAGDtlL,CAAiB,mGCRxB,MAAgBwoS,EACpB,gBAAWC,GACT,MAAM,IAAIjnX,GACZ,ECDK,IAAMknX,EAAiB,UAAAC,EAAxB,MAAOD,UAAyBF,EACpChwe,cACEqS,OACF,CAEA,gBAAW49d,GACT,OAAOzle,MACT,WAPW0le,yCAAgB,4BAAhBA,EAAgBjve,QAAhBive,EAAgBhve,YAAhBgve,CAAiB,KCCvB,MAAMlke,EAAS,IAAIlF,MAAe,eAoB5B0kX,EAAmB,CAXa,CAC3Cn+L,QAAS2iT,EACTv+J,SAAUy+J,GAG4B,CACtC7iT,QAASrhL,EACT0/W,WAdI,SAAU0kH,EAAcC,EAAoCC,GAChE,SAAIC,MAAkBD,GACbD,EAAiBJ,aAEnB,EACT,EAUErkH,KAAM,CAACokH,EAAWQ,0BCtBpB,IAAAhwe,EAAA,CACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,eACA,kBACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,YACA,eACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,YACA,eACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,sBACA,mBACA,sBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,iBACA,oBACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,WACA,cACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,YACA,eACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,cACA,kBACA,qBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,WACA,kBACA,qBACA,cACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,oBAIA,SAAAiwe,EAAAC,GACA,IAAA5oe,EAAA6oe,EAAAD,GACA,OAAAvpe,EAAAW,EACA,CACA,SAAA6oe,EAAAD,GACA,IAAAvpe,EAAAype,EAAApwe,EAAAkwe,GAAA,CACA,IAAAtpe,EAAA,IAAA+tB,MAAA,uBAAAu7c,EAAA,KACA,MAAAtpe,EAAAwqG,KAAA,mBACAxqG,CACA,CACA,OAAA5G,EAAAkwe,EACA,CACAD,EAAAj/d,KAAA,WACA,OAAAisC,OAAAjsC,KAAAhR,EACA,EACAiwe,EAAAh2J,QAAAk2J,EACAx1c,EAAA01c,QAAAJ,EACAA,EAAA3oe,GAAA","names":["DynamicPathGuard","_DynamicPathGuard","constructor","router","this","canActivate","route","state","RouteUtils","isKnownPath","map","url","setTimeout","navigateByUrl","paths","notFound","absolutePath","i0","i1","factory","ɵfac","providedIn","canActivateDefaultPathGuard","_ref","_asyncToGenerator","activatedRouteSnapshot","routerStateSnapshot","inject","Router","authentication","AUTHENTICATION","navigationService","NavigationService","responsivenessViewMode","RESPONSIVENESS_VIEW_MODE","mobileNavigationService","MobileNavigationService","msalGuard","MsalGuard","subscription","getCurrentSubscription","firstValueFrom","path","isPhone","getDefaultMobileRoute","getDefaultRoute","unauthorized","login","_x","_x2","apply","arguments","canActivateViaAuthGuard","result","navigate","canLoadViaAuthGuard","_","segments","canMatch","queryParams","navigation","getCurrentNavigation","AssertionUtils","isNullOrUndefined","extractedUrl","redirect","buildPathFromSegmentsAndQueryParams","LoadingFileComponent","_LoadingFileComponent","translate","getTitle","instant","getLocale","language","getText","selectors","decls","vars","consts","template","rf","ctx","level_r1","LoggerComponent","_LoggerComponent","toastService","logger","localStorage","loggerLevels","EnumUtils","getEnumNames","NgxLoggerLevel","inProgress","ngOnInit","setLevelSelected","setNewLogLevel","updateConfig","level","levelSelected","set","showInfo","tapToDismiss","timeOut","message","object","getKeyFromValue","i2","$event","LoggerComponent_mat_option_7_Template","UnauthorizedPageComponent","_UnauthorizedPageComponent","externalUrlProvider","InjectionToken","routes","pathMatch","component","loadChildren","__webpack_require__","e","then","bind","m","LoginModule","Factory","createPrototypeModuleRoute","requiredPermission","Permission","TEXSTYLE_SHOW_ICON","id","NavigationId","TEXSTYLE","Promise","all","canActivatePermissionGuard","TEXFAB_SHOW_ICON","TEXFAB","texState","MachineOverviewModule","canLoad","data","permissionToCheckSettings","editMachine","texEdit","TexeditModule","texBi","TexbiModule","profile","ProfileModule","canActivateUnauthorizedPathGuard","NotFoundPageComponent","CALENDAR","texBot","TexbotModule","UTILITIES","help","HelpModule","loadingFile","processes","BackgroundJobsModule","settings","SettingsModule","GetPossiblePropertyValuesOfList","_GetPossiblePropertyValuesOfList","execute","propertyValue","isNil","possiblePropertyValues","PrintDocument","_PrintDocument","document","window","rendererFactory","renderer","createRenderer","xml","xslt","printableElement","createElement","addClass","parser","DOMParser","xmlDoc","parseFromString","xsltDoc","xsltProcessor","XSLTProcessor","importStylesheet","transformToFragment","appendChild","body","onafterprint","removeChild","print","DOCUMENT","WINDOW","BackendConfiguration","_BackendConfiguration","localStorageService","runtimeEnvironment","storageConstants","SUBSCRIPTION_ID","COMPANY_ID","APPLICATION_MAINTENANCE","getEndpoint","versionNumber","getEndpointWithVersionNumber","getEnvironment","origin","endpoint","getMachineOverviewEndpoint","machineOverviewEndpoint","getProductionScheduleEndpoint","productionScheduleEndpoint","getProductionOrderEndpoint","productionOrderEndpoint","getAggregatorEndpoint","aggregatorEndpoint","getWorkerEndpoint","workerEndpoint","getAuthenticationEndpoint","authenticationEndpoint","getMachineEndpoint","machineEndpoint","getIotConfigEndpoint","iotConfigEndpoint","getAlertingEndpoint","alertingEndpoint","getImageProcessingEndpoint","imageProcessingEndpoint","getSettingsEndpoint","settingsEndpoint","getPlanningEndpoint","planningEndpoint","getCalendarEndpoint","calendarEndpoint","getSubscriptionId","storedSubscriptionId","get","setSubscriptionId","setApplicationMaintenance","applicationMaintenance","remove","getApplicationMaintenance","getCompanyId","storedCompanyId","getBrowserInstanceId","browserInstanceId","setCompanyId","getHubEndPoint","hubEndPoint","getNotificationsHubEndPoint","notificationsHubEndPoint","getReportItemsHubEndPoint","reportItemsHubEndPoint","getPlanningHubEndPoint","planningHubEndPoint","getAlertingHubEndPoint","alertingHubEndPoint","getMachineHubEndPoint","machineHubEndPoint","getMachineOverviewHubEndPoint","machineOverviewHubEndPoint","getProcessingHubEndPoint","processingHubEndPoint","getTexCatalogHubEndPoint","texCatalogHubEndPoint","getAuthenticationAuthority","authority","getAuthenticationClientId","clientId","getAuthenticationScopes","scopes","getRedirectURL","redirectUrl","isEmpty","location","getRetryAttempts503","retryAttempts503","getApplicationInsightsInstrumentationKey","appInsightsInstrumentationKey","clearLocalStorage","activeStorageConstant","keys","storageConstantKey","baseEndpointUrl","replace","setBrowserInstanceId","RUNTIME_APPLICATION_ENVIRONMENT","BreadcrumbFormLinkerDirective","_BreadcrumbFormLinkerDirective","BaseComponent","formGroupDirective","contentSwitcher","navigationHelper","navigationBreadcrumbsService","super","formGroup","form","updateBreadcrumbFormLinkerUsed","formControl","formControlName","valueChanges","pipe","startWith","value","takeUntil","unSubscribeOnViewDestroy","subscribe","_value","toString","isDialog","setCreatingObjectName","onNameChanged","_this$name","name","ngOnChanges","changes","isFirstChange","ngOnDestroy","dialog","contentSwitcherDialogActive","i3","inputs","None","features","DataCyDirective","_DataCyDirective","elementRef","dataCy","removeTestingAttributes","removeAttribute","nativeElement","selectorName","hasAttribute","setAttribute","HasPermissionDirective","_HasPermissionDirective","templateRef","viewContainer","appHasPermission","permission","currentSubscription","hasPermission","createEmbeddedView","clearAndCreateView","appHasPermissionElse","appHasNotPermission","appHasNotPermissionElse","clear","LoadImageDirective","_LoadImageDirective","setImageFromData","image","imageId","RunEventsOutsideAngularDirective","_RunEventsOutsideAngularDirective","zone","outSideAngularEvent","EventEmitter","runOutsideAngular","each","listOfEventsToRunOutsideAngular","eventToRunOutsideAngular","listen","onEvent","event","emit","outputs","GridIdentifier","ORDERBOOK","ORDER_ITEMS","ORDER_ITEMS_NEW_BUILDER","ORDER_ITEMS_PRESELECTION","ORDER_ITEMS_NEW_PRESELECTION","GROUPED_ORDER_ITEMS","STOP_REASON_TEXTS","MANAGED_WEAVE_STRUCTURE_OVERVIEW","WEAVE_STRUCTURE_OVERVIEW","EVENT_ALERT_OVERVIEW","EVENT_OVERVIEW","PRODUCT_CONFIGURATION_OVERVIEW","ARTICLE_OVERVIEW","LIST_OF_CREEL_POSITIONS_FOR_WEFT_COLORED_YARN_SET","LIST_OF_CREEL_POSITIONS_FOR_COLORED_YARN_SET","LIST_OF_CREEL_POSITIONS_FOR_COLORED_YARN_SET_PREVIEW","LIST_OF_CREEL_POSITIONS_FOR_TEXTILE_DATA_DETAIL","CUSTOMER_OVERVIEW","PRODUCTION_ORDER_LITE_OVERVIEW","PRODUCTION_ORDER_WEAVING_OVERVIEW","TUFT_PRODUCTION_ORDER_OVERVIEW","PRODUCTION_SCHEDULE_OVERVIEW","SALES_ORDER_OVERVIEW","COLOR_OVERVIEW","COLOR_SET_OVERVIEW","COLORED_YARN_OVERVIEW","COLORED_YARN_SET_OVERVIEW","CREEL_OVERVIEW","FINISHING_OVERVIEW","FINISHING_TEMPLATE_OVERVIEW","GROUPED_WEAVE_STRUCTURE_OVERVIEW","MACHINE_QUALITY_FINISHING_OVERVIEW","MACHINE_QUALITY_OVERVIEW","WEAVE_PRODUCT_OVERVIEW","COMPANY_WEAVE_STRUCTURE_OVERVIEW","ADD_WEAVE_STRUCTURE","WEFT_COLORED_YARN_SET_OVERVIEW","YARN_SET_OVERVIEW","YARN_TYPE_OVERVIEW","MACHINE_LIST","KIOSK_MACHINE_LIST","DATA_UNIT_SETUP_CATALOG","DATA_UNIT_SETUP","BACKGROUND_JOBS","SELECT_YARN_TYPE","SELECT_YARN_TYPE_FOR_MATERIAL_SET","SELECT_WEAVE_STRUCTURE","SELECT_PATH_LAYOUT_TEMPLATE","SELECT_MACHINES","SELECT_IMAGE","ALTERNATIVE_MACHINE_QUALITIES","SELECT_MACHINE_QUALITY_FOR_FINISHING","SELECT_FINISHING_TEMPLATE","SELECT_COLORED_YARN_SET","SELECT_WEAVE_STRUCTURES","SELECT_YARN_SET","SELECT_COLOR_SET","ALTERNATIVE_COLORED_YARN_SETS","SELECT_SINGLE_COLOR","SELECT_CUSTOMER","SELECT_ARTICLE","ORDER_LINES_CONFLICTS","PRODUCTION_SCHEDULE_COLORED_YARN_SET_PATHS","SELECT_PRODUCT_CONFIGURATION","SELECT_PRODUCT_CONFIGURATION_VERSION_HISTORY","SELECT_MACHINE","SELECT_WEAVING_MACHINE","SELECT_WEAVE_PRODUCT","SELECT_TUFT_PRODUCT","SELECT_PRODUCTION_ORDER","PRODUCTION_ORDERS_LIST","SELECT_WEFT_COLORED_YARN_SET","PRODUCT_CONFIGURATION_DESIGNS_LIST","VERSION_HISTORIES_LIST","DESIGNS_LIST","MANAGE_TRAINING_FILES","TRAINING_MACHINE_LIST","DOCUMENTATION_MACHINE_LIST","MACHINE_DATA_SOURCES","SELECT_EVENT_TYPE","SELECT_EVENT_SOURCES","SELECT_DATA_UNIT_SETUP_CATALOG","SELECT_RECIPIENTS","DECLARATION_OVERVIEW","SELECT_WEAVING_MACHINE_TYPE","SELECT_TUFT_MACHINE_TYPE","SELECT_TUFT_MACHINE","SELECT_WINDER_MACHINE_TYPE","SELECT_DYEING_MACHINE_TYPE","SELECT_PLASTICS_MACHINE_TYPE","SELECT_FINISHINGS","SELECT_POSSIBLE_MACHINES","SELECT_COLOR_PATTERN","SELECT_DRAWING_PATTERN","SELECT_MACHINE_QUALITY","SELECT_FINISHING","SELECT_DATA_UNIT_SETUP","SELECT_CREEL","SELECT_WEAVE_PATTERN_TEMPLATE","ADVANCED_SEARCH_MACHINE_QUALITY","ADVANCED_SEARCH_COLORED_YARN_SET","ADVANCED_SEARCH_MACHINE","ADVANCED_SEARCH_COLOR_SET","ADVANCED_SEARCH_MAIN_COLOR","ADVANCED_SEARCH_BORDER_COLOR","ADVANCED_SEARCH_ARTICLE","ADVANCED_SEARCH_CREEL","ADVANCED_SEARCH_WEAVE_STRUCTURE","ADVANCED_SEARCH_MAIN_DESIGN","ADVANCED_SEARCH_WEFT_COLORED_YARN_SET","ADVANCED_SEARCH_WEAVE_PRODUCT","ADVANCED_SEARCH_TUFT_PRODUCT","ADVANCED_SEARCH_PLASTIC_PRODUCT","ADVANCED_SEARCH_TOOL","TUFT_PRODUCT_OVERVIEW","SELECT_ALERT_TYPES","RESOURCE_TYPE_OVERVIEW","PHYSICAL_QUANITTY_OVERVIEW","SELECT_PHYSICAL_QUANITTY_CATALOG","DEVICE_TEMPLATE_CATALOG_OVERVIEW","DEVICE_TEMPLATE_COUNTER_CATALOG_OVERVIEW","DEVICE_TEMPLATE_CONFIGURATION_CATALOG_OVERVIEW","DEVICE_TEMPLATE_OVERVIEW","SELECT_RESOURCE_TYPES","SELECT_REPORT_ITEM","SELECT_REPORT_ITEM_CATALOG","SELECT_UNIT","DEVICE_TEMPLATE_COUNTER_OVERVIEW","DEVICE_TEMPLATE_CONFIGURATION_OVERVIEW","SELECT_DEVICE_TEMPLATE_CATALOG","SELECT_COUNTER_CATALOG","REPORT_ITEM_OVERVIEW","OPERATORS_OVERVIEW","OPERATOR_TYPES_OVERVIEW","PATH_LAYOUT_TEMPLATE_OVERVIEW","STOP_GROUPS_PREVIEW","SELECT_RESOURCE_TYPE_BREAKDOWN","SELECT_DATA_UNIT","SELECT_EDGE_DEVICE","SELECT_REPORT_ITEMS_BY_CATEGORY","PRODUCTION_SCHEDULE_COLORED_YARN_SETS","BUGGY","SELECT_OBJECTS_DIALOG","LIST_OF_STOP_REASON_TEXT_CATALOG","SELECT_COLOR","CREEL_PREVIEW","LIST_OF_MACHINES_FOR_ADD_COMPANY_WEAVE_STRUCTURE","PART_TAGS_FOR_TRAINING_MANAGE_TAGS","SELECT_RULE_ENTITY","AUTOMATIC_STOP_MAPPING","LIST_OF_PATTERN_FIELDS","PLACEHOLDER_PARTS","SELECT_RAW_MATERIAL_FOR_YARN","SELECT_RAW_MATERIAL_FOR_COLORED_YARN","DESIGN_LIST_NEW","LIST_OF_PATH_CONTENTS","GROUPED_DESIGNS","GROUPED_DESIGNS_DETAIL_PRESELECTION","GROUPED_DESIGNS_DETAIL_BUILDER","PRODUCTION_SCHEDULE_PATH_LIST_VIEW","GROUPED_DESIGN_THUMBNAILS","PLASTIC_PRODUCT_OVERVIEW","PLASTIC_PRODUCTION_ORDER_OVERVIEW","TOOL_OVERVIEW","SELECT_REJECT_REASON_GROUP","REJECT_REASON_OVERVIEW","PLASTIC_PRODUCT_GROUP_OVERVIEW","MATERIAL_OVERVIEW","SELECT_MACHINE_GROUP","FIXED_SCHEDULE_OVERVIEW","SHIFT_OVERVIEW","SHIFT_PATTERN_OVERVIEW","PATTERN_SHIFT","STOCK_LOCATION_OVERVIEW","SELECT_FIXED_SCHEDULE","PATTERN_BUILDER","MATCHING_CRITERIA","TOOL_PRODUCTS","SELECT_REJECT_REASON","SCHEDULE_OVERVIEW","HeaderIdentifier","ADD_COLOR","ADD_QUALITY","ADD_YARN","ADD_FINISHING_TEMPLATE","ADD_WEAVE_PRODUCT","ADD_PRODUCTION_SCHEDULE","ADD_PRODUCTION_ORDER_WEAVING","ADD_TUFT_PRODUCTION_ORDER","ADD_CREEL","ADD_COLOR_SET","ADD_YARN_SET","ADD_TUFT_PRODUCT","ADD_COLORED_YARN","ADD_COLORED_YARN_SET","ADD_PATH_LAYOUT_TEMPLATE","ADD_MANAGE_WEAVE_STRUCTURE","ADD_WEAVE_STRUCTURE_PATTERN","ADD_WEFT_COLORED_YARN_SET","ADD_CUSTOMER","ADD_ARTICLE","ADD_SALES_ORDER","ADD_DATA_UNIT_SETUP","ADD_DATA_UNIT_SETUP_CATALOG","ADD_MACHINE_DATA_SOURCE","ADD_OPERATOR","ADD_OPERATOR_TYPE","ADD_RESOURCE_TYPE","ADD_PHYSICAL_QUANTITY","SEND_WINDER_VIBRATION_FORM","ADD_EVENT","ADD_ALERT","ADD_TEMPLATE","ADD_REPORT_ITEM","EDIT_MACHINE","ADD_WINDER_MACHINE_TYPE","ADD_DRAWING","ADD_FINISHING","ADD_WEAVING_MACHINE_TYPE","ADD_DYEING_MACHINE_TYPE","ADD_TUFTING_MACHINE_TYPE","ADD_PLASTIC_PRODUCT","ADD_TOOL","ADD_PRODUCT_CONFIGURATION_ORDER","ADD_PLASTIC_PRODUCTION_ORDER","ADD_REJECT_REASON","ADD_FIXED_SCHEDULE","ADD_BUGGY","ADD_SHIFT","ADD_SHIFT_PATTERN","ADD_SHIFT_SCHEDULE","ADD_STOCK_LOCATION","ADD_RAW_MATERIAL","AdvancedSearchInputType","STRING","NUMBER","ENUM","OBJECT","DATE","BOOL","AdvancedSearchUtils","clearValue","hasValue","getInputTypeForAdvancedSearchFilter","propertyName","isFinite","getDisplayValueForAdvancedSearchFilter","defaultUnit","displayValue","getDisplayValueForAdvancedSearchFilterEnumCase","getDisplayValueForAdvancedSearchFilterNumberCase","getDisplayValueForAdvancedSearchFilterStringCase","getDisplayValueForAdvancedSearchFilterObjectCase","getDisplayValueForAdvancedSearchFilterDateCase","key","inputType","inputTypeIsOfTypeString","inputTypeIsOfTypeNumber","inputTypeIsOfTypeEnum","inputTypeIsOfTypeObject","inputTypeIsOfTypeDate","inputTypeIsOfTypeBool","getJsonBodyForAdvancedSearchFilters","filters","pickDensityUnit","reedDensityUnit","filter","isEqual","AdvancedSearchInput","COMPLETION_DATE_START","COMPLETION_DATE_END","subJson","getJsonKeyForAdvancedSearchFilter","getSubJsonKeyForAdvancedSearchFilter","getJsonValueForAdvancedSearchFilter","getAgGridJsonBodyForAdvancedSearchFilters","filterModel","filterType","filterModels","type","mappedValue","jsonKeyMap","camelCase","jsonKey","json","jsonValue","getJsonValueForEnumType","LENGTH","WIDTH","commercialDimensions","parseInt","PICK_DENSITY","convertUnit","from","unit","to","Unit","PICKS_PER_MILLIMETER","REED_DENSITY","DENTS_PER_MILLIMETER","WIDTH_IN_DENTS","HEIGHT_IN_PICKS","technicalDimensions","moment","format","inputIsOfType","includes","inputTypeMap","DRAWING_TYPE","DrawingType","MACHINE_STATUS","MachineStatus","PRODUCTION_SCHEDULE_STATUS","ProductionScheduleStatus","MACHINE_EFFICIENCY","MachineEfficiencyLevel","PRIORITY","Priority","convertCommercialUnit","MILLIMETER","toNumber","DRAWING_SHAPE","FixedShape","getTranslationKeyForShape","MACHINE_QUALITY","technicalNameWithVersion","Map","getEnumValues","AdvancedSearchStringInput","AdvancedSearchNumberInput","AdvancedSearchObjectInput","AdvancedSearchEnumInput","AdvancedSearchDateInput","AdvancedSearchBoolInput","_AdvancedSearchUtils","DRAWING_CODE","ORDER_REFERENCE","CUSTOMER_REFERENCE","DRAWING_NAME","MISSING_DESIGN","BackendErrorCodeEnum","NOT_FOUND","LINKED_ENTITIES","DUPLICATE_NAME","DUPLICATE_CONFIGURATION","OVERLAP_REGIMES_OR_SHIFTS","RECOLOR_MISMATCH","MISSING_COLORS","ALTERNATIVES","LOOM_MAP_CHORE_MISMATCH","EXCEPTIONS_LIST","INVALID_NAME","INVALID_VALUE","OVERLAPPING_ENTITIES","MISSING_PROPERTY","MISMATCH_PROPERTY","DESIGN_MISSING_COLORS","DESIGN_INVALID_WEFT_SELECTION_CODES","convertJSONToDrawing","drawingJSON","drawing","drawingType","BMP","BmpDrawing","fromJSON","EP","EpDrawing","TftDrawing","DrawingImageUploadHelper","_DrawingImageUploadHelper","ImageUploadHelper","drawings","dialogBuilderFactoryService","navigationHelperService","dialogTitle","fileTypes","TFT","PVD","urlToNavigateToAddDrawing","addDesign","uploadFiles","files","navigationData","removeSubscriptionForImageSubject","clearUploadQueue","localFilesCopy","push","subscriptionForImageSubject","imageSubject","_unSubscribeOnViewDestroy","error","addImageToUploadQueue","size","getUploadQueue","navigateToPage","navigateToNextRouteWithPartialState","displayAlertDialog","processFileChange","processFile","fileName","file","fileDrawingType","BlobUtils","blobToArrayBuffer","onImageReaderLoadForFormatLocalValidation","next","onImageLoad","drawingImage","dimensionsInPx","widthInPx","naturalWidth","heightInPx","naturalHeight","src","getFileTypeFromAllowedTypes","fileExtension","allowedTypes","find","toLower","pageUrl","DRAWINGS","ErrorHandlers","navigateToOverviewAndThrowError","overviewPath","navigateToPreviousRoute","UnhandledBackendError","autoNavigated","getLoadLink","editUrl","errors","entityId","ErrorMessageHelper","_ErrorMessageHelper","getErrorMessageFromBackendError","backendErrorContext","Number","errorCode","getErrorMessageForBackendErrorAndTranslationKey","getErrorMessageForDuplicateConfigurationBackendError","getErrorMessageForLinkedEntitiesBackendError","getErrorMessageForMissingColorsBackendError","getErrorMessageForLoomMapWithMissingPatterns","getErrorMessageForInvalidValue","getErrorMessageForOverlappingEntities","getErrorMessageForMisMatchProperty","getErrorMessageForMissingColorsOnDesign","getErrorMessageForInvalidWeftSelectionCodesOnDesign","forkJoin","list","backendErrorSubContext","results","join","throwError","translationKey","getTranslationKeyForEntity","entity","count","mergeMap","translatedEntity","_backendErrorContext$","startCase","entityName","entityNames","linkedEntityNames","translatedErrorMessage","patternId","patternType","originalChores","targetChores","linkedEntity","givenValue","range","entityTranslationKey","linkedEntityTranslationKey","defaultTo","translations","lowerCase","similarEntityName","expectedValue","design","patterns","codes","colorNumbers","ENTITY_TRANSLATION_KEYS","Error","COLOR_SET","COLOR","YARN_SET","YARN_TYPE","COLORED_YARN_SET","CREEL","FINISHING","FINISHING_TEMPLATE","MACHINE","DESIGN","CUSTOM_SETTING","WEAVE_STRUCTURE","COMPANY","PRODUCTION_ORDER","PRODUCTION_ORDER_LITE","RUN","STOP_REASON_TEXT","WEFT_COLOR","ORDER_LINE","ARTICLE","DATA_SOURCE","CHORE","CUSTOMER","SALES_ORDER","WEAVE_PRODUCT","AUTOMATIC_STOP_GROUPS","OPERATOR","OPERATOR_TYPE","PHYSICAL_QUANTITY","RAW_MATERIAL","NO_COMPANY_OWNED_WEAVE_STRUCTURE","PRODUCTION_SCHEDULE_PATH","START_DENT","JACQUARD_TYPE","NUM_CREEL_POSITIONS","MACHINE_WIDTH","WEFT_SELECTION","WEFT_SELECTION_COLUMNS","IMAGE_PROCESSING","TUFT_PRODUCT","PRODUCTION_SCHEDULE","SORT_COLUMN","PRODUCTION_ORDER_TUFT","WEFT_COLORED_YARN_SET","placeholderSeparators","POINT","COMMA","DASH","UNDERSCORE","SPACE","VERTICAL_BAR","NO_SEPARATOR","TAB","getDisplayValueForPlaceholderSeparator","placeholderSeparator","GridActionButtonsHelper","_GridActionButtonsHelper","deleteButton","title","icon","withTooltip","onlyEnabledOnSingleRowSelection","editButton","duplicateButton","getActionButtonsForGridSelection","crudActions","actionButtons","hasPermissionForAction","requiredPermissionToEdit","withEdit","onClick","withDuplicate","withDelete","allowDeleteMultiple","cloneDeep","getActionButtonsWithRouting","editPermission","editRoute","PrototypeRouteUtils","getPage","duplicateRoute","rowActionsComplete","Subject","crudOverviewButtonConfigs","rowNode","navigateForward","NavigationUtils","getAbsolutePath","routeData","routeId","getActionButtonsWithNewRouting","addComponent","nextComponentModule","navigateWithContentSwitcher","componentInfo","module","componentInputs","pageType","PageTypeEnum","EDIT","itemId","canShowHeader","DUPLICATE","getActionButtonsWithEntries","editEntry","duplicateEntry","_this$currentSubscrip","BitmapMetadata","bitsPerPixel","BitmapMetadataReader","_BitmapMetadataReader","readMetadataFromBase64EncodedString","base64decodedString","byteCharacters","atob","bytes","maxNumberOfBytesToDecode","INDEX_FIELD_DIB_HEADER_BYTES_COUNT","SIZE_FIELD_DIB_HEADER_BYTES_COUNT","i","length","charCodeAt","getDIBHeaderBytesCount","readMetadata","metadata","getBitsPerPixel","getNumericValue","INDEX_FIELD_BITS_PER_PIXEL","SIZE_FIELD_BITS_PER_PIXEL","start","numberOfBytes","valueBytes","slice","power","sumBy","byte","Math","pow","maxFileSizeAllowedInMb","validBitmapBitsPerPixelValues","uploadFilesWithCustomResultAction","fileType","resultAction","pvdFiles","forEach","filePathParts","split","last","toLowerCase","first","getFileSize","maxSize","getBuilder","openAlertDialog","titleText","messageText","DialogType","INFORMATION","imageArrayBuffer","isBitmapFormatValid","blobToImageData","onImageReaderLoad","unsubscribe","imageData","Int8Array","some","Image","onload","intComparator","valueA","valueB","_valueA","_valueB","isClickOutsideGivenElements","element","elementsClasses","tagName","intersection","classList","parentElement","LastModifiedCardUtils","_LastModifiedCardUtils","getPageUrls","machineQuality","add","texStyle","addMachineQuality","edit","editMachineQuality","overview","duplicate","duplicateMachineQuality","qualityFinishing","addFinishing","yarnType","yarn","addYarn","editYarn","duplicateYarn","coloredYarn","addColoredYarn","editColoredYarn","duplicateColoredYarn","finishingTemplate","addFinishingTemplate","editFinishingTemplate","duplicateFinishingTemplate","color","addColor","editColor","duplicateColor","colorSettings","creel","addCreel","editCreel","duplicateCreel","creelSettings","weaveStructure","addWeaveStructure","editWeaveStructure","overviewWeaveStructure","duplicateWeaveStructure","manageWeaveStructure","manageAddWeaveStructure","manageOverviewWeaveStructure","groupedWeaveStructure","overviewGroupedWeaveStructure","addGroupedWeaveStructure","editGroupedWeaveStructure","duplicateGroupedWeaveStructure","weavePattern","colorSet","addColorSet","editColorSet","duplicateColorSet","colorSetSettings","yarnSet","addYarnSet","editYarnSet","duplicateYarnSet","yarnSetSettings","coloredYarnSet","addColoredYarnSet","editColoredYarnSet","duplicateColoredYarnSet","weftColoredYarnSet","addWeftColoredYarnSet","editWeftColoredYarnSet","duplicateWeftColoredYarnSet","companyWeaveStructure","productionSchedule","texFab","productionOrder","addProductionOrder","editProductionOrder","duplicateProductionOrder","productionScheduleNew","addProductionOrderNewView","editProductionOrderNewView","duplicateProductionOrderNewView","productionOrderWeaving","weaving","tuftProductionOrder","tufting","plasticProductionOrder","plastic","customer","addCustomer","editCustomer","article","addArticle","editArticle","duplicateArticle","salesOrder","addSalesOrder","editSalesOrder","duplicateSalesOrder","weaveProduct","addWeaveProduct","editWeaveProduct","duplicateWeaveProduct","productConfiguration","addProductConfiguration","editProductConfiguration","dataUnitSetupCatalog","addDataUnitSetupCatalog","editDataUnitSetupCatalog","duplicateDataUnitSetupCatalog","dataUnitSetup","addDataUnitSetup","editDataUnitSetup","deviceTemplateCatalog","addDeviceTemplateCatalog","editDeviceTemplateCatalog","duplicateDeviceTemplateCatalog","deviceTemplateCounterCatalog","addCounterCatalog","editCounterCatalog","duplicateCounterCatalog","deviceTemplateConfigurationCatalog","addConfigurationCatalog","editConfigurationCatalog","duplicateConfigurationCatalog","deviceTemplate","addDeviceTemplate","editDeviceTemplate","duplicateDeviceTemplate","deviceTemplateCounter","addCounter","editCounter","duplicateCounter","deviceTemplateConfiguration","addConfiguration","editConfiguration","duplicateConfiguration","reportItem","addEvent","duplicateEvent","editEvent","eventAlert","tuftProduct","addTuftProduct","duplicateTuftProduct","editTuftProduct","plasticProduct","addPlasticProduct","editPlasticProduct","duplicatePlasticProduct","operator","addOperator","editOperator","duplicateOperator","pathLayoutTemplate","addPathLayoutTemplate","editPathLayoutTemplate","duplicatePathLayoutTemplate","pathLayoutTemplateSettings","resourceType","addResourceType","editResourceType","duplicateResourceType","physicalQuantity","addPhysicalQuantity","editPhysicalQuantity","duplicatePhysicalQuantity","declaration","automaticStopGroup","tool","utilities","addTool","editTool","duplicateTool","rejectReason","addRejectReason","editRejectReason","duplicateRejectReason","fixedSchedule","addFixedSchedule","editFixedSchedule","duplicateFixedSchedule","buggy","addBuggy","editBuggy","duplicateBuggy","shift","calendar","addShift","editShift","duplicateShift","shiftPattern","PATTERN","ADD_PATTERN","EDIT_PATTERN","DUPLICATE_PATTERN","shiftSchedule","SCHEDULE","ADD_SCHEDULE","getTranslations","delete","finishingTranslationKey","finishing","productionOrderTranslationKey","dataUnitSetupTranslationKey","DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY","DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY","stockLocation","rawMaterial","getNavigationData","PATTERN_MODULE","navigationKey","hasCustomSettings","getPermissionToModifyItems","TEXSTYLE_MACHINE_QUALITY_EDIT","TEXSTYLE_FINISHING_EDIT","TEXSTYLE_YARN_EDIT","TEXSTYLE_COLOR_EDIT","ACCESS_ALL","TEXSTYLE_WEAVE_PRODUCT_EDIT","TEXSTYLE_CREEL_EDIT","TEXSTYLE_EDIT_WEAVE_STRUCTURES","MANAGE_WEAVE_STRUCTURE_EDIT","TEXSTYLE_WEAVE_STRUCTURES_EDIT_PATTERN","TEXSTYLE_COLORSET_EDIT","TEXSTYLE_YARNSET_EDIT","TEXSTYLE_COLOREDYARNSET_EDIT","TEXSTYLE_WEFTCOLOREDYARNSET_EDIT","COMPANY_WEAVE_STRUCTURE_EDIT","TEXFAB_SCHEDULE","TEXFAB_WEAVE_ORDER_EDIT","TEXFAB_CUSTOMER_EDIT","TEXFAB_ARTICLE_EDIT","TEXFAB_SALES_ORDER_EDIT","SETTINGS_DATA_UNIT_SETUP_VIEW","SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW","ADMIN_DEVICE_TEMPLATE_EDIT","DEVICE_TEMPLATE_EDIT","ALERT_EDIT_EVENTS","TEXSTYLE_TUFT_PRODUCT_EDIT","TEXFAB_TUFT_ORDER_EDIT","SETTINGS_OPERATOR_EDIT","TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT","SETTINGS_REPORT_ITEM_EDIT","TEXSTYLE_PLASTIC_TOOL_EDIT","EDIT_BUGGIES","FIXED_SCHEDULE_EDIT","canShowConflictsDialog","customers","CarpetLoomMachine","Equipment","orderId","MachineType","CARPET_LOOM","_machineGroup","_remote","_loomLayoutZones","carpetLoomMachineJSON","machineQualities","possibleMachineQualities","possibleMachineQuality","OverviewListMachineQuality","creels","possibleCreels","possibleCreel","OverviewListCreel","machineGroup","MachineGroup","carpetLoomMachine","manufacturer","manufacturerId","MachineManufacturer","jacquardType","minNumberOfPicks","pickDensityInSchedule","possibleQualities","numberOfCreelPositions","dentsForFabric","sendReport","builderType","BuilderType","remote","remoteMachine","loomLayoutZones","JacquardMachineLoomLayoutZone","sort","firstLoomLayoutZone","secondLoomLayoutZone","position","_manufacturer","_jacquardType","_minNumberOfPicks","_pickDensityInSchedule","_possibleQualities","_possibleCreels","_numberOfCreelPositions","_dentsForFabric","_sendReport","_builderType","toJSON","_this$machineGroup","_this$machineGroup2","possibleCreelIds","possibleMachineQualityIds","possibleQuality","machineGroupId","loomLayoutZone","CarpetLoomNoJacquardMachine","CARPET_LOOM_NO_JQ","carpetLoomNoJacquardMachineJSON","ColortecMachine","COLORTEC","colortecMachineJSON","ColorteclplusMachine","COLORTECLPLUS","colorteclplusMachineJSON","ExtrusionMachine","winderSerialNumbers","bobbinHolderShaftNumbers","EXTRUSION","_bobbinHolderShaftNumbers","_winderSerialNumbers","extrusionMachineJSON","machineType","FinishingMachine","finishingMachineJSON","JacquardMachine","JACQUARD","jacquardMachineJSON","MyriadMachine","MYRIAD","myriadMachineJSON","SuperbadyeMachine","SUPERBADYE","superbadyeMachineJSON","SuperbaheatMachine","SUPERBAHEAT","superbaheatMachineJSON","SuperbawinderMachine","SUPERBAWINDER","superbawinderMachineJSON","VelvetNoJacquardMachine","VELVET_NO_JQ","velvetNoJacquardMachineJSON","machineClassFromMachineTypeMap","WEAVING_MACHINE","WeavingMachine","TUFT","TuftMachine","DYEING","DyeingMachine","UNDEFINED","UnconfiguredMachine","VELVET","VelvetMachine","WINDER","WinderMachine","PLASTIC_MACHINE","PlasticsMachine","getMachineClassFromMachineType","MobileNavigationBarActionItem","MobileNavigationBarItem","properties","command","navigationBarItemProperties","active","_command","executeCommand","commandArgs","MobileNavigationBarExternalLinkItem","link","_link","MobileNavigationBarItemSize","NORMAL","SMALL","mobilePositions","onboardingStep","badge","_name","_icon","_id","_position","_requiredPermission","_mobilePositions","_onboardingStep","_badge","_size","iconSize","mobileFriendly","_mobileFriendly","mobileOnly","_mobileOnly","MobileNavigationBarRouteLinkItem","canSearch","_route","_canSearch","LinkedRouteUtils","COLORED_YARN_SET_LINKED_ROUTES","_LinkedRouteUtils","MACHINE_QUALITY_LINKED_ROUTES","designLibrarySettings","editFinishing","duplicateFinishing","TUFT_PRODUCT_LINKED_ROUTES","WEAVING_PRODUCTION_ORDER_LINKED_ROUTES","TUFTING_PRODUCTION_ORDER_LINKED_ROUTES","DESIGN_LIBRARY_LINKED_ROUTES","WEFT_COLORED_YARN_SET_LINKED_ROUTES","PRODUCT_CONFIGURATION_LINKED_ROUTES","productConfigurationSettings","YARN_SET_LINKED_ROUTES","CREEL_LINKED_ROUTES","ARTICLE_LINKED_ROUTES","SALES_ORDER_LINKED_ROUTES","LINKED_PRODUCTION_ORDER_ROUTES","LINKED_MACHINE_DATA_SOURCE_ROUTES","machineDataSources","editMachineDataSource","LINKED_DEVICE_TEMPLATE","LINKED_DEVICE_TEMPLATE_COUNTER","editReportItem","planning","addProductionOrderForRun","addProductionOrderForMachine","addProductionOrderNewViewForRun","addProductionOrderNewViewForMachine","addProductionOrderForProductConfiguration","addProductionOrderNewViewForProductConfiguration","addTemplate","designLibrary","addOperatorType","editOperatorType","addMachineDataSource","NavigationHelperService","_NavigationHelperService","navigationHistory","routingHistory","navigatingBack","onUrlChange","_this$routingHistory","previousRoute","currentRoute","onbeforeunload","clearScrollPositionInSessionStorage","saveState","getCurrentRouteForSavingState","nextRoute","getNextRouteForSavingState","currentRouteLeaf","getCurrentRouteLeaf","isNextRouteRelatedToCurrent","lastState","initialRoute","getPreviousUrl","clearAllStates","savePartialState","previousNextRoute","hasPreviousRoute","getPreviousRoute","savePartialStateData","onDestroy","getState","hasState","pop","getPartialState","fromPreviousRoute","extractedData","Object","backRoute","navigationState","_this$routingHistory2","sessionStorage","sessionStorageKey","removeItem","back","setNewItemOrReopenDialogIfPresent","loadNewItem","reopenDialog","emptyNewItemState","newItemId","newItemNames","newItemState","emptyDialogState","dialogComponent","dialogState","newItemLoaded","ObjectUtils","isDeepEqual","currentRouteLeafKey","_LinkedRouteUtils$pat","routeLeaf","isRoutePathMatching","_this$routingHistory3","_this$previousRoute","_this$router","previousNavigation","finalUrl","_this$currentRoute","_this$routingHistory4","getCurrentUrl","SESSION_STORAGE_KEY","routeToMatch","_window","patternParts","part","RegExp","test","currentRouteData","history","ADD","OVERVIEW","OrderLinesGridService","_OrderLinesGridService","orderbook","colDefBuilderFactory","isFillingPath","BehaviorSubject","autoFillButtonClicked","booleanFalseTranslation","booleanTrueTranslation","getAutoFillButtonClicked","asObservable","setAutoFillButtonClicked","buttonClicked","getIsFillingPath","setIsFillingPath","filling","getAdvancedSearchFiltersUpdatedWithFloatingFilters","advancedSearchFilters","floatingFilters","CENTIMETER","advancedSearchFilter","MAIN_COLOR","BORDER_COLOR","floatingFilterToSyncWith","floatingFilter","getFilterModelUpdatedWithAdvancedSearchFilters","columnDefs","currentFilterModel","filterModelFromAdvancedSearchFilters","reduce","columnDef","colId","merge","getAdditionalInfoColumnDefs","getListOfCustomSettings","withColId","withValueGetter","params","getAdditionalInfoValueFromKey","withHeaderName","withComparator","StringUtils","stringComparator","build","getColumnDefs","isSelectedOrderLines","commercialWidthInMM","withField","withPinned","withNumericMultiFilter","getPossibleColumnsValues","withMMConversion","commercialHeightInMM","commercialLengthInMM","colDefsBeforeAdditionalInfo","withColIdAndField","withCellRenderer","GridOrderLineStatusComponent","withTextMultiFilter","withTooltipValueGetter","toUpperCase","GridTagComponent","TagSize","colorGetter","LOW","TagColor","PRIMARY","MEDIUM","WARNING","HIGH","ERROR","withLockVisible","withLockPinned","colDefsAfterAdditionalInfo","withTooltipField","amount","amountPlanned","amountLeft","amountProduced","withDate","withDateMultiFilter","_params$data$article","getShape","shape","missingDesign","withBooleanFilter","switchMap","additionalInfoColDefs","of","columnIdentifier","getPossibleValues","_data$additionalInfo$","_data$additionalInfo$2","additionalInfo","additionalInfoItem","PlanningItemHelper","isDifferentConfig","previous","_previous$creel","_next$creel","_previous$quality","_next$quality","_previous$tool","_next$tool","RunCarpet","quality","creelMappingFormula","RunWeaving","RunTufting","RunPlastic","getTimelineStartDate","item","forecast","_item$actualStartDate","actualStartDate","estimatedStart","getTimelineEndDate","_item$actualEndDate","actualEndDate","estimatedEnd","estimatedEndDate","getItemName","_item$productionOrder","_item$productionOrder2","_item$weaveProduct","_item$tuftProduct","_item$tool","isOrderItem","FixedSchedulePlaceholder","getItemStatus","EXECUTING","EXECUTED","status","getMaintenanceTypesForMachineType","MaintenanceType","MAINTENANCE","MACHINE_UNAVAILABLE","CREEL_CHANGE","WARP_CHANGE","getMachineTypesForItem","OrderCarpet","OrderWeaving","OrderTufting","OrderPlastic","isOrderLiteItem","canBeInRun","isRunItem","getEstimatedProductionTime","toPlan","machine","_toPlan$compatibleMac","_toPlan$compatibleMac2","compatibleMachines","compatibleMachine","estimatedProductionTime","isTargetItemCompatible","targetItem","_item$productionOrder3","_targetItem$creel","_item$productionOrder4","_targetItem$quality","_item$productionOrder5","_targetItem$tool","childTypeForRunType","runType","PlanningItemType","RUN_CARPET","ORDER_CARPET","RUN_WEAVING","ORDER_WEAVING","RUN_TUFTING","ORDER_TUFTING","RUN_PLASTIC","ORDER_PLASTIC","isFixedScheduleCompatible","machineCompatibility","compatibility","compatibleCreel","qualities","compatibleQuality","getItemsForDateRange","items","dateRange","momentDateRange","startDate","endDate","overlaps","adjacent","getTotalRunningTimeInMsForDateRange","momentItemDateRange","intersect","diff","THREAD_BY_THREAD_DRAWING_NUMBER_OF_COLUMNS_TO_DROP_FOR_WEFT_SELECTION","calculateDrawingWidthInDents","threadByThread","dimensionsInPixels","numberOfGroundYarns","numberOfCloths","numberOfColumnsToDropForWeftSelection","getListDrawingFromProductionScheduleItem","productionScheduleItemInPathGroup","listDrawing","hasOrderLine","ListDrawingOrderLine","orderLines","orderLineId","scheduleItemType","MANUAL_NON_PRODUCTION_ITEM","ListDrawingJute","ListDrawingConfiguration","RemoveConfirmationService","_RemoveConfirmationService","open","selected","deleteCall","translation","api","conflictsCall","shouldNavigateBack","getRemoveMessage","CONFIRM_DELETE","AlertDialogResult","CONFIRM","selectedRows","Array","isArray","applyTransaction","getSelectedRows","deselectAll","openDeletedToast","navigateBack","errorMessage","handleDeletionErrorResponse","_selected$technicalNa","technicalName","_errorMessage$errorCo","_errorMessage$errorCo2","_this$translate$insta","_errorMessage$errorCo5","_errorMessage$errorCo3","_errorMessage$errorCo4","errorContext","messages","getConflicts","conflicts","withClass","openDialog","ConflictsDialogComponent","ConflictsDialogData","createCannotDeleteData","ConflictType","canActivatePermissionPrototypeGuard","checkIsSwitchingSubscription","AuthorizedRouteFactory","createModuleRoute","routeNode","modulePath","canActivateGuards","canActivateChild","getActivateGuards","createComponentRoute","requiredPermissionFactory","canDeavtivateGuards","canDeactivate","createPrototypeComponentRoute","canDeactivateGuards","PLANNING_MODULE","PLANNING_PROTOTYPE_MODULE","PRODUCTION_SCHEDULE_MODULE","CUSTOMER_MODULE","ARTICLE_MODULE","SALES_ORDER_MODULE","ORDERBOOK_MODULE","WEAVING_PRODUCTION_ORDER_MODULE","TUFT_PRODUCTION_ORDER_MODULE","PLASTIC_PRODUCTION_ORDER_MODULE","PATH_LAYOUT_TEMPLATE_MODULE","PLANNING","PLANNING_PROTOTYPE","CARPET_PRODUCTION_ORDER","ADD_CARPET_PRODUCTION_SCHEDULE","ADD_CARPET_PRODUCTION_SCHEDULE_NEW","ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE","ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE_NEW","ADD_CARPET_PRODUCTION_SCHEDULE_RUN","ADD_CARPET_PRODUCTION_SCHEDULE_RUN_NEW","ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION","ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION_NEW","EDIT_CARPET_PRODUCTION_SCHEDULE","DUPLICATE_CARPET_PRODUCTION_SCHEDULE","EDIT_CARPET_PRODUCTION_SCHEDULE_NEW","DUPLICATE_CARPET_PRODUCTION_SCHEDULE_NEW","CARPET_PRODUCTION_SCHEDULE_SETTINGS","WEAVE_ORDER","ADD_WEAVE_ORDER","ADD_WEAVE_ORDER_MACHINE","ADD_WEAVE_ORDER_RUN","EDIT_WEAVE_ORDER","DUPLICATE_WEAVE_ORDER","WEAVE_ORDER_SETTINGS","TUFT_ORDER","ADD_TUFT_ORDER","ADD_TUFT_ORDER_MACHINE","ADD_TUFT_ORDER_RUN","EDIT_TUFT_ORDER","DUPLICATE_TUFT_ORDER","TUFT_ORDER_SETTINGS","PLASTIC_ORDER","ADD_PLASTIC_ORDER","EDIT_PLASTIC_ORDER","DUPLICATE_PLASTIC_ORDER","PATH_LAYOUT","ADD_PATH_LAYOUT","EDIT_PATH_LAYOUT","DUPLICATE_PATH_LAYOUT","PATH_LAYOUT_SETTINGS","EDIT_CUSTOMER","EDIT_ARTICLE","DUPLICATE_ARTICLE","EDIT_SALES_ORDER","DUPLICATE_SALES_ORDER","ORDERBOOK_SETTINGS","WEAVE_PRODUCT_MODULE","TUFT_PRODUCT_MODULE","PLASTIC_PRODUCT_MODULE","TOOL_MODULE","BUGGY_MODULE","TOOL","EDIT_TOOL","DUPLICATE_TOOL","PLASTIC_PRODUCT","EDIT_PLASTIC_PRODUCT","DUPLICATE_PLASTIC_PRODUCT","EDIT_BUGGY","DUPLICATE_BUGGY","SHIFT_MODULE","SCHEDULE_MODULE","SHIFT","EDIT_SHIFT","DUPLICATE_SHIFT","getNavigationRoute","cachedRoutes","_route$data","_NavigationUtils$cach","_route$data2","getMultiNavigationData","ids","_route$data3","getAbsoluteNavigationData","_NavigationUtils$cach2","_route$data4","reuse","parentId","getRoute","_NavigationUtils$cach3","_route$data5","texfabRoutes","planningRoutes","planningPrototypeRoutes","productionScheduleRoutes","customerRoutes","articleRoutes","salesOrderRoutes","orderbookRoutes","productionOrderWeavingRoutes","tuftProductionOrderRoutes","plasticProductionOrderRoutes","pathLayoutTemplateRoutes","textileDataRoutes","utilitiesRoutes","toolRoutes","plasticProductRoutes","buggyRoutes","calendarRoutes","shiftRoutes","patternRoutes","scheduleRoutes","RouteNode","isMobileFriendly","isMobileOnly","_path","_isMobileFriendly","_isMobileOnly","parent","_parent","hasParameter","amountOfRouteParameters","match","node","accumulatedPath","matchesPath","startsWith","getRoutes","property","RouteBranch","_children","children","componentIndex","indexOf","splice","replacement","pathSegments","_this$_children","ArticleRoute","_addArticle","_duplicateArticle","_editArticle","ColorRoute","_addColor","_duplicateColor","_editColor","_colorSettings","ColorSetRoute","_addColorSet","_duplicateColorSet","_editColorSet","_colorSetSettings","ColoredYarnSetRoute","_addColoredYarnSet","_duplicateColoredYarnSet","_editColoredYarnSet","CreelRoute","_addCreel","_duplicateCreel","_editCreel","_creelSettings","FinishingTemplateRoute","_addFinishingTemplate","_duplicateFinishingTemplate","_editFinishingTemplate","MachineQualityRoute","_addMachineQuality","_duplicateMachineQuality","_editMachineQuality","_addFinishing","addFinishingFromQuality","_addFinishingFromQuality","_duplicateFinishing","_editFinishing","editFinishingFromQuality","_editFinishingFromQuality","RootRoute","_login","_texEdit","_texState","_texBi","_profile","_help","_unauthorized","_notFound","credits","_credits","_texStyle","_texFab","_calendar","_texBot","_utilities","components","_components","_loadingFile","_logger","_processes","_settings","notifications","_notifications","_this$getRoutes","RouteLeaf","SalesOrderRoute","_addSalesOrder","_editSalesOrder","_duplicateSalesOrder","TexBiRoute","reports","_reports","windervibrationreport","_windervibrationreport","bmsreports","_bmsreports","qmreports","_qmreports","wmreports","_wmreports","emreports","_emreports","machineEventBoard","_machineEventBoard","winderVibrationForm","_winderVibrationForm","TexBotRoute","machineDocumentation","_machineDocumentation","training","_training","TexEditRoute","dataSheets","_dataSheets","dataSheetDetails","_dataSheetDetails","_designLibrary","_designLibrarySettings","_addDesign","_productConfiguration","_addProductConfiguration","_editProductConfiguration","duplicateProductConfiguration","_duplicateProductConfiguration","_productConfigurationSettings","tuftLink","_tuftLink","TexFabRoute","_productionOrder","_customer","_planning","planningPrototype","_planningPrototype","_article","_salesOrder","_orderbook","_weaving","_tufting","_plastic","_pathLayoutTemplate","TexStateRoute","_editMachine","_addTemplate","editTemplate","_editTemplate","duplicateTemplate","_duplicateTemplate","kiosk","_kiosk","addWeavingMachineType","_addWeavingMachineType","addTuftingMachineType","_addTuftingMachineType","addWinderMachineType","_addWinderMachineType","addDyeingMachineType","_addDyeingMachineType","addPlasticMachineType","_addPlasticMachineType","prototype","_prototype","TexStyleRoute","_finishingTemplate","_color","_colorSet","_yarnSet","_coloredYarnSet","_weftColoredYarnSet","_coloredYarn","_yarn","_machineQuality","_creel","_weaveProduct","_weaveStructure","_groupedWeaveStructure","_companyWeaveStructure","_tuftProduct","_plasticProduct","_buggy","_fixedSchedule","YarnRoute","_addYarn","_duplicateYarn","_editYarn","YarnSetRoute","_addYarnSet","_duplicateYarnSet","_editYarnSet","_yarnSetSettings","AlertRoute","addAlert","_addAlertForEvent","editAlert","_editAlertForEvent","BuggyRoute","_addBuggy","_duplicateBuggy","_editBuggy","CalendarRoute","_shift","ColoredYarnRoute","_addColoredYarn","_duplicateColoredYarn","_editColoredYarn","CompanyWeaveStructureRoute","CustomerRoute","_addCustomer","_editCustomer","DataUnitSetupCatalogRoute","customSetting","_customSetting","_addDataUnitSetupCatalog","_editDataUnitSetupCatalog","_duplicateDataUnitSetupCatalog","DataUnitSetupRoute","addDataUnitSetupFromCatalog","_addDataUnitSetupFromCatalog","_addDataUnitSetup","_editDataUnitSetup","DeclarationRoute","addDeclaration","_addDeclaration","editDeclaration","_editDeclaration","DeviceTemplateCatalogRoute","_addDeviceTemplateCatalog","_editDeviceTemplateCatalog","_duplicateDeviceTemplateCatalog","_addCounterCatalog","_editCounterCatalog","_duplicateCounterCatalog","_addConfigurationCatalog","_editConfigurationCatalog","_duplicateConfigurationCatalog","DeviceTemplateRoute","_addDeviceTemplate","_editDeviceTemplate","_duplicateDeviceTemplate","_addCounter","_editCounter","_duplicateCounter","_addConfiguration","_editConfiguration","_duplicateConfiguration","addDeviceTemplateFromCatalog","_addDeviceTemplateFromCatalog","EventRoute","_addEvent","_duplicateEvent","_editEvent","FixedScheduleRoute","_addFixedSchedule","_editFixedSchedule","_duplicateFixedSchedule","GroupedWeaveStructureRoute","_overviewGroupedWeaveStructure","_addGroupedWeaveStructure","_editGroupedWeaveStructure","_duplicateGroupedWeaveStructure","MachineDataSourceRoute","_addMachineDataSource","_editMachineDataSource","OperatorRoute","_addOperator","_editOperator","_duplicateOperator","_addOperatorType","_editOperatorType","OrderbookRoute","PathLayoutTemplateRoute","_addPathLayoutTemplate","_editPathLayoutTemplate","_duplicatePathLayoutTemplate","_pathLayoutTemplateSettings","PhysicalQuantityRoute","_addPhysicalQuantity","_editPhysicalQuantity","_duplicatePhysicalQuantity","PlanningPrototypeRoute","PlanningRoute","PlasticProductRoute","_addPlasticProduct","_editPlasticProduct","_duplicatePlasticProduct","PlasticRoute","_addProductionOrder","_editProductionOrder","_duplicateProductionOrder","_addProductionOrderForMachine","ProductionOrderRoute","_addProductionOrderNewView","_duplicateProductionOrderNewView","_addProductionOrderNewViewForMachine","_addProductionOrderForRun","_addProductionOrderNewViewForRun","_addProductionOrderForProductConfiguration","_addProductionOrderNewViewForProductConfiguration","_editProductionOrderNewView","details","_details","ProfileRoute","changelogMobile","_changelogMobile","RejectReasonRoute","_addRejectReason","_editRejectReason","_duplicateRejectReason","ReportItemRoute","_editReportItem","ResourceTypeRoute","_addResourceType","_editResourceType","_duplicateResourceType","SettingsRoute","_machineDataSources","_dataUnitSetup","_dataUnitSetupCatalog","_resourceType","_declaration","_physicalQuantity","_deviceTemplate","_deviceTemplateCatalog","_reportItem","_event","alert","_alert","_automaticStopGroup","_operator","_rejectReason","ShiftRoute","_addShift","_editShift","_duplicateShift","TexBotMachineDocumentationRoute","TexBotTrainingRoute","machineDetails","_machineDetails","manage","_manage","manageTags","_manageTags","manageDetails","_manageDetails","ToolRoute","_addTool","_editTool","_duplicateTool","TuftProductRoute","_addTuftProduct","_editTuftProduct","_duplicateTuftProduct","TuftingRoute","UtilitiesRoute","_tool","WeaveProductRoute","_addWeaveProduct","_duplicateWeaveProduct","_editWeaveProduct","WeaveStructureRoute","_overviewWeaveStructure","_addWeaveStructure","_duplicateWeaveStructure","_editWeaveStructure","weaveStructureSettings","_weaveStructureSettings","_manageAddWeaveStructure","_manageOverviewWeaveStructure","WeavingRoute","WeftColoredYarnSetRoute","_addWeftColoredYarnSet","_duplicateWeftColoredYarnSet","_editWeftColoredYarnSet","queryStrings","getParentRoute","urlSegmentGroup","parseUrl","root","PRIMARY_OUTLET","config","routeA","routeB","initialize","rootRoute","TEXEDIT_SHOW_ICON","TEXEDIT_TUFTLINK","TEXEDIT_VIEW_DRAWING_LIBRARY","TEXSTYLE_VIEW","TEXEDIT_EDIT_DRAWING_LIBRARY","TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW","TEXSTATE_SHOW_ICON","TEXSTATE_EDIT_DYNAMIC_DATA_TEMPLATE","TEXSTATE_VIEW_DYNAMIC_DATA_TEMPLATE","TEXSTATE_EDIT_MACHINE","TEXBI_SHOW_ICON","TEXBI_READ_A_REPORT","TEXBI_EXTRUSION_VIBRATION_REPORT","TEXBI_EVENT_BOARD_VIEW","TEXBI_EXTRUSION_VIBRATION_FORM","MANAGEMENT_APPLICATION","TEXSTYLE_FINISHING_VIEW","TEXSTYLE_COLOR_VIEW","TEXSTYLE_COLORSET_VIEW","TEXSTYLE_YARNSET_VIEW","TEXSTYLE_COLOREDYARNSET_VIEW","TEXSTYLE_WEFTCOLOREDYARNSET_VIEW","TEXSTYLE_YARN_VIEW","FIXED_SCHEDULE_VIEW","TEXSTYLE_MACHINE_QUALITY_VIEW","VIEW_BUGGIES","TEXSTYLE_CREEL_VIEW","TEXSTYLE_WEAVE_PRODUCT_VIEW","TEXSTYLE_TUFT_PRODUCT_VIEW","TEXSTYLE_PLASTIC_PRODUCT_VIEW","TEXSTYLE_PLASTIC_PRODUCT_EDIT","TEXSTYLE_VIEW_WEAVE_STRUCTURES","MANAGE_WEAVE_STRUCTURE_VIEW","COMPANY_WEAVE_STRUCTURE_VIEW","TEXFAB_PLANNINGBOARD","TEXFAB_PLANNINGBOARD_NEW","TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW","TEXFAB_WEAVE_ORDER_VIEW","TEXFAB_WEAVE_QUEUE","TEXFAB_TUFT_ORDER_VIEW","TEXFAB_TUFT_QUEUE","TEXFAB_PLASTIC_ORDER_VIEW","TEXFAB_PLASTIC_ORDER_EDIT","TEXFAB_CUSTOMER_VIEW","TEXFAB_ARTICLE_VIEW","TEXFAB_SALES_ORDER_VIEW","TEXFAB_ORDERBOOK","SHIFT_VIEW","SHIFT_EDIT","TEXBOT_SHOW_ICON","TEXBOT_DOCUMENTS_VIEW","TEXBOT_TRAINING_VIEW","TEXBOT_TRAINING_MANAGE","TEXSTYLE_PLASTIC_TOOL_VIEW","SETTINGS_SHOW_ICON","MACHINE_DATA_SOURCE_VIEW","MACHINE_DATA_SOURCE_EDIT","SETTINGS_DATA_UNIT_SETUP_CATALOG_EDIT","SETTINGS_DATA_UNIT_SETUP_EDIT","RESOURCE_TYPE_VIEW","RESOURCE_TYPE_EDIT","PHYSICAL_QUANTITY_VIEW","PHYSICAL_QUANTITY_EDIT","SETTINGS_DECLARATIONS_VIEW","SETTINGS_DECLARATIONS_EDIT","DEVICE_TEMPLATE_VIEW","ADMIN_DEVICE_TEMPLATE_VIEW","SETTINGS_REPORT_ITEM_VIEW","ALERT_VIEW_EVENTS","SETTINGS_AUTOMATIC_STOP_GROUP_VIEW","SETTINGS_OPERATOR_VIEW","SETTINGS_OPERATOR_TYPE_EDIT","SETTINGS_OPERATOR_TYPE_VIEW","REJECT_REASON_VIEW","REJECT_REASON_EDIT","SourceElementUtils","findSourceElementForDialog","className","positionOfDialog","source","target","PositionOfDialog","LEFT","childElementCount","CommonStringUtils","createStringFromColorsOrYarnTypes","colorsOrYarnTypes","getPropertyValueOrGeneralPlaceholderIfEmpty","objectToInspect","getMappedColoredYarnSetWithStartDent","coloredYarnSetWithStartDent","coloredYarnSetCreelMap","sortDirection","OverviewListColoredYarnSetWithStartDent","getMappedColoredYarnSet","startDent","technicalWidthInDents","overviewListColorSet","sortedColorSetCreelPositions","orderBy","creelPositions","getCreelPositionSortingFunction","OverviewListColorSet","overviewListYarnSet","sortedYarnCreelPositions","OverviewListYarnSet","OverviewListColoredYarnSet","used","creelMap","creelPosition","_creelMap$creelPositi","creelPositionInMap","currentPositionOnMachine","leastCommonMultiple","firstValue","secondValue","minVal","min","OverviewListColorSetStubFactory","getRandomColorSetOverviewListWithId","getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions","colorId","OverviewListCreelPosition","ColorStubFactory","getRandomColorWithIdAndColorCode","getRandomOverviewListColorSet","OverviewListYarnSetStubFactory","getRandomYarnSetOverviewListWithId","getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions","times","creelPositionIndex","numberOfYarnTypes","yarnTypeIndex","OverviewListYarnTypeStubFactory","getRandomOverviewListYarnTypeWithId","OverviewListColoredYarnSetStubFactory","getRandomColoredYarnSet","getRandomColoredYarnSetWithId","getRandomColoredYarnSetWithIdAndNumberOfCreelPositions","getRandomColoredYarnSetWithIdAndName","OverviewListYarnType","NUMBER_METRIC","weightInKilogramPerSquareMeter","weightInKilogram","UnsavedChangesNotifierService","_UnsavedChangesNotifierService","isFormDirty","saveEventEmitter","initializeBeforeUnloadListener","removeEventListener","onBeforeUnload","hasUnsavedFormChanges","notifyChangesToForm","hasFormChanged","notifyChangesToOthers","setSaveEventEmitter","action","navigateToSelectedRoute","getSaveEventEmitter","notifyChanges","dirty","savePartialStateOfUnsavedChangesNotifier","getPartialStateOfUnsavedChangesNotifier","prevState","preventDefault","returnValue","addEventListener","NavigationHistoryService","_NavigationHistoryService","stateUpdates","_stateUpdates","subscribeToRouterEvents","events","NavigationEnd","previousUrl","currentUrl","replaceState","query","navigateExtras","replaceUrl","complete","DurationFormatPipe","_DurationFormatPipe","transform","time","timeUnit","isNaN","duration","trim","pure","HighlightSearchPipe","_HighlightSearchPipe","args","regExp","ReportItemFormatPipe","_ReportItemFormatPipe","field","ReportItemTemplateField","RUN_TIMESTAMP","STOP_TIMESTAMP","startTimer","REMAINING_TIME","convertToTimeSpan","ESTIMATED_TIME_OF_COMPLETION","convertToDateTime","_reportItem$value","formatReportItem","interval","momentDuration","asSeconds","seconds","padStart","MACHINE_EFFICIENCY_VALUE","GROUP_EFFICIENCY_VALUE","OPERATOR_EFFICIENCY","SPEED_EFFICIENCY","ORDER_PROGRESS","SPINDLE_EFFICIENCY","SYSTEM_EFFICIENCY","OVERALL_EFFICIENCY","PUMP_SPEED","PERCENTAGE","convertToDecimals","PRODUCTION","METER","CUTS_PER_10KM","JOINTS_PER_10KM","YARN_FAULTS_PER_10KM","STOP_GROUPS","QTY_PRODUCED","QTY_REQUIRED","WATER_CONSUMPTION","STEAM_CONSUMPTION","CUBIC_METERS","SEC_AIR","NORMAL_CUBIC_METER_PER_SQUARE_METER","SEC_POWER","KILOWATT_HOUR_PER_SQUARE_METER","LIQUOR_RATIO","STANDARD_RPM","WEIGHT","KILOGRAM","POWER_CONSUMPTION","KILOWATT_HOUR","AIR_CONSUMPTION","NORMAL_CUBIC_METER","PRODUCTIVE_SPEED","REEL_SPEED","METER_PER_MINUTE","TEMP_MAIN_TANK","TEMP_SIDE_TANK","DEGREES_CELSIUS","AVERAGE_RPM","ACTUAL_ROTATIONS_PER_MINUTE","PACKAGES","BATCH_LOAD","amountOfDecimals","toFixed","WeaveStructureColumnPipe","_WeaveStructureColumnPipe","singleWidth","version","doubleWidth","backgroundWeaveStructure","topWeaveStructure","bottomWeaveStructure","_currentSubscription$","hasRequiredPermission","canDeactivateRouteWithUnsavedChanges","activatedRoute","currentState","nextState","DialogBuilderFactoryService","unsavedChangesNotifierService","Observable","observer","DISCARD_AND_SAVE","DISCARD","SAVE","NavigationBreadcrumbsService","_NavigationBreadcrumbsService","applicationLayoutService","onNameChangedSubject","isUsingBreadcrumbFormLinkerSubject","menuItems","getAllMenuItemsDetails","menuItemsChanged","_this$applicationLayo","_this$applicationLayo2","defaultMenuItems","menuItem","setMachineQualityChildEntries","setMachineChildEntries","childEntries","isUsingBreadcrumbFormLinker","findChildEntryByPath","currentActiveMenuItems","activeMenuItems","isString","OnboardingNavigationStep","NOTIFICATIONS","TEXSTATE","TEXBOT","TEXEDIT","TEXBI","TEXCREDITS","PROFILE","HELP","PROCESSES","OpenMobileNavigationBarCommand","sideNavigationState","changeNavigationStateToOpen","onNavigationStateChanged","MobileNavigationBarItemMobilePosition","QUICK_ACCESS","MENU","MobileNavigationBarItemPosition","TOP","BOTTOM","NONE","_MobileNavigationService","sidenavigationState","notificationsService","openNavigationBarCommand","navigationBarItems","composeMobileNavigationBarItems","getQuickAccessBarItems","navigationBarRouteLinkItems","texStateNavigationItem","getNavigationBarItems","available","navigationBarItem","unreadCount","environment","helpUrl","_NavigationService","IS_SWITCHING_SUBSCRIPTION_KEY","cachedMenuItems","composeMenuItems","_navigationBarRouteLi","flatMap","isExpanded","shouldHide","hasAtLeastOneOfThePermissions","DESIGNS_VIEW","SALES_VIEW","composeProcessItem","JOB_VIEW","setIsSwitchingSubscription","removeIsSwitchingSubscription","SidebarSize","LARGE","AsyncUniqueValidator","createValidator","repository","originalIdentifier","createValidatorForFunc","isIdentifierAvailable","control","debounceTime","distinctUntilChanged","take","touched","observableOf","isNullOrWhitespace","processCheckName","res","identifierTaken","isAvailable","isMultipleOfValidator","multiple","isMultipleOf","Article","_design","_finishing","_used","articleJSON","FinishingForArticle","createEmptyArticle","finishingId","configuration","configurations","CreelPositionForArticle","creelPositionForArticleJSON","DrawingForArticle","repeated","_shape","_repeated","drawingForArticleJSON","_version","nameWithVersion","createNameWithVersion","finishingForArticleJSON","fromOverviewListFinishing","overviewListFinishing","MachineQualityForArticle","machineQualityForArticleJSON","fromOverviewListMachineQuality","overviewListMachineQuality","BackgroundJobType","COMPLETE_ORDER","REMOVE_FILES","PROCESS_SINGLE_BMP","GENERATE_SCHEDULE_ZIP","ERP_CREATE_SCHEDULE","BackgroundStatus","NOT_STARTED","STARTED","COMPLETED","FAILED","CANCELLED","backgroundStatusIconMap","getStatusIconName","BackgroundTaskAction","CREATE_ORDER","PROCESS_ORDER","TRANSLATE_ORDER","SEND_ORDER","QUEUE_ORDER","CPS_QUERY_MACHINE_INFO","CPS_CREATE_AND_GET_QUALITIES","CPS_CREATE_AND_GET_DEFAULT_CREEL","CPS_GET_DESIGNS","CPS_CREATE_ORDERLINES","CPS_CREATE_SCHEDULE","CPS_VERIFY_SCHEDULE","CPS_CREATE_PRODUCTION_ORDER","Shift","shiftJSON","PresetColors","ColorPatternVisualisation","PatternVisualisation","rgb","PatternVisualisationType","_rgb","patternVisualisationJSON","pattern","PRODUCT_CONFIGURATION","PRODUCTION_ORDER_WEAVING","FIXED_SCHEDULE","PRODUCTION_ORDER_PLASTIC","STOCK_LOCATION","PRODUCTION_ORDER_TRANSLATION_KEY","translationKeysForConflictType","pathsForConflictType","getTranslationKeyForConflictType","conflictType","getPathForConflictType","conflict","conflictUrl","hasPermissionToGoToNewBuilder","serializeUrl","createUrlTree","TEXFAB_NEW_BUILDER","CustomSettings","nameGenerator","_nameGenerator","NameGenerator","NameGeneratorProperty","_type","NameGeneratorPartType","ALPHABETIC_SERIAL_NUMBER","NUMERIC_SERIAL_NUMBER","PROPERTY_VALUE","CUSTOM_TEXT","CALCULATED_VALUE","NameGeneratorPart","CalculatedValuePart","CustomTextPart","customText","_customText","EntityPropertyPart","cutFromDirection","cutStartCharacter","cutLength","_cutFromDirection","_cutStartCharacter","_cutLength","SerialNumberPart","maxLength","startValue","stepSize","_maxLength","_startValue","_stepSize","NameGeneratorPropertyTranslate","MACHINE_NAME_TRANSLATION_KEY","ENTITY_PROPERTY_TRANSLATION_KEY_MAP","getKey","getKeyForProperty","separatorName","separatorSymbol","parts","_separatorName","NameGeneratorSeparator","_separatorSymbol","_parts","jsonPart","nameGeneratorPartFromJSON","CustomerAddressDetails","streetName","country","streetNumber","postalCode","city","_streetName","_country","_streetNumber","_postalCode","_city","customerAddressJSON","CustomerContactDetails","email","telephone","fax","_email","_telephone","_fax","customerContactJSON","Customer","number","contactDetails","addressDetails","comments","_number","_contactDetails","_addressDetails","_comments","customerJSON","customerContactDetails","customerAddressDetails","address","customerNumber","RECTANGULAR","OVAL","ECLIPSE","CIRCLE","RUNNER","WALL_TO_WALL","drawingShape","DrawingPatternVisualisation","DRAWING","_image","PriorityLevel","ALARM","CRITICAL","FontFamily","ARIAL","BITSTREAM_VERA_SANS_MONO","VERDANA","COURIER","TIMES","FontStyle","ITALIC","FontWeight","REGULAR","BOLD","IdNameDescription","IdName","description","_description","IdNameUsed","IdNameVersion","fromMachineQuality","BaseMachineType","model","_model","_this$manufacturer","BUGGIES","ROLLS","ControllerType","DyeingMachineType","technology","controllerType","minimumLoadInKg","maximumLoadInKg","maximumTemperatureInCelsius","_technology","_controllerType","_minimumLoadInKg","_maximumLoadInKg","_maximumTemperatureInCelsius","dyeingMachineTypeJSON","Technology","technologyId","technologyName","EquipmentManufacturer","manufacturerName","controllerTypeId","controllerTypeName","_this$technology","_this$controllerType","machineTypeJSON","dyeingMachineType","_dyeingMachineType","dyeingMachineJSON","_this$dyeingMachineTy","dyeingMachineTypeId","models","technologyIds","_models","_technologyIds","equipmentManufacturerJSON","_machineType","_orderId","machineJSON","Gauge","_name$split","_fractionalValueAsString","fractionalValueAsString","fractionalValue","parseFloat","JacquardMachineLoomLayoutZoneRepeatType","INLINE","MIRROR","JacquardMachineLoomLayoutZoneType","SELVEDGE","numberOfDents","repeatType","startDentRepeat","_numberOfDents","_repeatType","_startDent","_startDentRepeat","startDent1Based","jacquardMachineLoomLayoutZoneJSON","AVERAGE","machineGroupJSON","compare","machineGroupA","machineGroupB","jacquardTypes","_jacquardTypes","getRandomMachineManufacturerWithId","machineManufacturerJSON","RUNNING","STOPPED_MANUAL","STOPPED_CRITICAL","DISCONNECTED","CONNECTED","getMachineStatusByLabel","label","getMachineStatusClass","machineStatus","canSeeStatus","getMachineStatusColor","canSeeDeclarationMessages","isStatusBar","isDisconnected","reportItemStopReasonColor","reportItems","DECLARATION_COLOR","ColorConstants","FUNCTIONAL_COLOR_RED","PRIMARY_COLOR_VDW_BLUE","FUNCTIONAL_COLOR_GREEN","getIconNameForMachineType","NumberingMode","BOTTOM_TOP_LEFT_RIGHT","BOTTOM_TOP_RIGHT_LEFT","LEFT_RIGHT_BOTTOM_TOP","LEFT_RIGHT_TOP_BOTTOM","RIGHT_LEFT_BOTTOM_TOP","RIGHT_LEFT_TOP_BOTTOM","TOP_BOTTOM_LEFT_RIGHT","TOP_BOTTOM_RIGHT_LEFT","PlasticsMachineType","standardSpeed","_standardSpeed","plasticsMachineTypeJSON","speedKind","standardEfficiency","plasticsMachineType","_standardEfficiency","_plasticsMachineType","plasticsMachineJSON","plasticMachineType","StandardSpeed","SPEED","standardSpeedInCycleTime","convertSpeedAndCycleTime","_this$plasticsMachine","plasticMachineTypeId","CYCLE_TIME","ToolStatus","ASSEMBLING","FREE","IN_MAINTENANCE","IN_USE","NOT_AVAILABLE","tuftingMachineType","_tuftingMachineType","tuftingMachineJSON","undefined","TuftingMachineType","_this$_tuftingMachine","tuftingMachineTypeId","width","gauge","_width","_gauge","tuftingMachineTypeJSON","widthInCm","gaugeId","gaugeName","_this$gauge","VelvetMachineDrawingInType","PILE","GROUND","VelvetMachineDrawingIn","VelvetMachineGroundDrawingIn","bottomCloth","_bottomCloth","velvetMachineGroundDrawingInJSON","VelvetMachinePileDrawingIn","velvetMachinePileDrawingInJSON","_drawingIn","velvetMachineJSON","_velvetMachineJSON$dr","_velvetMachineJSON$dr2","velvetMachine","groundYarnsPerDent","drawingIn","drawingInJSON","firstDrawingIn","secondDrawingIn","_groundYarnsPerDent","_this$possibleCreels$","_this$possibleCreels","_this$possibleQualiti","_this$possibleQualiti2","WeavingMachineType","weavingMachineTypeJSON","numberOfFeeders","numberOfShafts","weavingMachineType","_numberOfFeeders","_numberOfShafts","_weavingMachineType","weavingMachineJSON","_this$weavingMachineT","weavingMachineTypeId","WinderMachineType","winderMachineTypeJSON","maxNumberOfSpindles","winderMachineType","_maxNumberOfSpindles","_winderMachineType","winderMachineJSON","_this$winderMachineTy","winderMachineTypeId","CutFrom","RIGHT","NavigationState","CLOSED","OPEN","HighestSeverityNotification","equipmentId","groupId","alertLogId","highestPriorityLevel","_equipmentId","_groupId","_alertLogId","_highestPriorityLevel","notificationJSON","updateWithNotification","notification","getPriorityLevelSeveritiy","priority","getCurrentPriorityLevelSeveritiy","prioritylevel","Notification","equipment","timestamp","read","_equipment","_message","_priority","_timestamp","_read","notificationA","notificationB","Date","getTime","OrderLinesTarget","ORDER_BOOK","OrderLineAdditionalInfo","_key","OrderLineStatus","TO_PLAN","PLANNED","PRODUCED","PARTIALLY_PLANNED","getOrderLineStatusClass","orderLineStatus","ColoredYarnSetForArticle","coloredYarnSetForArticleJSON","_coloredYarnSetForArt","fromOverviewListColoredYarnSet","overviewListColoredYarnSet","DesignForOrderLine","_commercialDimensions","_technicalDimensions","_dimensionsInPixels","designForOrderLineJSON","ArticleForOrderLine","colorConfiguration","_colorConfiguration","_commercialWidthInMM","_commercialHeightInMM","articleForOrderLineJSON","isTargetOrderBook","mainColor","borderColor","ColorSet","ProductionScheduleForOrderLine","amountOfItems","_amountOfItems","productionScheduleForOrderLineJSON","OrderLine","salesOrderLineReference","salesOrderReference","customerReference","desiredDate","productionSchedules","_salesOrderLineReference","_salesOrderReference","_customerReference","_status","_commercialLengthInMM","_amount","_amountProduced","_amountPlanned","_desiredDate","_productionSchedules","_additionalInfo","createEmptyOrderLine","orderLineJSON","getTimezoneOffset","toDate","hasProductionSchedules","PathLayoutTemplatePath","widthInMM","_widthInMM","pathLayoutTemplatePathJSON","PathLayoutTemplate","loomGroup","pathLayoutTemplatePaths","_loomGroup","_pathLayoutTemplatePaths","loomType","pathLayoutTemplatePath","pathLayoutTemplateJSON","_pathLayoutTemplateJS","canDuplicate","IMAGE","MANCHON","hasVisualisationData","getVisualisationRepresentation","isWeavePatternVisualisation","patternVisualisation","svg","ImagePatternVisualisation","SvgManchonVisualisation","_svg","manchonVisualisationJSON","Pattern","visualisations","comment","heightInPixels","widthInPixels","sizeInBytes","dateCreated","xSizeInDents","xSizeInFrames","ySizeInColorlines","ySizeInPicks","weavingChores","_visualisations","_comment","_heightInPixels","_widthInPixels","_sizeInBytes","_dateCreated","_xSizeInDents","_xSizeInFrames","_ySizeInColorlines","_ySizeInPicks","_weavingChores","clearName","patternJSON","_patternJSON$patternV","_patternJSON$patternV2","_patternJSON$comment","_patternJSON$heightIn","_patternJSON$widthInP","_patternJSON$sizeInBy","_patternJSON$xSizeInD","_patternJSON$xSizeInF","_patternJSON$ySizeInC","_patternJSON$ySizeInP","_patternJSON$weavingC","patternVisualisations","fromPatternVisualisationJSON","weavePatternType","SvgPatternVisualisation","fromFoldingTypeJSON","foldingTypeJSON","_foldingTypeJSON$id","visualisation","PlanningItem","itemProperties","FIXED_SCHEDULE_PLACEHOLDER","clearCompletedItems","fixedScheduleId","FixedSchedule","reedDensityInDentsPerMeter","nrDentsForFabric","nrSolenoidsPerPile","nrCreelPositions","_reedDensityInDentsPerMeter","_nrDentsForFabric","_nrSolenoidsPerPile","_nrCreelPositions","ProductionOrder","producedQuantityInPicks","planningItems","_creelMappingFormula","_producedQuantityInPicks","_estimatedProductionTime","_this$productionOrder","productionOrderId","plannedQuantityInPicks","dueDate","_quality","_plannedQuantityInPicks","_dueDate","parseNullable","_this$quality","_this$creel","qualityId","creelId","PlanningFilter","equipmentGroupIds","_equipmentGroupIds","Maintenance","maintenanceType","_maintenanceType","PlanningEquipment","equipmentKind","_equipmentKind","PlanningItemFactory","_json$planningItems$m","_json$planningItems","commonProperties","parseCommonProperties","ProductionOrderWeaving","producedQuantityInMeters","WeaveProduct","ProductionOrderTuft","TuftProduct","ProductionOrderPlastic","producedQuantity","Tool","createRunForPlanningItem","draftId","UuidUtils","generateV4Uuid","sequenceNumber","createRunForFixedSchedulePlaceholder","machineId","_compatibleMachine$qu","createOrderForToPlan","createPlaceholderForFixedSchedule","minimumDuration","createRunForMachine","date","earliestStartDate","PlanningItemForecast","_draftId","_estimatedStart","_estimatedEnd","_sequenceNumber","_planningItems","_minimumDuration","_earliestStartDate","_actualStartDate","_estimatedEndDate","_actualEndDate","isActive","isPlanned","isCompleted","_this$planningItems","compareBySequenceNumber","itemA","itemB","_producedQuantity","_this$productionOrder2","_this$productionOrder3","productionOrderLiteId","toolId","mountTime","dismountTime","PlasticProduct","unitOfMeasurement","_unitOfMeasurement","plannedQuantity","_plannedQuantity","_this$tool","_mountTime","_dismountTime","CompatibleMachine","_machine","ProductionOrderToPlan","_compatibleMachines","getType","ProductionOrderType","CARPET","WEAVING","TUFTING","PLASTIC","_producedQuantityInMeters","plannedQuantityInMeters","_plannedQuantityInMeters","tuftProductId","_gaugeId","_widthInCm","fromOverviewListTuftProduct","weaveProductId","fromOverviewListWeaveProduct","PlanningMachineRunFactory","planningMachineRunJSON","timezoneCode","checkForInvalidProductionOrderLite","PlanningMachineCarpetRun","PlanningMachineTuftingRun","PlanningMachineWeavingRun","planningOrders","planningOrderJson","productionOrderLite","MachineEvent","machineEventInfo","_machineEventInfo","_startDate","_endDate","machineEventJSON","TimezoneUtils","convertToDateWithCurrentOffset","timeZone","code","RunningMachineEventInfo","MachineEventInfo","replaceMachineEventInfo","getDuration","isMachineStatusRunning","isSameAsCurrentMachineStatus","isMachineStatusStoppedManual","isMachineStatusStoppedCritical","hasRelevantEndTime","hasMachineYield","MachineEventDeclaration","abbreviation","_abbreviation","_pattern","declarationJSON","Color","MachineEventGroup","CalendarItem","declarations","_events","_declarations","machineEventGroupJSON","canDeSerializeJSON","calendarItemJSON","has","hasMachineEvent","getEventsForDateRange","getDeclarationsForDateRange","CalendarItemGroup","_machineId","_items","calendarItemGroupJSON","itemJSON","calendarItemFromJSON","itemGroup","PlanningMachineCreelChange","PlanningMachineMaintenance","PlanningMachineUnavailability","PlanningMachineWarpChange","calendarItemToJSON","updateUuid","uuid","_uuid","PlanningCreel","mappingForCurrentPositionOnMachine","_mappingForCurrentPositionOnMachine","creelJSON","fromOverviewListCreel","overviewListCreel","PlanningMachineRun","compatibleWithMachine","planningOrderJSON","PlanningOrder","fromCarpetJSON","PlanningMachineQuality","isCompatibleWithMachineType","planningMachineCreelChangeJSON","convertToISOStringWithoutCurrentOffset","_technicalName","planningMachineQualityJSON","ProductionOrderCarpetForPlanningOrder","PlanningOrderData","STATUSES_REQUIRED_TO_PRINT_WEAVING_ORDER","PROCESSED","FINALIZING","FINALIZED","TRANSLATING","TRANSLATED","SENDING","ARRIVED","EXECUTED_COMPLETE","EXECUTED_PARTIAL","QUEUING","QUEUED","productionOrderForPlanningOrderJSON","fromNeedsAttentionItemJSON","needsAttentionJSON","yield","totalNrPicks","planned","canPrintWeavingOrder","canBeQueued","totalRunningTimeInMs","uniqueId","reschedule","updateStartWhilePreservingDuration","originalDuration","isNew","planningMachineMaintenanceJSON","_planningOrders","_compatibleWithMachine","planningOrder","hasDuePlanningOrders","isProductionOrderDueDateBeforeEndDate","completed","every","executing","hasPlanningOrders","getOrdersForDateRange","momentStartDate","canBeRescheduled","rescheduleBasedOnPlanningOrders","startDateWithPlanningOrdersTotalRunningTime","getPlanningOrdersTotalRunningTimeInMs","TimeUtils","MILLISECONDS_UNIT","isSameOrAfter","updateDuration","newDurationInMilliseconds","oldRunDurationInMilliseconds","emptySpaceDurationInMs","planningOrderNewDurationInMilliseconds","fitOrders","a","b","planningMachineUnavailabilityJSON","PlanningMachine","values","_group","group","_activeQuality","activeQuality","_activeCreel","activeCreel","_messages","activeWeaveProduct","_activeWeaveProduct","activeTuftProduct","_activeTuftProduct","planningMachineA","planningMachineB","_planningMachineA$gro","_planningMachineB$gro","_yield","current","productionOrderYield","round","processing","PROCESSING","queuing","canBeProcessed","CREATED","needsToBeReconfirmed","TO_RECONFIRM","needsToBePlanned","efficiency","_efficiency","orderData","fromWeavingJSON","ProductionOrderWeavingForPlanningOrder","fromTuftingJSON","ProductionOrderTuftingForPlanningOrder","endOf","isBefore","isCarpetOrder","isWeavingOrder","isTuftingOrder","_planningMachineRunJS","_planningMachineRunJS2","PlanningTuftProduct","_this$_tuftProduct","jsonData","orderYield","plannedAmountInMeters","PlanningWeaveProduct","_this$_weaveProduct","ProductionOrderLite","plannedLength","_plannedLength","overviewListWeaveProductionOrderJSON","OverviewListWeavingMachine","creationDate","_this$_machine","_this$_machine2","machineName","toISOString","startOf","subtract","OverviewListWeaveProduct","_this$_weaveProduct2","_this$_weaveProduct3","_this$machine","_this$machine2","_this$plannedLength","weaveProductName","weaveProductPickDensityInPicksPerCm","pickDensityInPicksPerCm","Drawing","mappingForDesign","nrColumnsForWeftSelection","sizeInKB","dateModified","shapeId","_drawingJSON$drawingC","signature","configurationJSON","drawingConfigurationFromJSON","mappingForDesignJSON","MappingForDesign","drawingCode","DrawingConfigurationWithColorAndYarnSet","DrawingConfigurationWithColoredYarnSet","BmpProductionScheduleItemInPathGroup","ProductionScheduleItemInPathGroup","quantity","commercialDimensionsInMM","isProductionItem","mainColorPosition","borderColorPosition","guid","epId","totalWovenHeightInPicks","totalWovenHeightInMM","amountIncomplete","FinishingForProductionSchedule","production","ProductionScheduleItemInPathGroupStatus","nrWovenInPicks","nrWovenInMM","MachineQualityForProductionSchedule","changeFinishing","getCommercialCutbarsLengthInMM","commercialCutbarsLengthInMM","cutbarsInformation","hasAddedCutbarBefore","cutbarBeforeProperties","hasAddedCutbarAfter","cutbarAfterProperties","getTechnicalCutbarsLengthInNumberOfPicks","technicalCutbarsLengthInPicks","technicalLengthInPicks","getCutbarInformation","cutbarInformation","cutbarBeforeCommercialLengthInMM","cutbarBeforeTechnicalLengthInNumberOfPicks","cutbarAfterCommercialLengthInMM","cutbarAfterTechnicalLengthInNumberOfPicks","getLengthOfCutbarBeforeInMillimeters","getLengthOfCutbarBeforeInNumberOfPicks","getLengthOfCutbarAfterInMillimeters","getLengthOfCutbarAfterInNumberOfPicks","cutbarBefore","technicalLengthInNumberOfPicks","cutbarAfter","canBeRecolored","updateFinishing","_this$_finishing","recolorDrawing","recolorInformation","_this$commercialDimen","isRecolored","BuggyForProductionSchedule","amountPlannedInMeter","amountPlannedInPicks","_amountPlannedInMeter","_amountPlannedInPicks","buggyForProductionScheduleJSON","fromJSONForSchedule","amountPlannedInM","CreelForProductionSchedule","isColoredYarnSplitPositionedCorrectly","_isColoredYarnSplitPositionedCorrectly","creelForProductionScheduleJSON","FreeZoneSettings","leftWidthInMillimeters","leftUseAsMaximum","rightWidthInMillimeters","rightUseAsMaximum","inBetweenWidthInMillimeters","inBetweenUseAsMaximum","_leftWidthInMillimeters","_leftUseAsMaximum","_rightWidthInMillimeters","_rightUseAsMaximum","_inBetweenWidthInMillimeters","_inBetweenUseAsMaximum","LoomScheduleSettings","deletePolicy","deletePolicyTimePeriodInDays","scheduleFileAutoDeleteAfterStartOnLoom","scheduleOnlyStartFromQueue","_deletePolicy","_deletePolicyTimePeriodInDays","_scheduleFileAutoDeleteAfterStartOnLoom","_scheduleOnlyStartFromQueue","LoomDeletePolicy","PathLabelSettings","technicalHeightInPicks","fontFamily","fontWeight","fontStyle","fontSizeInMM","heightInMM","_technicalHeightInPicks","_fontFamily","_fontWeight","_fontStyle","_fontSizeInMM","_heightInMM","ProductionOrderCustomSettings","maximumLossInPercent","maxDifferenceInPathLengthInMillimeters","allowExceedingRequestedAmountOfOrderLineItems","allowPreFilterOnQualitiesAndColoredYarnSets","addProductionOrderToPlanningBoard","restZone","freeZone","pathLabel","loomSchedule","epNameGenerator","_maximumLossInPercent","_maxDifferenceInPathLengthInMillimeters","_allowExceedingRequestedAmountOfOrderLineItems","_allowPreFilterOnQualitiesAndColoredYarnSets","_addProductionOrderToPlanningBoard","_restZone","_freeZone","_pathLabel","_loomSchedule","_epNameGenerator","_this$_epNameGenerato","_this$_epNameGenerato2","RestZoneSettings","restPosition","userDefinedRestPosition","maxDentsRestToDivideOverFree","_restPosition","_userDefinedRestPosition","_maxDentsRestToDivideOverFree","RestZonePosition","DrawingConfigurationWeaveQuality","weaveQualityJSON","DrawingConfiguration","mainColorsCreelPosition","borderColorsCreelPosition","commercialDimensionsInMm","commercialDimensionsInCm","drawingConfigurationJSON","_drawingConfiguration","tryGetValue","commercialDimensionsCM","mainColors","borderColors","colorJSON","yarnSetId","_this$coloredYarnSet","_this$coloredYarnSet2","_mainColorsCreelPosition","_borderColorsCreelPosition","_commercialDimensionsInMm","_commercialDimensionsInCm","DrawingShapeAbbreviation","_code","drawingShapeJSON","PATHLABEL","NON_PRODUCTION_ITEM","_drawingType","_configurations","_mappingForDesign","_threadByThread","_nrColumnsForWeftSelection","_sizeInKB","_dateModified","_missingDesign","_shapeId","drawingConfigurations","toFullJSON","cutbarsLength","_cutbarsLength","_epId","EpProductionScheduleItemInPathGroup","NotImplementedError","hasCutbarBefore","isUndefined","hasCutbarAfter","labels","finishingType","_cutbarsInformation","_labels","_finishingType","finishingJSON","FinishingCutbarsInformation","FinishingAndFinishingTemplateLabelOverviewList","FreeZone","coloredYarnSetPathNr","warnings","_technicalWidthInDents","_coloredYarnSetPathNr","_errors","_warnings","freeZoneJSON","hasErrors","startPick","InitialFreeZone","left","inBetween","right","_this$_pattern","_left","_inBetween","_right","x","initialFreeZonesJSON","settingsForFreeZonePositionFromJSON","settingsForFreeZonePositionJSON","useAsMaximum","isValid","JuteInformationForPart","juteInformationJSON","juteInformationForPart","_this$pattern$toJSON","_this$pattern","JuteInformation","juteBefore","juteAfter","_juteBefore","_juteAfter","juteBeforeInformationPart","juteAfterInformationPart","JuteProductionScheduleItemInPathGroup","productionScheduleItemInPathGroupJSON","manualNonProductionItemDrawing","ManualNonProductionItemDrawing","SCHEDULE_WOVEN","TIME_PERIOD","WeaveStructureForProductionSchedule","picksPerColorLine","dentRepeat","sendRepeat","numberOfSolenoidsPerPile","_picksPerColorLine","_dentRepeat","_sendRepeat","_numberOfCloths","_numberOfGroundYarns","_numberOfSolenoidsPerPile","weaveStructureJSON","fromWeaveStructure","reedDensity","pickDensity","weftDensity","practicalPickDensity","buggyLengthMin","buggyLengthMax","tolerance","picksPerHourMin","juteConditions","juteGeneralSettings","_reedDensity","_pickDensity","_weftDensity","_practicalPickDensity","_buggyLengthMin","_buggyLengthMax","_tolerance","_picksPerHourMin","_numberOfColumnsToDropForWeftSelection","_jute","_juteGeneralSettings","fromWeaveQuality","weaveQuality","reedDensityInDentsPerMM","pickDensityInPicksPerMM","weftDensityInDentsPerMM","practicalPickDensityInPicksPerMM","buggyLengthMinInMM","buggyLengthMaxInMM","jute","machineQualityJSON","weftDensityInWefts","nrColumnsToDropForWeftSelection","Jute","_this$_weaveStructure","MachineRoleCode","MachineSummaryJacquard","amountOfPossiblePaths","isSisal","allowEmptySpaceInPath","_amountOfPossiblePaths","_isSisal","_allowEmptySpaceInPath","machineSummaryJacquard","MachineSummary","jacquard","roleCode","hmiVersion","_jacquard","_roleCode","_hmiVersion","machineSummaryJSON","fromProductionSchedule","getTotalWidthInDents","allowsEmptySpaceInPaths","isMachinePremium","canHaveRestAndFreeZonesAndPathLabels","_from","_to","NonProductionItemDrawing","NonProductionItemInPathGroup","noop","PathLabelInformationForPart","pathLabelType","_pathLabelType","pathLabelInformationForPartJSON","_this$_nameGenerator","isText","PathLabelType","TEXT","PathLabelInformation","pathLabelBefore","pathLabelAfter","fontSettings","labelHeightInMM","labelHeightInPicks","labelFontSizeInMM","_pathLabelBefore","_pathLabelAfter","_fontSettings","_labelHeightInPicks","_labelHeightInMM","_labelFontSizeInMM","pathLabelInformationJSON","FontSettings","fromPathLabelInformationJSON","commercialLabelHeightInMM","technicalLabelHeightInPicks","commercialLabelFontSizeInMM","hasAddedPathLabelBefore","hasAddedPathLabelAfter","_this$_pattern$toJSON","PathLabelDrawing","PathLabelProductionScheduleItemInPathGroup","QR_CODE","CHANGED","ADDED","REMOVED","_isRecolored","_drawing","_quantity","_commercialDimensionsInMM","_isProductionItem","_mainColorPosition","_borderColorPosition","_orderLineId","_totalWovenHeightInPicks","_totalWovenHeightInMM","_amountIncomplete","_scheduleItemType","createUuid","orderline","_orderline","adjustQuantityOfDrawingsInPathGroup","adjustUuid","heightInPicks","widthInDents","ProductionScheduleOrderLine","OverviewListOrderLine","isSelectable","orderType","canBePlanned","_amountInProductionSchedule","_heightInProductionScheduleInMM","amountInProductionSchedule","heightInProductionScheduleInMM","fromOrderLine","orderLine","OverviewListArticleForOrderLine","_orderLineJSON$canBeP","fromOverviewListOrderLine","overviewListOrderLine","isOverplanned","getAmountLeftForProductionSchedule","itemMultiplier","getHeightLeftInMMForProductionSchedule","ProductionSchedulePath","pathNumber","pathGroups","totalLengthInMM","totalLengthInPicks","_pathNumber","_pathGroups","_totalLengthInMM","_totalLengthInPicks","productionSchedulePathJSON","scheduleItems","pathGroup","setProductionScheduleItemInPathGroupAt","index","getProductionScheduleItemInPathGroupAt","hasProductionScheduleItem","productionScheduleItem","getUniqueProductionScheduleItems","uniqBy","getNonRecoloredProductionScheduleItems","getUniquePathLabelDrawings","equals","other","getProductionScheduleItemInPathGroup","getOrderLineQuantityInProductionScheduleItems","getOrderLineHeightInMMInProductionScheduleItems","_productionScheduleIt","getProductionScheduleItemsForListDrawing","productionScheduleItems","getProductionScheduleItemsForOrderLine","updatePathLength","otherProductionSchedulePath","getProductionSchedulePath","removePathLabelsAndNonProductionItemsFromPathGroups","ProductionSchedulePhase","PRESELECTION","CONFIGURE","BUILD","VERIFY","COMPLETE","phasesWithIcon","getIcon","productionSchedulePhase","ProductionScheduleProductConfiguration","productConfigurationJSON","DRAFT","VERIFIED_WITH_ERRORS","VERIFIED_WITH_WARNINGS","VERIFIED","CREATING","FAILURE","SENT","REPLANNING","REPLANNED","REPLANNED_WITH_WARNINGS","PRODUCING","PRODUCED_COMPLETELY","PRODUCED_PARTIALLY","NO_PRODUCTION_INFORMATION_RECEIVED","verifiedIconName","processingIconName","processingGreenIconName","executingIconName","productionScheduleStatusIconMap","ProductionSchedulePathsOfColoredYarnSet","productionScheduleColoredYarnSet","productionSchedulePaths","_productionScheduleColoredYarnSet","_productionSchedulePaths","productionSchedulePathsOfColoredYarnSetJSON","productionSchedulePath","hasProductionSchedulePath","getProductionSchedulePathAt","getProductionSchedulePathsWidthInDents","getProductionSchedulePathsWidthInMillimeters","updatePathLengths","updateLoadedPathLabelDrawing","pathLabelDrawing","productionscheduleItems","getOrderLineQuantityInProductionSchedulePaths","getOrderLineHeightInMMInProductionSchedulePaths","getProductionSchedulePathForProductionScheduleItem","hasProductionSchedulePaths","removePathLabelsAndNonProductionItemsFromProductionSchedulePaths","ProductionSchedule","coloredYarnSets","initialRestZones","restZones","initialFreeZones","freeZones","designs","productionSchedulePathsOfColoredYarnSets","pathLabelInformation","runId","juteInformation","numberOfRepeats","missingDesigns","preselectionId","isSample","canAddJute","addToPlanBoard","step","hasSavedManually","_loaded","_orderLines","_completingPartially","_practicalPickDensityInPicksPerMM","_coloredYarnSets","_initialRestZones","_restZones","_initialFreeZones","_freeZones","_designs","_productionSchedulePathsOfColoredYarnSets","_pathLabelInformation","_runId","_juteInformation","_numberOfRepeats","_missingDesigns","_isSample","_canAddJute","_addToPlanboard","_preselectionId","_step","_hasSavedManually","loaded","completingPartially","addToPlanboard","createEmptyProductionSchedule","productionScheduleJSON","_productionScheduleJS","coloredYarnSetsWithStartDent","coloredYarnSetJSON","coloredYarnSetPaths","coloredYarnSetPathJSON","productionSchedulePathsOfColoredYarnSet","InitialRestZone","restZoneJSON","RestZone","GeneralJuteSettings","modifyProductionScheduleAfterVerify","newProductionSchedule","productionSchedulePathsOfColoredYarnSetIndex","productionSchedulePathIndex","updatedPathGroups","getProductionSchedulePathsOfColoredYarnSetAtStartDent","getProductionSchedulePathsOfColoredYarnSetFromDent","dent","_this$productionSched","getProductionSchedulePathsOfColoredYarnSetAt","getProductionScheduleColoredYarnSetAtStartDent","overviewListColoredYarnSetWithStartDent","isProductionScheduleWithEmptyContent","emptyProductionSchedule","getTotalProductionScheduleWidthInDents","getProductionScheduleLengthInMillimeters","productionScheduleLengthInMillimeters","productionSchedulePathOfColoredYarnSet","currentPathLength","getProductionScheduleLengthInPicks","productionScheduleLengthInPicks","initProductionSchedulePathsForEachColoredYarnSet","productionScheduleColoredYarnSets","isMachineQualityChanged","_this$_initialRestZon","_this$_initialRestZon2","_this$_initialFreeZon","_this$_initialFreeZon2","_this$_finishing$toJS","_this$_pathLabelInfor","_this$_pathLabelInfor2","_this$juteInformation","_this$juteInformation2","_this$_buggy$toJSON","_this$_buggy","_this$_productConfigu","_this$_productConfigu2","toNameGenerationJSON","_this$_buggy$toJSON2","_this$_buggy2","getNonRecoloredProductionScheduleItemsPerColoredYarnSet","getAmountOfNonRecoloredProductionScheduleItems","amountOfNonRecoloredProductionScheduleItems","getUniquePathLabelDrawingsPerColoredYarnSet","pathLabelDrawings","hasAtLeastOneProductionScheduleItemPerColoredYarnSet","hasZoneErrors","isProductionScheduleVerified","isProductionScheduleVerifiedWithNoErrors","hasProductionScheduleErrors","getColoredYarnSetForProductionScheduleItem","getProductionScheduleColoredYarnSetForProductionSchedulePath","canMoveProductionScheduleItemToProductionSchedulePath","indexInSourceProductionSchedulePath","sourceProductionSchedulePathNumber","indexInDestinationProductionSchedulePath","destinationProductionSchedulePathNumber","isOnSamePositionOfSamePath","hasOnlyOneProductionScheduleItemInSamePath","destinationProductionSchedulePath","destinationColoredYarnSetWithStartDent","startDentOfSourceColoredYarnSet","_widerProductionSched","sourceProductionSchedulePath","widerProductionScheduleItemInSourceProductionSchedulePath","maxBy","reject","widthOfWiderProductionScheduleItemInSourceProductionSchedulePath","differenceBetweenProductionScheduleItemWidthAndDestinationProductionSchedulePathWidth","max","differenceBetweenProductionScheduleItemWidthAndWiderProductionScheduleItemInSourceProductionSchedulePathWidth","canAddProductionScheduleItemToProductionSchedulePath","canMoveProductionScheduleItemToColoredYarnSet","startDentOfDestinationColoredYarnSet","isLessThanAmountOfPossiblePaths","sourceColoredYarnSetWithStartDent","_widerProductionSched2","canAddProductionScheduleItemToColoredYarnSet","canMoveProductionSchedulePathToColoredYarnSet","sourceProductionSchedulePathsOfColoredYarnSet","destinationProductionSchedulePathsOfColoredYarnSet","productionSchedulePathNumber","_listDrawing$orderLin","_this$getProductionSc","drawingWidthInDents","drawingHasSameWidthAsProductionSchedulePath","enoughWidthToAddProductionScheduleItemToProductionSchedulePath","canAddProductionScheduleItemToProductionSchedulePathForNewBuilder","hasExcactWidthOfProductionSchedulePath","_listDrawing$orderLin2","differenceBetweenDrawingWidthAndPathWidth","sumTechnicalWidthInDents","_listDrawing$orderLin3","abs","startDentOfColoredYarnSet","enoughWidthToAddProductionScheduleItemToColoredYarnSet","_listDrawing$orderLin4","canBeModified","isDraft","hasBeenConfigured","isPathLabelInformationValid","isJuteInformationValid","_this$machineQuality","areFontSettingsValid","_this$machineQuality2","areInitialFreeZonesValid","areInitialRestZonesValid","isRestZoneConfigurable","hasAddedDesigns","canPrintWeavingOrderForProductionSchedule","isExecuted","isPartiallyOrCompletelyExecuted","isCreelMappingApplied","hasOrderLines","updateOrderLineQuantities","getOrderLineQuantityInProductionSchedulePathsColoredYarnSets","getOrderLineHeightInMMInProductionSchedulePathsColoredYarnSets","lengthInMM","getProductionScheduleItemsForOrderLineIdAndColoredYarnSet","getProductionSchedulePathsOfColoredYarnSetForProductionScheduleItem","isRelatedToRun","canBeDecreated","isBeingDecreated","removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets","canCalculateYarnConsumption","isStatusAtleastProcessed","getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath","_this$productionSched2","_longestProductionSch","longestProductionSchedulePath","_productionSchedulePa","pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks","pathLabelsOrNonProductionItemsFromLongestPathLengthInMM","_pathGroup$technicalD","_pathGroup$commercial","pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit","getProductionScheduleItemMultiplier","_this$_machineQuality","_this$_machineQuality2","calculateTotalAmountOfAllPathsAfterAddingDrawing","totalAmountOfAllPaths","technicalWidthInNumberOfDents","userDefinedRest","_userDefinedRest","initialRestZoneJSON","USER_DEFINED","isConfigurable","SYMMETRICAL","getUserDefinedRestZonePositions","getRestZonePositions","TEXEDIT_CADCAM_WEAVESTRUCTURE_EDIT","TEXEDIT_VIEW_EP","TEXEDIT_EDIT","TEXEDIT_PROC","TEXEDIT_ADVANCED_PROC","TEXEDIT_DESIGN_YARN_PERCENTAGES","TEXEDIT_DRAWING_COLOR_MAP","TEXEDIT_PREVIEW_BMP","TEXSTYLE_EDIT","TEXSTYLE_QUALITY_SELVEDGES_VIEW","TEXSTYLE_QUALITY_SELVEDGES_EDIT_PATTERN","TEXSTYLE_QUALITY_SELVEDGES_EDIT_LABEL","TEXSTYLE_QUALITY_EDIT_ALTERNATIVES","TEXSTYLE_MACHINE_QUALITY_PATH_WIDTHS","TEXSTYLE_STOCK_LOCATION_VIEW","TEXSTYLE_STOCK_LOCATION_EDIT","TEXSTYLE_RAW_MATERIAL_VIEW","TEXSTYLE_RAW_MATERIAL_EDIT","TEXFAB_VIEWEP","TEXFAB_CARPET_PLANNING","TEXFAB_WEAVE_PLANNING","TEXFAB_TUFT_PLANNING","TEXFAB_PLASTIC_PLANNING","TEXFAB_PROJECTS","TEXFAB_YARNCONSUMPTION","TEXFAB_YARNCONSUMPTION_FOR_SMARTCREEL_PVD_FILE","TEXFAB_SMARTCREEL","TEXFAB_VIEW","TEXFAB_CARPET_QUEUE","TEXFAB_PLASTIC_QUEUE","TEXFAB_QUANTITY_SUGGESTION","TEXFAB_SCHEDULE_FEEDBACK","TEXFAB_VERIFY_NEW","TEXBI_EVENT_BOARD_EDIT","TEXSTATE_VIEW","TEXSTATE_FILETRANSFER","TEXSTATE_VIEW_LIVE","TEXSTATE_VNC","TEXSTATE_MANAGE_GROUPS","TEXSTATE_MANAGE_FLOORPLAN_ITEM","TEXSTATE_VIEW_LIVE_STATUS","TEXSTATE_VIEW_LIVE_STARTSTOP_MESSAGES","TEXSTATE_VIEW_LIVE_DECLARATION_MESSAGES","TEXSTATE_VIEW_LIVE_ORDER_MESSAGES","TEXSTATE_VIEW_LIVE_FIXED_DATA_TEMPLATE","TEXSTATE_VIEW_HISTORY_MESSAGES","SETTINGS_DATA_UNIT_SETUP_CATALOG_REVIEW","SETTINGS_AUTOMATIC_STOP_GROUP_EDIT","ALERT_VIEW_NOTIFICATIONS","PROFILE_CREDITS","PROFILE_SPEEDTEST","CHANGE_INDIVIDUAL_FINISHING","ADD_PATH_LABEL","SCHEDULE_DUE_DATE","PRINT_WEAVE_ORDER","PRINT_BUGGY_OVERVIEW","VIEW_LOSS","VIEW_MIN_MAX_BUGGY","CAN_SIGN_TERMSANDCONDITIONS","FINISHING_LABEL","FINISHING_CUTTINGLINE","ADD_JUTE","PLAN_IN_BUGGIES","SHIFT_PATTERN_VIEW","SHIFT_PATTERN_EDIT","SHIFT_SCHEDULE_VIEW","SHIFT_SCHEDULE_EDIT","ADD_MANUAL_JUTE","EXPORT_WEAVE_STRUCTURES","RoleInfo","role","permissions","_role","_permissions","roleInfoJSON","toUpper","snakeCase","permissionToCheck","UserIdentity","userId","companyId","subscriptionId","_userId","_companyId","_subscriptionId","userIdentityJSON","Subscription","roles","company","userIdentity","acceptedTermsAndConditions","locked","_roles","_timeZone","_company","_userIdentity","_acceptedTermsAndConditions","_locked","subscriptionJSON","subscriptionTimeZone","identity","identityUser","roleJSON","isLocked","fromLocalStorage","subscriptionJSONString","getAllPermissions","uniq","roleInfo","hasAllPermissions","VersionableType","CLIENT","TEXTILE","MESSAGING","WORKER","getProperty","listOfCustomSettings","getPropertyValue","_listOfCustomSettings","MACHINE_EFFICIENCY_LEVEL","ORDER_NAME","PRODUCTION_TIME","REMAINING_PICKS","DECLARATION_CODE","DECLARATION_ABBREVIATION","DECLARATION_PATTERN","PICKS","QUALITY","PICKS_REQUIRED","PICKS_PRODUCED","MACHINE_STATE","LOT_ID","GROUP","BATCH_NUMBER","REMAINING_BATCH_TIME","TOTAL_ALARM_TIME","TOTAL_STOP_TIME","ACTIVE_MAIN_FUNCTION","ACTIVE_FUNCTION_WINDOW_1","ACTIVE_FUNCTION_WINDOW_2","ACTIVE_FUNCTION_WINDOW_3","TIME_TILL_NEXT_OPERATOR_CALL","TIME_TILL_NEXT_PREPARATION","PROCESS_NUMBER","ACTUAL_TREATMENT_NUMBER","NEXT_BATCH_NUMBER","ACTIVE_PREPARATION","ACTIVE_PREPARATION_STEP_NUMBER","DECLARATION_TIME","AUTOMATIC_STOP","AUTOMATIC_STOP_TIME","AUTOMATIC_STOP_TEXT","STITCHES","QTY_REMAINING","TOTAL_RUN_TIME","TOTAL_STOP_GROUP_TIME","TOTAL_DECLARATION_TIME","DECLARATIONS","REACTIVE_ENERGY_CONSUMPTION","APPARENT_ENERGY_CONSUMPTION","CAPACITIVE_ENERGY","INDUCTIVE_ENERGY","FREQUENCY","U12","U31","U23","PRODUCT_GROUP","PRODUCT_UOM","PRODUCT_SPEED","PRODUCT_EFFICIENCY","PRODUCT_MOUNT_TIME","PRODUCT_DISMOUNT_TIME","PRODUCT_LOAD_TIME","PRODUCT_UNLOAD_TIME","DUE_DATE","MOUNT_TIME","DISMOUNT_TIME","LOAD_TIME","UNLOAD_TIME","AVAILABILITY_LOSS_PERCENT","AVAILABILITY_LOSS_TIME","PERFORMANCE_LOSS_PERCENT","PERFORMANCE_LOSS_TIME","QUALITY_LOSS","OEE_PERCENT","MEAN_TIME_BETWEEN_FAILURE","MEAN_TIME_TO_REPAIR","BASE_LOAD_ENERGY","PROCESS_LOAD_ENERGY","AUTO_STOPS_PER_HOURS","GAS_CONSUMPTION","TOOL_NAME","TOOL_TYPE","TOOL_WEIGHT","TOOL_SPEED","TOOL_STATUS","NUMBER_CAVITIES","USED_CAVITIES","MOUNT_TIME_TOOL","DISMOUNT_TIME_TOOL","WAIVE_CYCLE","PIECE_CYCLE","MATERIAL_PLASTICS","ORDER_PLASTICS","ORDER_TOOL","REJECT_NAME","REJECT_CODE","REJECT_GROUP","SCRAP_INDICATOR","CYCLES_DONE","ITEMS_PRODUCED","CYCLES_WAIVED","ITEMS_REJECTED","MEAN_CYCLE_TIME","MEAN_TIME_TO_ATTEND","PERCENTAGE_REJECTED","ArticleForSalesOrderLine","fromOverviewListArticle","CustomerForSalesOrder","fromCustomer","OrderLineForSalesOrder","_amountLeft","articleId","PaymentStatus","ADVANCE_PAID","PAID","SalesOrder","orderNumber","paymentStatus","_orderNumber","_paymentStatus","createEmptySalesOrder","salesOrderJSON","getTotalAmountRequested","sum","getTotalAmountProduced","customerId","convertToUTCDate","TargetForListOfDrawingsEnum","DRAWING_LIBRARY","IdNameUnitOfMeasurement","speedUnit","_speedUnit","PlasticProductionOrder","plannedSpeed","plannedEfficiency","_plannedSpeed","_plannedEfficiency","plasticProductionOrderJSON","plannedSpeedInCycleTime","_this$_machineGroup","_this$_plasticProduct","TuftProductionOrder","tuftingNotes","_tuftingNotes","tuftProductionOrderJSON","createEmptyTuftProductionOrder","MaterialSet","technicalCode","alternativeColorSetIds","createEmptyColorSet","colorSetJSON","_colorSetJSON$technic","_colorSetJSON$alterna","creelPositionJSON","CreelPosition","_this$alternativeColo","indexOfCreelPosition","getColors","getUniqueItems","getSizeOfCreelPositions","isColorSet","isYarnSet","HorizontalPositionOfColorCreelPosition","HorizontalPositionOfCreelPosition","isSelected","HorizontalPositionOfCreelPositionType","colorCreelPositionJSON","single","getAmountOfDentsInHorizontalPositionOfCreelPosition","getPatternForHorizontalPositionOfCreelPosition","fill","ColoredYarnSet","alternativeColoredYarnSetIds","fromColorSet","fromYarnSet","_alternativeColoredYarnSetIds","_technicalCode","createEmptyColoredYarnSet","YarnSet","colorSetId","HorizontalPositionOfGroupCreelPosition","groupCreelPositionJSON","groupJSON","HorizontalPositionOfYarnTypeCreelPosition","horizontalPositionOfCreelPosition","getItems","_creelPositions","_alternativeColorSetIds","ColoredYarnSetPosition","creelPositionHorizontalPositions","_horizontalPositionsOfCreelPosition","_isSelected","horizontalPositionsOfCreelPosition","getSortedItems","getPatternForGivenNumberOfDents","patternForGivenNumberOfDents","hasMaximumSizeOfDentsBeenReached","mapped","isColor","isGroup","isYarnType","coloredYarnSetWithStartDentJSON","bottomTop","isBottomPosition","getOriginalMappingForCurrentPositionOnMachine","coloredYarnSetId","percentageOfColorsInDrawingImage","needsToBeFromSameBath","_percentageOfColorsInDrawingImage","_needsToBeFromSameBath","fromCreelPosition","hasMultipleItems","getItemNames","materialType","getFirstItem","AbstractFinishing","backcoatingInformation","_backcoatingInformation","CuttingLineProperties","_patternType","cuttingLinePropertiesJSON","FinishingTemplateCutbarProperties","cutbarPropertiesJSON","FinishingTemplateCutbarsInformation","cuttingLineProperties","foldingCorrectionProperties","_cutbarBeforeProperties","_cutbarAfterProperties","_cuttingLineProperties","_foldingCorrectionProperties","cutbarsInformationJSON","FoldingCorrectionProperties","hasAddedCuttingLine","hasAddedFoldingCorrection","FinishingTemplateImageLabel","FinishingTemplateLabel","place","rotation","mirrored","positionInTopCarpet","positionInBottomCarpet","_label","JSON","stringify","getLabel","finishingTemplateImageLabelJSON","ImageForFinishingImageLabel","FinishingTemplatePositionInCarpet","topCarpet","positioningInCarpet","positioningInLabelPlace","commercialHorizontalOffsetInMM","commercialVerticalOffsetInMM","bottomCarpet","finishingLabelType","_place","_rotation","_mirrored","_positionInTopCarpet","_positionInBottomCarpet","getOriginPointFromBoundingBox","rectangleForBoundingBox","carpetView","CarpetView","TOP_CARPET","LabelPositionInLabelPlace","TOP_LEFT","topLeftPoint","TOP_MIDDLE","y","TOP_RIGHT","CENTER_LEFT","CENTER","CENTER_RIGHT","BOTTOM_LEFT","BOTTOM_MIDDLE","BOTTOM_RIGHT","isTopCarpetSameAsBottomCarpet","commercialVerticalOffsetInMm","_positioningInCarpet","_positioningInLabelPlace","_commercialHorizontalOffsetInMM","_commercialVerticalOffsetInMM","finishingPositionInCarpetJSON","FinishingTemplateTextLabel","text","placeholderParts","qrCode","_commercialLabelHeightInMM","_text","_placeholderParts","_qrCode","finishingTemplateTextLabelJSON","placeholderPartJSON","PlaceholderComponent","isPlaceholder","placeholderPart","FinishingTemplate","createEmptyFinishingTemplate","finishingTemplateJSON","finishingTemplateLabelJSON","FinishingLabelType","BackcoatingInformation","useBackcoating","hasAddedCutbarsInformation","hasAddedLabels","weight","_useBackcoating","_weight","backcoatingInformationJSON","weightInGramsPerSquareMeter","CutbarPattern","cutbarPatternJSON","FinishingCutbarProperties","patternTemplate","_technicalLengthInPicks","_patternTemplate","_this$_patternTemplat","_this$_patternTemplat2","patternTemplateId","backgroundImageId","foldingType","_foldingType","hasAdjustedFoldingType","foldingTypeId","FinishingImageLabel","FinishingLabel","finishingImageLabelJSON","FinishingPositionInCarpet","_finishingLabelType","technicalHorizontalOffsetInDents","technicalVerticalOffsetInPicks","positioning","_technicalHorizontalOffsetInDents","_technicalVerticalOffsetInPicks","FinishingTextLabel","technicalLabelHeightInNumberOfPicks","_technicalLabelHeightInPicks","finishingTextLabelJSON","MachineQualityForFinishing","Finishing","finishingTemplateId","finishingTemplateName","_this$backcoatingInfo","_this$backcoatingInfo2","_finishingTemplateId","_finishingTemplateName","createEmptyFinishing","_finishingJSON$finish","finishingLabelJSON","nullableCutbarProperties","_this$version","_this$finishingTempla","_this$cutbarsInformat","_this$cutbarsInformat2","_this$cutbarsInformat3","_this$cutbarsInformat4","_this$cutbarsInformat5","_this$cutbarsInformat6","machineQualityId","finishing1","finishing2","areLabelsEqual","currentFinishingLabel","findIndex","finishingLabel","fontSettingsJSON","labelFontFamily","labelFontWeight","labelFontStyle","useFoldingCorrection","_useFoldingCorrection","foldingCorrectionPropertiesJSON","_foldingCorrectionPro","_imageId","_file","imageForFinishingImageLabelJSON","getKeysOfLabelPosition","PlaceholderCategory","placeholderComponents","_placeholderComponents","placeholderCategoryJSON","placeholderComponentJSON","configurableValue","_configurableValue","categoryName","_categoryName","separator","getReadableName","getLabelFromPlaceholderComponents","placeholderComponent","CarpetWeaveQuality","WeaveQuality","weaveStructureWidth","commercialMachineQualities","pathWidths","applicableMachines","machinesWithSpecificPickDensity","pileHeightInMM","tuftLengthInMM","incorporationFactor","tuftLengthPatternTypeExceptions","tuftLengthYarnTypeExceptions","incorporationFactorPatternTypeExceptions","incorporationFactorYarnTypeExceptions","finishings","alternativeMachineQualityIds","weftSelections","missingDesignMarginInDents","alternativeQualityIds","createEmptyCarpetWeaveQuality","carpetWeaveQualityJSON","_carpetWeaveQualityJS","_carpetWeaveQualityJS2","_carpetWeaveQualityJS3","_carpetWeaveQualityJS4","_carpetWeaveQualityJS5","_carpetWeaveQualityJS6","_carpetWeaveQualityJS7","_carpetWeaveQualityJS8","_carpetWeaveQualityJS9","WeaveQualityType","weaveStructureWidthType","getBackwardsSingleWidthWeaveStructure","DoubleWidthWeaveStructure","theoreticalPickDensityInPicksPerMM","specificPickDensity","commercialMachineQualityJSON","CommercialMachineQuality","pathWidthJSON","PathWidth","applicableMachineJSON","MachineOverviewListHelper","machineWithSpecificPickDensityJSON","getTuftLengthExceptions","getIncorporationFactorExceptions","weftSelectionJSON","WeftSelection","currentWeftSelection","nextWeftSelection","carpetWeaveQuality","addJuteSoPathsHaveEqualHeight","priorityPerBetweenCondition","borderColorIndex","borderIndexColorToggle","repeatLastDesignToEndOfPath","addConditionalDesigns","_addJuteSoPathsHaveEqualHeight","_priorityPerBetweenCondition","_borderColorIndex","_borderIndexColorToggle","_repeatLastDesignToEndOfPath","_addConditionalDesigns","generalJuteSettings","_this$_borderColorInd","_this$_borderColorInd2","IncorporationFactorException","_incorporationFactor","incorporationFactorJSON","rules","_rules","juteConditionJSON","_this$_pattern2","Label","offsetLeftInDents","offsetBottomInPicks","rotate","height","_offsetLeftInDents","_offsetBottomInPicks","_rotate","LabelType","_height","_textPattern","PLACEHOLDER","_imagePattern","createEmptyLabel","textPattern","imagePattern","labelJSON","offsetWidth","offsetHeight","_this$_textPattern","_this$_imagePattern","_this$_textPattern2","_this$_imagePattern2","textWeaveStructurePatternIndex","imageWeaveStructurePatternIndex","textPatternImageId","imagePatternImageId","LongFloatCorrectionRule","threadType","clothType","side","stitchFrom","_threadType","_clothType","_side","_stitchFrom","createEmptyLongFloatCorrectionRule","LongFloatThreadType","WARP","LongFloatStitchingMethod","MIDDLE","longFloatCorrectionRuleJSON","BORDER","RANDOM","WEFT","commercialInCM","calculatedDents","actualDents","_commercialInCM","_calculatedDents","_actualDents","PostProcessing","longFloatCorrectionRules","_longFloatCorrectionRules","postProcessingJSON","longFloatCorrectionRule","Selvedge","selvedgeOption","minimumWidth","backgroundImage","repeatLabel","_selvedgeOption","_minimumWidth","_backgroundImage","_repeatLabel","selvedgeJSON","_this$_backgroundImag","firstVisualization","backgroundPatternWeaveStructureIndex","Selvedges","center","_center","selvedgesJSON","TuftLengthException","_tuftLengthInMM","tuftLengthExceptionJSON","VelvetWeaveQuality","postProcessing","selvedges","createEmptyVelvetWeaveQuality","velvetWeaveQualityJSON","_velvetWeaveQualityJS","_velvetWeaveQualityJS2","_velvetWeaveQualityJS3","_velvetWeaveQualityJS4","_velvetWeaveQualityJS5","_velvetWeaveQualityJS6","_velvetWeaveQualityJS7","_velvetWeaveQualityJS8","velvetWeaveQuality","_weaveStructureWidth","_singleWidth","_doubleWidth","_reedDensityInDentsPerMM","_pickDensityInPicksPerMM","_weftDensityInDentsPerMM","_commercialMachineQualities","_pathWidths","_applicableMachines","_machinesWithSpecificPickDensity","_pileHeightInMM","_buggyLengthMinInMM","_buggyLengthMaxInMM","_tuftLengthPatternTypeExceptions","_tuftLengthYarnTypeExceptions","_incorporationFactorPatternTypeExceptions","_incorporationFactorYarnTypeExceptions","_finishings","_weftSelections","_missingDesignMarginInDents","weaveStructureId","_this$_doubleWidth$id","WeaveStructureWidth","DOUBLE_WIDTH","createEmptyWeaveQuality","_weaveQualityJSON$pat","_weaveQualityJSON$pat2","_weaveQualityJSON$jut","_weaveQualityJSON$jut2","_weaveQualityJSON$wef","_weaveQualityJSON$wef2","_weaveQualityJSON$fin","SingleWidthWeaveStructure","getBackwardsOverviewListSingleWidthWeaveStructure","OverviewListSingleWidthWeaveStructure","fromOldJSON","fromOverviewListSingleWidthWeaveStructure","fromOverviewListDoubleWidthWeaveStructure","toOverviewListMachineQuality","OverviewListDoubleWidthWeaveStructure","tuftLengthExceptions","incorporationFactorExceptions","incorporationFactorExceptionJSON","_this$_reedDensityInD","_this$_pickDensityInP","_this$_weftDensityInD","_this$_practicalPickD","machineWithSpecificPickDensity","weaveStructureName","topWeaveStructureId","bottomWeaveStructureId","backgroundWeaveStructureId","commercialMachineQuality","pathWidth","applicableMachineIds","tuftLengthPatternTypeException","tuftLengthYarnTypeException","incorporationFactorPatternTypeException","incorporationFactorYarnTypeException","weftSelection","yarnSetName","WeftSelectionType","TOP_RAPIER","MIDDLE_RAPIER","BOTTOM_RAPIER","numberOfColumns","possibleNumberOfColumns","defaultPattern","_numberOfColumns","_possibleNumberOfColumns","_defaultPattern","selectedNrColumns","possibleNrColumns","MultiDeleteResponse","statusCode","_statusCode","multiDeleteResponseJSON","weightInKg","standardCycleTimeInSeconds","mountTimeInMinutes","dismountTimeInMinutes","loadTimeInMinutes","unloadTimeInMinutes","productGroup","material","matchingCriteria","_weightInKg","_standardCycleTimeInSeconds","_mountTimeInMinutes","_dismountTimeInMinutes","_loadTimeInMinutes","_unloadTimeInMinutes","_productGroup","_material","_matchingCriteria","plasticProductJSON","matchingCriteriaJSON","MatchingCriteria","_this$_productGroup","_this$_material","_this$_color","_this$_customer","productGroupId","materialId","UnitOfMeasurement","PIECES","blend","stitchRateInStitchesPerCm","pileHeightInCm","weightInGramsPerMeter","primaryBacking","backingNotes","_blend","_stitchRateInStitchesPerCm","_pileHeightInCm","_weightInGramsPerMeter","_primaryBacking","_backingNotes","tuftProductJSON","primaryBackingId","createEmptyTuftProduct","standardSpeedInRotationsPerMinute","standardEfficiencyInPercentage","_pickDensityInPicksPerCm","_standardSpeedInRotationsPerMinute","_standardEfficiencyInPercentage","overviewListWeaveProduct","weaveProductJSON","createEmptyWeaveProduct","_topWeaveStructure","_bottomWeaveStructure","_backgroundWeaveStructure","doubleWidthWeaveStructureJSON","WeaveStructureForMachineQuality","overviewListDoubleWidthWeaveStructure","IdNameVersionPosition","singleWidthWeaveStructureJSON","overviewListSingleWidthWeaveStructure","WeavePattern","patternNumber","widthInFrames","_patternNumber","_widthInDents","_widthInFrames","_heightInPicks","weavePatternJSON","_weavePatternJSON$wea","WeaveStructureDetails","factorM2","rapier","extraInfoType","jacquardPositions","hpLp","ratio","incFloatPoint","bb","bt","tb","tt","createEmptyWeaveStructureDetails","weaveStructureDetailsJSON","qualityType","fromVandewiele","releaseNotes","groundYarns","pileYarns","dentReport","_qualityType","_fromVandewiele","_releaseNotes","_groundYarns","_pileYarns","fromShortJSON","_weaveStructureJSON$n","_weaveStructureJSON$t","_weaveStructureJSON$d","_weaveStructureJSON$s","_weaveStructureJSON$q","_weaveStructureJSON$f","_weaveStructureJSON$r","_weaveStructureJSON$p","_weaveStructureJSON$n2","_weaveStructureJSON$n3","_weaveStructureJSON$g","_weaveStructureJSON$p2","_weaveStructureJSON$d2","_weaveStructureJSON$n4","_weaveStructureJSON$n5","getReasonForPreventingDuplicate","WeaveStructure","OverviewListWeaveStructure","createEmptyWeaveStructure","WeftColoredYarnSet","createEmptyWeftColoredYarnSet","weftColoredYarnSetJSON","_yarnType","yarnTypeCreelPositionJSON","threads","threadJSON","yarnSetJSON","createEmptyYarnSet","numberOfYarns","Thread","yarnCount","spaceDye","rawMaterialView","_yarnCount","_spaceDye","_rawMaterialView","YarnType","yarnCountUnit","groupName","_yarnCountUnit","_threads","_groupName","createEmptyYarnType","yarnTypeJSON","getFirstRawMaterial","_this$_yarnCount","thread","_thread$yarnCount","rawMaterialId","orderIndex","baseStandardSpeedInCycleTime","baseStandardEfficiency","_standardSpeedInCycleTime","_orderIndex","_baseStandardEfficiency","_baseStandardSpeedInCycleTime","_this$_machineType","machineTypeId","toolType","speed","cavities","usedCavities","numberingMode","cavitiesAcross","cavitiesDown","pieceCycles","waiveCycles","productIds","_toolType","_speed","_cavities","_usedCavities","_numberingMode","_cavitiesAcross","_cavitiesDown","_pieceCycles","_waiveCycles","_stockLocation","_productIds","toolJSON","originalCavities","nrCavities","cavityNumberingMode","cavityAcross","cavityDown","toolStatus","toolMatchingCriteria","productsForTool","productJSON","products","_this$_stockLocation","stockLocationId","productId","ARTICLES","AuthenticationToken","encodedAccessToken","encodedIdToken","requestState","_encodedAccessToken","_encodedIdToken","_requestState","decodeAccessToken","decodeIdToken","expiration","_expiration","hasEncodedAccessToken","hasEncodedIdToken","isNotExpired","now","authenticationTokenJSON","accessToken","idToken","audience","audienceMatches","_audience","decodedIdToken","jwtDecode","_requestNonce","nonce","aud","decodedToken","exp","preferred_username","HttpAuthenticationService","_HttpAuthenticationService","httpClient","backendConfiguration","msalService","msalBroadcastService","currentSubscriptionSubject","STATE","NONCE","EMAIL","SUBSCRIPTION","subscriptionStorageKey","REDIRECT","LOGIN_URI","isAuthenticatedSubject","setRequestStateAndNonce","loginRedirect","onAuthentication","msalSubject$","eventType","EventType","LOGIN_SUCCESS","ACQUIRE_TOKEN_SUCCESS","LOGIN_FAILURE","ACQUIRE_TOKEN_FAILURE","payload","AuthenticationError","authenticationToken","currentAudience","tap","isAuthenticatedAndHasSubscription","logout","post","logoutRedirect","onRedirectNavigate","resetLocalStorageToDefaults","isAuthenticated","getValue","currentAuthenticatedChanges","validateCurrentSubscription","refreshSubscription","handleInvalidSubscription","storedSubscriptionJSONString","setCurrentSubscription","currentSubscriptionChanges","getCurrentEmail","storedEmail","getCurrentUserId","getRedirectAfterAuthentication","setRedirectAfterAuthentication","clearSubscription","isAuthenticationInProgress","inProgress$","InteractionStatus","Login","HandleRedirect","requestNonce","subscriptionToRefresh","getSubscriptions","companySubscriptions","subscriptions","sortedIndex","getSortedIndexBasedOnAlphabets","currentIndex","i4","i5","HttpBuggyCustomSettingsService","_HttpBuggyCustomSettingsService","DefaultCustomSettingsRepository","getNameGenerationProperties","jsonElement","generateName","baseUrl","HttpBuggyService","_HttpBuggyService","getAll","bugiesJSON","buggyJSON","getCategoriesWithComponentsForBuggyName","placeholderCategoriesJSON","placeHolderJSON","getById","save","rxjsMap","response","update","put","identifier","CheckName","getGeneratedBuggyName","getBuggyReportXSLT","responseType","getBuggyReportXML","buggyId","HttpScheduleService","_HttpScheduleService","deleteMulti","HttpShiftsService","_HttpShiftsService","shiftsJSON","conflictsJSON","conflictJSON","Conflict","CANCEL_REQUEST","HttpContextToken","createCancelRequestContext","shouldCancelRequest","HttpContext","COLOR_SETS","HttpColorSetsService","_HttpColorSetsService","HttpParams","mapOverviewListColorSet","getAllByMachineQuality","hasAlreadyAdjustedCustomSettings","alreadyAdjustedCustomSettings","saveCustomSettings","chosenSettings","colorSetsJSON","COLORS","HttpColorsService","_HttpColorsService","gridModel","nameAvailable","colorsJSON","COLORED_YARN_SETS","HttpColoredYarnSetsService","_HttpColoredYarnSetsService","coloredYarnSetsJSON","coloredYarnSetNameAvailable","CREELS","CUSTOMERS","HttpCustomersService","_HttpCustomersService","customersJSON","customerNumberAvailable","customSettings","_entity$toJSON","ExtendedHttpParams","setHttpParamsFromObject","parameters","httpParamsMap","httpParams","FINISHING_TEMPLATES","OverviewListFinishingTemplate","CutbarPropertiesForMachineQuality","deficitLengthOfTopCarpetInPicks","deficitLengthOfBottomCarpetInPicks","_deficitLengthOfTopCarpetInPicks","_deficitLengthOfBottomCarpetInPicks","cutbarPropertiesForCompatibilityWithMachineQualityJSON","hasDeficitLength","getGreatestDeficitLength","getNumberOfIncompatibilities","CutbarsInformationForMachineQuality","cutbarsInformationForCompatibilityWithMachineQualityJSON","FinishingTemplateForMachineQuality","finishingTemplateForForCompatibilityWithMachineQualityJSON","_finishingTemplateFor","hasCutbarsInformation","HttpFinishingTemplatesService","_HttpFinishingTemplatesService","finishingTemplatesJSON","getFinishingTemplatesForMachineQuality","finishingTempalateJSON","getFinishingTemplatesForQuality","getListOfFinishingTypes","settingsToSave","chosenSetting","getCategoriesWithComponents","getImagesForLabels","imagesForFinishingImageLabelJSON","getFoldingTypes","patternsJSON","uploadImagesForLabels","imagesForFinishingImageLabel","imageForFinishingImageLabel","formDataToUpload","FormData","append","getImageForLabels","retry","deleteImageForLabels","FINISHINGS","HttpFinishingsService","_HttpFinishingsService","VARIABLE_NAMES_TO_HTTP_PARAMS_MAP","getPatternsForCutbarForMachineQuality","includeDrawings","cutbarPatternsJSON","getFinishingsForMachineQualityId","finishingsJSON","OverviewListFinishing","generateFinishingForFinishingTemplateAndMachineQuality","generateFinishingForFinishingTemplateAndQuality","getOverviewListFinishingById","getMinNumberOfPicks","foldingTypeName","minNumberOfCutbarPicks","getMinNumberOfCutbarPicks","MACHINE_OVERVIEW","weaveQualityClassFromQualityTypeMap","HttpMachineQualitiesService","_HttpMachineQualitiesService","updateOrCreateNewVersion","getSlice","machineQualitiesJSON","getPathWidths","pathWidthsJSON","getFactorForConversionFromDentsToMillimeters","factorForConversionFromDentsToMillimeters","getFactorForConversionFromMillimetersToDents","factorForConversionFromMillimetersToDents","getFactorForConversionFromMillimetersToPicks","factorForConversionFromMillimetersToPicks","getFactorForConversionFromPicksToMillimeters","factorForConversionFromPicksToMillimeters","getSuggestionForWeftDensity","suggestionForWeftDensity","getWeaveQualityClassFromQualityType","getListOfCommercialMachineQualities","commercialMachineQualitiesJSON","getActiveMachineQualityForMachine","getPossibleMachineQualitiesForMachine","getListOfConditionPatterns","conditionPatterns","getListOfPatternFields","nameGenerationProperties","possibleValues","MACHINE_QUALITIES","equipmentTypeClassFromEquipmentTypeMap","getEquipmentTypeClassFromEquipmentType","equipmentType","HttpMachineTypesService","_HttpMachineTypesService","equipmentTypeToBackendRouteMap","equipmentTypesJSON","equipmentTypeJSON","getMachineTechnologies","technologiesJSON","technologyJSON","getControllerTypes","controllerTypesJSON","controllerTypeJSON","machineTypeNameAvailable","machineTypesForSubscription","ColorSetStubFactory","getRandomColorWithId","getRandomColorSetWithIdAndName","getRandomColorSetWithId","getRandomColorSet","YarnSetStubFactory","getRandomYarnSetWithIdAndName","getRandomYarnSetWithId","ColoredYarnSetStubFactory","getRandomColoredYarnSetWithIdAndNameAndNumberOfCreelPositions","OverviewListMachineWithCompany","machineCompanyJSON","machineOrderId","HttpMachinesService","_HttpMachinesService","MACHINE_TYPE_TO_EQUIPMENT_MANUFACTURERS_URL_MAP","mapMachinesJSONToList","machinesJSON","getActiveColoredYarnSetsWithWidthsForMachineId","productionOrderColoredYarnSet","getCurrentWeaveQualityForMachineId","getMachineManufacturers","machineManufacturersJSON","getEquipmentManufacturers","equipmentManufacturersJSON","getTuftingMachineGauges","tuftingMachineGaugesJSON","tuftingMachineGaugeJSON","getMachineGroups","machineGroupsJSON","getSummaryForMachine","machineNameAvailable","getCompatible","plasticProductId","getAllMachinesWithCompanies","machineCompaniesJSON","getAllForWeaveStructureId","getAllForWeaveProductId","getAllForTuftProductId","getAllForPlasticProductId","getAllForMachineQualityId","getAllBobbinHolderShaftNumbers","getAllWinderSerialNumbers","saveWinderVibrationFormValues","winderVibrationFormValues","getAllForAmountOfCreelPositions","amountOfCreelPositions","MACHINES","HttpNotificationsService","_HttpNotificationsService","priorities","notificationsJSON","markAsRead","notificationId","getUnreadCount","addWebNotificationSubscription","webNotificationSubscription","deleteWebNotificationSubscription","getHighestSeverityNotifications","notificationsJson","notificationJson","getHighestSeverityNotificationsForIds","equipmentIds","groupIds","HttpPathLayoutTemplatesService","_HttpPathLayoutTemplatesService","pathLayoutTemplatesJSON","reponsesJSON","reponseJSON","GetPatternVisualisationByPatternId","_GetPatternVisualisationByPatternId","patternVisualisationLoaded","getPatternVisualisationByPatternIdArgs","getPatternVisualisationByPatternId","weavePatternId","patternVisualisationLoadedObservable","PATTERNS","HttpPatternsService","_HttpPatternsService","getAllRestZonePatterns","restZonePatternsJSON","getAllFreeZonePatterns","freeZonePatternsJSON","getAllJutePatterns","jutePatternsJSON","getJutePatternsOrDrawings","getJutePatterns","getWeavePatternsOrDrawings","excludeColors","weavePatternsOrDrawingsJSON","saveRestZonePattern","getNewPatternBody","saveFreeZonePattern","saveJutePattern","saveJutePatternWithWeaveStructureId","saveWeavePatternWithWeaveStructureId","patternNameAvailable","PlanningLine","parentEquipment","_parentEquipment","PlanningForecast","planningLines","forecasts","_planningLines","_forecasts","FixedScheduleCompatibility","_creels","_qualities","FixedScheduleToPlan","_compatibility","HttpPlanningPrototypeService","_HttpPlanningPrototypeService","HISTORY_REQUEST_FORMAT","getForecast","getForecastForDraft","planningLine","patchPlanningLines","getProductionOrdersToPlan","getFixedSchedulesToPlan","getPlanningHistory","DateTime","fromJSDate","toFormat","getFilter","setFilter","getCreelMapForRun","HttpPlasticProductsCustomSettingsService","_HttpPlasticProductsCustomSettingsService","HttpPlasticProductsService","_HttpPlasticProductsService","plasticProductsJSON","getAllForMachineId","HttpPlasticProductionOrdersService","_HttpPlasticProductionOrdersService","plasticProductionOrdersJSON","PRODUCT_CONFIGURATIONS","HttpProductionOrdersCustomSettingsService","_HttpProductionOrdersCustomSettingsService","getPathLabelNameGenerationProperties","hasAlreadyAdjusted","PRODUCTION_ORDERS_WEAVING","PRODUCTION_ORDERS","PRODUCTION_SCHEDULES","UserInfo","firstName","lastName","_firstName","_lastName","userInfoJSON","ProfileInfo","userInfo","activeSubscription","_userInfo","_activeSubscription","profileInfoJSON","user","Company","companyJSON","CompanySubscriptions","companies","_companies","_subscriptions","_applicationMaintenance","companySubscriptionsJSON","sortBy","HttpProfileService","_HttpProfileService","getCreditsAmount","creditsJSON","remainingCredits","getProfileInfo","context","getVersionables","versionEndpointUrl","versionables","VERSION","versionablesSubject","getExternalApplicationKey","externalApplicationKeyJSON","applicationKey","signTermsAndConditions","HttpRawMaterialsService","_HttpRawMaterialsService","SALES_ORDERS","HttpStockLocationService","_HttpStockLocationService","HttpToolsCustomSettingsService","_HttpToolsCustomSettingsService","HttpToolsService","_HttpToolsService","toolsJSON","getStockLocations","stockLocationsJSON","stockLocationJSON","HttpTuftProductsService","_HttpTuftProductsService","tuftProductsJSON","OverviewListTuftProduct","getGauges","gaugesJSON","gaugeJSON","OverviewListTuftProductionOrder","overviewListTuftProductionOrderJSON","HttpTuftProductionOrdersService","_HttpTuftProductionOrdersService","tuftProductionOrdersJSON","saveAndPlan","updateAndPlan","checkCompatibilityWithMachine","tuftProductionOrderId","HttpWeaveProductsService","_HttpWeaveProductsService","weaveProductsJSON","HttpWeaveStructuresService","_HttpWeaveStructuresService","weaveStructuresJSON","additionalParams","getAllOverviewListWeaveStructures","manageDelete","getCustomSettings","manageSaveOrUpdateSimple","wvsxFile","manageGetAllOverviewListWeaveStructures","getByIdExtended","manageGetByIdExtended","parseDescription","encodeURIComponent","getFactorForConversionFromPicksToWefts","factorForConversionFromPicksToWefts","getWeftSelectionSuggestions","_result$weftSelection","_result$weftSelection2","numberColumnsToDropForWeftSelectionSuggestion","requestBody","duplicatedFromWeaveStructureId","isNameUnavailableOrReserved","exportToWvsx","overrideWeaveStructureName","overrideWeaveStructureVersion","overrideWeaveStructureReleaseNotes","overrideWeaveStructureDescription","autoAddToConnect","observe","WEAVE_STRUCTURES","HttpWeftColoredYarnSetsService","_HttpWeftColoredYarnSetsService","weftColoredYarnSetsJSON","weftColoredYarnSetNameAvailable","WEFT_COLORED_YARN_SETS","YARN_CONSUMPTION","HttpYarnSetsService","_HttpYarnSetsService","yarnSetsJSON","YARN_SETS","HttpYarnTypesService","_HttpYarnTypesService","getOverviewListYarnType","getListOfGroups","getListOfRawMaterials","yarnTypesJSON","_r1","ctx_r1","finishTour","feature_r4","OnboardingDialogComponent_ng_container_10_div_11_li_8_Template","onboardingStepFeatures","OnboardingDialogComponent_ng_container_10_div_11_Template","_r3","chooseEvent","getStepTitleKey","getStepDescriptionKey","canShowFeatures","getChooseEventName","canGoToNextStep","OnboardingDialogComponent","_OnboardingDialogComponent","matDialogRef","changeDetectorRef","canShowBlueArrow","onboardingTranslationKey","arrowPadding","arrowSize","dialogMargin","genericTitleKey","currentStepIndex","onboardingSteps","navigatingToNextStep","onboardingType","steps","currentOnboardingStep","onNextStep","setSourceElementAndInitialLeftPositionInPx","sourceElement","leftPositionInPx","setOnboardingStepFeatures","ngAfterViewInit","fromEvent","updateDialog","initialLeftPositionInPx","detectChanges","close","getTitleKey","onboardingTypeTitleKey","hasOnboardingSteps","isArrowPositionedAtTop","goToNextStep","onboardingStepFeatureKey","scrollIntoView","repositionDialog","dialogHeader","getBoundingClientRect","bottom","arrowTopPositionInPx","sourceElementDOMRect","dialogDOMRect","arrowLeftPositionInPx","dialogLeftPositionInPx","calculateArrowAndDialogLeftPositionInPx","dialogTopPositionInPx","calculateArrowAndDialogTopPositionInPx","updatePosition","top","innerWidth","innerHeight","MAT_DIALOG_DATA","viewQuery","OnboardingDialogComponent_mat_icon_9_Template","OnboardingDialogComponent_ng_container_10_Template","OnboardingService","_OnboardingService","queuedOnboarding","restartOnboardingSubject","isRunning","processFirstItemInQueuedOnboarding","stop","dialogBuilder","canStartOnboarding","LOCAL_STORAGE_KEY","onOnboardingRestart","restart","updateOnboardingState","OnboardingType","NAVIGATION","completeTypeOfOnboarding","firstItemInQueue","panelClass","showBackdrop","onCompleted","setDefaultValuesForOnboardingConfig","withCustomBackdrop","withoutBackdrop","updateLocalStorage","cleanUpAndHandleNextItemInQueue","pull","storedOnboardingStates","ONBOARDING","SIGNALR_EVENT","REALTIME_BACKGROUND_JOBS","SignalrMachineService","_SignalrMachineService","signalrHubConnectionFactoryService","getReportItemsChanged","getSignalrHubEvents","concatAll","getMachineEfficiency","getMachineStatus","getMachineMessage","getMachineOrderProgress","getMachineQueueProgress","getMachineDirectory","requestForMachineDirectories","getSignalrHubConnection","hubConnection","send","getMachineSpeed","getMachineEventExecutedSuccessfully","SignalrNotificationsService","_SignalrNotificationsService","newNotifications","getNewNotifications","notificationsMarkedAsRead","getNotificationsMarkedAsRead","notificationChanges","readNotificationIds","ReportItemGroupType","SignalRPlanningPrototypeService","_SignalRPlanningPrototypeService","itemsToPlanChanged","getReportItemUpdates","connection","subscriber","callBack","groupType","on","invoke","catch","off","catchError","EMPTY","REALTIME_PLANNING","REALTIME_PRODUCTION_ORDER_LITE","REALTIME_PRODUCTION_ORDER","REALTIME_YARN_CONSUMPTION","SignalrYarnConsumptionService","_SignalrYarnConsumptionService","getCalculatedYarnConsumption","getCalculatedYarnConsumptionForProductionOrder","getSingleBmpProcessed","MaterialModule","_MaterialModule","mediaMarshaller","subject","activatedBreakpoints","alias","lastActivatedBreakpoints","hook","collectActivations","deactivations","provide","MAT_CARD_CONFIG","useValue","appearance","imports","MatSidenavModule","MatListModule","MatIconModule","MatDialogModule","MatCardModule","MatCheckboxModule","MatProgressSpinnerModule","MatProgressBarModule","MatRadioModule","MatInputModule","MatTabsModule","MatMenuModule","MatButtonModule","MatSelectModule","MatExpansionModule","MatTooltipModule","MatAutocompleteModule","MatSlideToggleModule","MatToolbarModule","MatSliderModule","DragDropModule","MatDatepickerModule","MatRippleModule","FlexLayoutModule","MatButtonToggleModule","MatBadgeModule","MatSnackBarModule","BackgroundJobsOverviewStatusComponent","_BackgroundJobsOverviewStatusComponent","agInit","backgroundTaskWithJob","allLeafChildren","backgroundStatusIcon","backgroundJob","backgroundTask","refresh","BackgroundJobsOverviewStatusComponent_mat_icon_2_Template","BackgroundJobsGridComponent","_BackgroundJobsGridComponent","durationFormatPipe","gridOptionsBuilderFactoryService","colDefBuilderFactoryService","errorMessageHelper","backgroundJobSelected","retryBackgroundJob","cancelBackgroundJob","selectedBackgroundJobs","selectedBackgroundJobsChange","jobType","setGridOptionsForListOfBackgroundJobs","backgroundJobs","backgroundTaskWithJobs","findLast","tasks","task","gridOptionsForListOfBackgroundJobs","withOnRowClicked","rowClick","withOnRowDataUpdated","forEachNode","setExpanded","withOnRowGroupOpened","handleBackgroundJobSelection","withLoadingOverlay","withNoRowsOverlay","titleParam","hideDescription","withAutoGroupColumnDef","suppressCount","withSortable","withSuppressMovable","withGetRowClass","withSuppressRowClickSelection","withoutGetRowId","getStatusColumnDefForListOfBackgroundJobs","getLabelForActiveTaskStatus","getDesktopColumnDefsForListOfBackgroundJobs","withRowGroup","withHide","withValueFormatter","withGetQuickFilterText","getLabelForActiveTaskAction","withFilterValueGetter","getFilterValueForBackgroundJobName","getLabelForBackgroundJobName","startTime","getDurationForRow","endTime","ListOverviewActionsComponent","getActionsForBackgroundJob","getMobileColumnDefsForListOfBackgroundJobs","showErrorMessage","job","errorMsg","jsonMsg","parse","_unused","actions","canRetry","actionFn","cssClass","hasFailed","canBeCanceled","hasErrorMessage","durationInMs","activeTask","getActiveTask","expanded","BaseBackgroundJobsComponent","_BaseBackgroundJobsComponent","realtimeBackgroundJobs","loadListOfBackgroundJobs","subscribeToRealtimeJobGlobalStatusChanges","DELETE","cancelJob","onBackgroundJobsLoaded","_this$backgroundJobsS","backgroundJobsSubscription","listOfBackgroundJobs","getJobGlobalStatusChanged","encapsulation","ctx_r0","main","information","sub","CardInfoComponent_div_5_span_4_Template","_r2","clickButton","authorized","progressButton","showWarningButton","button","CardInfoComponent","_CardInfoComponent","showAsColumn","showWarningIcon","clickButtonEvent","hasButton","hasProgressButton","CardInfoComponent_div_3_Template","CardInfoComponent_div_4_Template","CardInfoComponent_div_5_Template","CardInfoComponent_vdw_progress_button_7_Template","CardInfoComponent_button_8_Template","CardInfoComponent_p_9_Template","getFirstColorOfFirstCreelPosition","getCreelMapping","index_r3","ColorListPreviewComponent_div_2_div_2_span_1_Template","colorPreviewWidthInPx","tmp_6_0","getFirstColorOfCreelPosition","creelPosition_r5","hexadecimalColorCode","tmp_7_0","creelMapping","colorHasMapping","color_r6","getMarginForCreelMapping","ColorListPreviewComponent_div_2_div_3_div_1_Template","ColorListPreviewComponent_div_2_div_3_span_3_Template","showBoxShadow","getColorsOfCreelPosition","maximumColorsToShowPerCreelPosition","ColorListPreviewComponent_div_2_span_1_Template","ColorListPreviewComponent_div_2_div_2_Template","ColorListPreviewComponent_div_2_div_3_Template","canShowNameOfFirstColorOfCreelPosition","amountOfCreelPositionsToShow","getColorSet","ColorListPreviewComponent","_ColorListPreviewComponent","showDetailsOnClick","colorListSelected","colorMapping","marginBetweenColorPreviewsInPx","DOMUtils","observeResize","colorListPreviewContainer","calculateCreelPositionsToShow","moreCreelPositionsAvailable","_this$creelMapping","colorIndex","_this$creelMapping2","_this$creelMapping3","getColorListPreviewContainerClass","getNamesOfOtherColors","without","creelPositionsToShow","getAmountOfMoreCreelPositionsAvailable","showNameOfFirstColor","showColorSetDetails","withWidth","withMaxHeight","RepositionDialogComponent","textileData","colorList","TextileDataDetailComponent","getAmountOfCreelPositionsToShow","getCreelPositionsToShow","possibleCreelPositionsOnScreen","getPossibleCreelPositionsOnScreen","maximumCreelPositionsToShow","widthOfCreelPositionListWithoutPossibleMoreBlock","startDentLabelElement","floor","ElementRef","ColorListPreviewComponent_div_2_Template","ColorListPreviewComponent_app_more_items_available_3_Template","ColorListPreviewComponent_label_4_Template","ColoredYarnSetPreviewComponent","_ColoredYarnSetPreviewComponent","yarnConsumption","realtimeYarnConsumption","calculatingYarnConsumption","yarnConsumptionCalculated","rowVerticalPadding","rowLabelHeight","errorContextForMissingMachineQualityParameters","calculateYarnConsumptionPermission","initializeGridOptionsForCreelPositions","connectRealtimeYarnConsumption","setListOfCreelPositions","calculateYarnConsumption","request","orderlineId","calculateYarnConsumptionForDesign","designId","calculateYarnConsumptionForOrderline","showErrorDialogForBackendError","hasPermissionToCalculateYarnConsumption","getColorList","reverse","getLabelName","calculatedYarnConsumption","isIdentifiedConfiguration","listOfCreelPositions","creelPositionNumber","creelPositionForColors","creelPositionForYarnTypes","startDent0Based","yarnConsumptionForDent","dentNumber","creelPositionsGrid","setGridOption","getColumnDefsForListOfCreelPositions","GridYarnConsumptionComponent","withMinWidth","withoutFilter","sizeColumnsToFit","getCreelPositions","setListOfCreelPositionsWithYarnSetDefined","commonMultiple","replicateCreelPositionUntilLeastCommonMultiple","leastCommonMultipleNumber","creelPositionToRepeat","numberOfRepititionsForCreelPosition","gridOptionsForListOfCreelPositions","withGetRowHeight","calculateRowHeight","withoutSorting","withoutColumnMenu","numberOfItemsInRow","getPositionForRowIndex","rowIndex","withCellClass","withMaxWidth","GridColorsOfCreelPositionComponent","showRgbValues","GridYarnTypesOfCreelPositionComponent","_c1","ConnectBaselineComponent","_ConnectBaselineComponent","color_r1","colorIndex_r2","CreelPreviewComponent_article_1_article_1_div_5_Template","ctx_r2","getUniqueColors","yarnTypeIndex_r5","yarnType_r4","CreelPreviewComponent_article_1_article_2_div_5_Template","getUniqueYarnTypes","CreelPreviewComponent_article_1_article_1_Template","CreelPreviewComponent_article_1_article_2_Template","canShowPreviewForColorSet","canShowPreviewForYarnSet","nameOfYarnSet","nameOfColorSet","CreelPreviewComponent_div_4_vdw_ellipsis_label_1_Template","CreelPreviewComponent_div_4_vdw_ellipsis_label_2_Template","_r6","setScrollPosition","minimumAmountOfDents","maximumAmountOfDents","getItemViewIndexForYarnType","patternForCreelPreview_r7","getItemViewIndexForColor","CreelPreviewComponent_div_7_div_3_span_1_Template","canShowLabelForDent","CreelPreviewComponent_div_7_div_1_Template","CreelPreviewComponent_div_7_div_2_Template","CreelPreviewComponent_div_7_div_3_Template","isCreelPreview","CreelPreviewComponent","_CreelPreviewComponent","formBuilder","uniqueColors","uniqueYarnTypes","creelPositionWithColorsAndYarnTypes","showCreelPreviewForm","initializeShowCreelPreviewForm","maximumDentOfCreelPositionForColorPatternOfCreelPosition","getMaximumDentOfCreelPosition","getColorPatternOfCreelPosition","maximumDentOfCreelPositionForYarnTypePatternOfCreelPosition","getYarnTypePatternOfCreelPosition","controls","numberOfDentsToShow","setValue","generatePatternsForNumberOfDents","scrollCreelPreview","scrollToIndex","Validators","required","numberOfDentsToShowAdjusted","newValue","userInputValue","patternsForCreelPreview","patternForColorSet","patternForYarnSet","CreelPreviewComponent_article_1_Template","CreelPreviewComponent_div_4_Template","CreelPreviewComponent_div_7_Template","scrollCreelPreview_r8","viewPortItems","BaseCreelTableComponent","_BaseCreelTableComponent","previewType","PreviewType","cellHeightInPx","isOfPreviewTypeColor","togglePreviewType","ofPreviewTypeYarn","reverseColoredYarnSetWithStartDentCreelPositions","reversedColoredYarnSetWithStartDent","getMaximumAmountOfColorsInColoredYarnSet","getMaximumAmountOfYarnSetsInColoredYarnSet","colorLineHeightInPx","cellPaddingInPx","t","CreelMappingTableBaseComponent","_CreelMappingTableBaseComponent","_this$activeColoredYa","activeColoredYarnSetCreelMap","activeMappedColoredYarnSetWithStartDent","getCellHeight","getYarnSetCreelPosition","findByPosition","getMappedYarnSetCreelPosition","isCreelPositionDifferentFromTheoreticalCreel","creelPositionNumber_r1","creelPosition_r4","item_r5","CreelMappingTableComponent_div_10_ng_container_3_span_2_Template","CreelMappingTableComponent_div_10_ng_container_2_Template","CreelMappingTableComponent_div_10_ng_container_3_Template","mappedCreelPosition_r8","item_r11","CreelMappingTableComponent_div_19_ng_container_5_span_2_Template","ctx_r6","$implicit","index_r9","onDrop","ctx_r9","setDraggedCreelPosition","onDragOver","CreelMappingTableComponent_div_19_mat_icon_2_Template","CreelMappingTableComponent_div_19_ng_container_4_Template","CreelMappingTableComponent_div_19_ng_container_5_Template","CreelMappingTableComponent_div_19_span_6_Template","readOnly","_c2","CreelMappingTableComponent","_CreelMappingTableComponent","creelMapUpdate","mappedCreelPositionToSwitch","destinationIndex","draggedCreelPosition","sourceIndex","creelPositionInCreelMap","creelPositionToSwitch","creelPositionInCreelMapCurrentPositionOnMachine","sourceCreelPositionClone","dataTransfer","dropEffect","mappedCreelPosition","CreelMappingTableComponent_div_4_Template","CreelMappingTableComponent_div_10_Template","CreelMappingTableComponent_div_19_Template","_c0","CustomSettingsDialogHeaderComponent","_CustomSettingsDialogHeaderComponent","input","canShowSave","cancel","selectedMenuTab","signal","updateSelectedTab","newSelectedTab","SignalBased","standalone","CustomSettingsDialogHeaderComponent_Conditional_0_Template","CustomSettingsDialogHeaderComponent_Conditional_5_Template","TabsAndActionsHeaderComponent","TranslationModule","CommonModule","styles","getUnit","DisabledFormInputComponent","_DisabledFormInputComponent","_this$value","canShowUnit","_this$unit","DisabledFormInputComponent_mat_label_1_Template","DisabledFormInputComponent_span_4_Template","configurationIndex","drawingConfiguration","rollLengthInMeter","_drawingConfiguration2","_drawingConfiguration3","_drawingConfiguration4","_drawingConfiguration5","_drawingConfiguration6","_drawingConfiguration7","_drawingConfiguration8","_configurationIndex","_technicalWidthInPx","_configurationId","_mainColor","_borderColor","_commercialDimensionsInCM","_rollLengthInMeter","configurationId","widthInCM","_widthInCM","getDrawingsForAllConfigurations","drawingWithUpdatedImage","_orderLine","fromProductionScheduleOrderLine","productionScheduleOrderLine","BOTTOM_CARPET","finishingTemplateDeficitLengthComparator","nodeA","nodeB","finishingTemplateFirstNode","finishingTemplateSecondNode","reasonForIncompatibility","GridCompatibleWithMachineQualityComponent","_GridCompatibleWithMachineQualityComponent","labelForCutbarBefore","labelForCutbarAfter","labelForCarpetTop","labelForCarpetBottom","isCompatibleWithMachineQuality","setReasonForIncompatibility","addReasonsForIncompatibility","addTranslatedReasonForIncompatibility","deficitLength","carpetPlace","cutbarPlace","GridCompatibleWithMachineQualityComponent_mat_icon_1_Template","GridCompatibleWithMachineQualityComponent_div_2_Template","GridCuttingLineComponent","_GridCuttingLineComponent","hasCuttingLine","GridLabelsComponent","_GridLabelsComponent","tooltipHideDelayMs","tooltipShowDelayMs","showTooltip","ngAfterViewChecked","canShowTooltip","hasLabels","numberOfLabels","canShowNumberOfImageLabels","getNumberOfImageLabels","canShowNumberOfTextLabels","getNumberOfTextLabels","getCurrentFinishingTemplateLabel","scrollWidth","OverviewListFinishingAndFinishingTemplateService","_OverviewListFinishingAndFinishingTemplateService","isTemplate","isSelection","nameCellRendererParams","nameColDefBuilder","LinkIconRendererComponent","_params$data$cutbarsI","withRightAlignment","_params$data$cutbarsI2","_params$data$cutbarsI3","_params$data$cutbarsI4","DesignPatternPreviewDialogComponent","_DesignPatternPreviewDialogComponent","drawingPatternVisualisation","DesignPreviewComponent","_DesignPreviewComponent","imageDownloaded","openDesignPatternPreviewDialog","stopPropagation","withHeight","hasMissingDesign","hasDrawingImageData","getDrawing","blob","isDrawingTypeBmp","canZoomInOnDesign","_this$drawing$image","MoreItemsAvailableComponent","_MoreItemsAvailableComponent","getNamesOfOtherItems","firstItem","takeRight","getAmountOfMoreItemsAvailable","getAmountOfItemsToShow","maximumItemsToShow","NameGenerationPatternNewComponent","_NameGenerationPatternNewComponent","nameGeneratorFormControl","patternPreview","FormControl","_this$nameGeneratorFo","disable","enable","patchValue","getPreviewText","statusChanges","disabled","clearNameGeneratorParts","selectNameGenerationPattern","nameGeneratorProperties","PatternBuilderComponent","nameGeneratorParts","nameGenerationPatternPreviewText","_serialNumberPart$max","_customTextPart$custo","_previewTextsInBracke","previewTextsInBracket","previewText","serialNumberPart","entityPropertyPart","_entityPropertyPart$c","_entityPropertyPart$c2","applySuggestion","nameSuggestion","tmp_1_0","NameSuggestionHintComponent","_NameSuggestionHintComponent","currentName","nameGenerationEntity","httpRepository","output","showNameSuggestion","computed","getNameSuggestion","toObservable","_this$externalRefresh","externalRefresh","_this$nameGenerationE","debounce","suggestion","NameSuggestionHintComponent_Conditional_0_Template","ReactiveFormUtils","updateChildrenValueAndValidity","options","emitEvent","enabled","FormGroup","FormArray","childControl","updateValueAndValidity","onlySelf","markAllEnabledAsTouched","markAsTouched","tmp_2_0","partForm","serialNumber","PartValuesCellRendererComponent_Conditional_1_mat_error_6_Template","PartValuesCellRendererComponent_Conditional_1_mat_error_7_Template","PartValuesCellRendererComponent_Conditional_1_mat_error_8_Template","PartValuesCellRendererComponent_Conditional_1_mat_error_14_Template","PartValuesCellRendererComponent_Conditional_1_mat_error_20_Template","cutFrom_r2","_c3","PartValuesCellRendererComponent_Conditional_2_Conditional_10_mat_error_5_Template","PartValuesCellRendererComponent_Conditional_2_Conditional_10_mat_error_6_Template","PartValuesCellRendererComponent_Conditional_2_Conditional_10_mat_error_12_Template","PartValuesCellRendererComponent_Conditional_2_Conditional_10_mat_error_13_Template","PartValuesCellRendererComponent_Conditional_2_Conditional_10_mat_error_14_Template","entityProperty","startCharacter","PartValuesCellRendererComponent_Conditional_2_For_7_Template","PartValuesCellRendererComponent_Conditional_2_mat_error_9_Template","PartValuesCellRendererComponent_Conditional_2_Conditional_10_Template","cutFrom","cutFromEnum","selectedCutFrom","PartValuesCellRendererComponent_Conditional_3_mat_error_6_Template","PartValuesCellRendererComponent_Conditional_3_mat_error_7_Template","PartValuesCellRendererComponent","_PartValuesCellRendererComponent","nameGeneratorPartTypeEnum","selectedPropertyType","PartValuesCellRendererComponent_Conditional_1_Template","PartValuesCellRendererComponent_Conditional_2_Template","PartValuesCellRendererComponent_Conditional_3_Template","property_r1","getPropertyTranslation","PropertySelectCellRendererComponent","_PropertySelectCellRendererComponent","selectedProperty","compareProperties","property1","property2","PropertySelectCellRendererComponent_For_6_Template","PropertySelectCellRendererComponent_Conditional_7_Template","serialNumberInMiddle","separatorEnum","separator_r1","_PatternBuilderComponent","overlayActionsService","currentSeparator","currentParts","showPatternPreview","showNoRowsOverlay","separatorValues","nextPartId","nameGeneratorForm","gridApi","generalMenuTab","contentSwitcherData","getCurrentEntryData","nameGeneratorInput","setFormChangeListeners","patternGridOptions","getGridOptions","getPartForm","actionTriggeredEmitter","addEmptyPartForm","withFlex","withResizable","withOnGridReady","withGetRowId","withoutMovableColumns","scale","titleKey","isPrimary","withRowActions","buttons","partRemoved","withRowDraggingInsideGrid","_params$rowNode","rowData","withOnRowDragEndOrLeave","partMoved","partsChanged","pairwise","getCurrentNameGeneratorParts","combineLatest","oldParts","newParts","confirmPattern","valid","getEmptyPartForm","updatePropertyValidity","toIndex","fromIndex","partToMove","at","removeAt","insert","customTextPart","partId","newPartForm","addValidators","serialNumberNotInMiddleValidator","partsFormGroup","setPartFormChangeListeners","maxLenght","setValidators","_startValue$replace$t","_startValue$replace","clearValidators","cutFromNone","PatternBuilderComponent_For_20_Template","PatternBuilderComponent_Conditional_21_Template","NameGenerationProperty","ENTITY_PROPERTY","getTranslationKey","_parameters","NameGeneratorPartService","_NameGeneratorPartService","namePlaceholderSeparator","nameGeneratorPart","_nameGeneratorPart$pa","previewTextInBracket","nameGenerationProperty_r7","ctx_r3","getPatternName","cutFrom_r8","_c4","_c5","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_div_8_mat_error_6_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_div_8_mat_error_12_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_div_8_mat_error_13_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_mat_option_6_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_div_8_Template","cutFroms","pattern_r9","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_12_mat_error_6_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_12_mat_error_7_Template","_c6","_c7","tmp_9_0","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_13_mat_error_6_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_13_mat_error_7_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_13_mat_error_13_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_13_mat_error_19_Template","onDraggedPatternLeavesPatternItem","onDraggedPatternDroppedOnPatternItem","container_r5","element_r6","onDragStart","onDragEnd","onDrag","SelectNameGenerationPatternComponent_ng_container_19_div_5_mat_option_8_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_mat_error_9_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_11_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_12_Template","SelectNameGenerationPatternComponent_ng_container_19_div_5_ng_container_13_Template","deletePattern","dragging","nameGeneratorPartType","SelectNameGenerationPatternComponent_ng_container_19_div_5_Template","nameGenerationPatternForms","noDataOverlayActions","SelectNameGenerationPatternComponent","_SelectNameGenerationPatternComponent","dialogRef","nameGeneratorPartService","_data$nameGeneratorPa","draggedIndex","isOnBottomHalfOfRow","CLASS_NAME_FOR_DROP_INDICATOR","CLASS_NAME_FOR_PATTERN_ITEM","CLASS_NAME_FOR_DRAGGED_ELEMENT","ADD_NAME_PATTERN_ACTION_KEY","DRAG_PREVIEW_ELEMENT_WIDTH","initialiseNameGenerationPatternForms","subscribeToOverlayActions","addPattern","initialiseNameGenerationPatternForm","updatePropertyValueAndValidity","nameGenerationProperty","propertyTranslationKey","FormValidationHelper","checkForms","contains","draggedItemDifferentFromTargetItem","isMouseOnBottomHalfOfTarget","isMouseOnBottomHalfOfRow","addDropIndicator","relatedTarget","removeDropIndicator","currentNameGenerationPatternForm","baseElementForDragPreview","containerElement","dragPreviewElementDOMRect","createDragPreviewElement","setStyle","removeStyle","dragPreviewElement","removeDragPreviewElement","screenX","screenY","patternItemElementBoundingDOMRect","mouseYPosition","eventY","dropIndicator","patternsContainer","elementBoundingDOMRect","yPosition","cloneNode","dragIcon","querySelector","replaceChildren","dragPreviewTextElement","style","paddingLeft","textContent","dummyPreview","setDragImage","removeClass","array","actionKey","nameGenerationPatternForm","_parameters$length","subscribeToValueChanges","updateFormControlDisabledState","reset","_this$nameGenerationP","_this$nameGenerationP2","patternForm","SelectNameGenerationPatternComponent_ng_container_19_Template","SelectNameGenerationPatternComponent_ng_template_20_Template","SelectNameGenerationPatternComponent_div_22_Template","noNamePatterns_r10","NameGenerationPatternComponent","_NameGenerationPatternComponent","nameGeneratorPartsChange","nameGenerationPattern","clearNameGenerationPattern","OnboardingPlanningStep","TOUR","ADD_ITEM","VIEW_DETAILS","DRAG_AND_DROP","_GridOrderLineStatusComponent","colorForStatus","SUCCESS","statusLabel","getColor","GridOrderLineStatusComponent_Conditional_4_Template","GridOrderLineStatusComponent_Conditional_5_Template","PannableAndZoomablePatternPreviewComponent","_PannableAndZoomablePatternPreviewComponent","svgPanZoomInstance","SvgPanZoom","pannableAndZoomableContainer","firstElementChild","minZoom","maxZoom","zoomScaleSensitivity","beforePan","previousPosition","updateBBox","sizes","getSizes","viewBox","realZoom","offsetX","offsetY","viewportWidthBiggerThanViewBoxWidth","viewportHeightBiggerThanViewBoxHeight","minY","maxY","resetPanAndZoom","destroy","ThumbnailSvgLoaderDirective","_ThumbnailSvgLoaderDirective","appThumbnailSvgLoader","svgDocument","documentElement","hasChildNodes","_svgDocument$querySel","createElementNS","elementToAppend","previousElementSibling","prepend","svgBBox","getBBox","getPatternVisualisationRepresentation","PatternPreviewComponent_ng_container_2_div_1_Template","isThumbnailViewMode","fullPreview_r2","PatternPreviewComponent_ng_container_3_div_1_Template","PatternPreviewComponent","_PatternPreviewComponent","patternVisualisationType","_patternVisualisation","red","green","blue","viewMode","PatternPreviewComponent_div_1_Template","PatternPreviewComponent_ng_container_2_Template","PatternPreviewComponent_ng_container_3_Template","PatternPreviewComponent_div_4_Template","PatternPreviewComponent_ng_template_5_Template","SvgLoaderDirective","_SvgLoaderDirective","appSvgLoader","currentValue","innerHTML","arrowPositionTop","arrowPositionLeft","isArrowPositionedAtBottom","isArrowPositionedAtRight","isArrowPositionedAtLeft","_RepositionDialogComponent","ngZone","_data$showArrow","_data$moveWithCursor","_data$verticalOffset","_data$horizontalOffse","_data$horizontalOffse2","windowResizeSubject","showArrow","moveWithCursor","mouseMoved","dialogElementRef","rootElement","clientX","horizontalOffset","clientWidth","startTop","startLeft","_this$sourceElement","_this$sourceElement2","verticalOffset","ARROW_MARGIN","DEFAULT_LEFT_ARROW_OFFSET","isDialogOverflowingLeftEdgeOfWindow","dialogLeft","getMinimumDialogPosition","DIALOG_MARGIN","onResize","windowDimensions","initializeDialogPositioning","sourceRect","dialogRect","pointerEvents","eventListeners","_this$sourceElement3","_this$sourceElement4","canShowArrow","ARROW_SIZE","clientTop","clientHeight","clientLeft","emitRepositionDialogEvent","dialogWidth","dialogHeight","calculateDialogPositionLeft","dialogTop","calculateDialogPositionTop","isDialogOverflowing","repositionDialogHorizontally","repositionDialogVertically","hasResizedDialog","updateSize","calculateArrowPositionTop","calculateArrowPositionLeft","componentRef","container","createComponent","isDialogOverflowingRightEdgeOfWindow","canShiftDialogHorizontally","canShiftDialogVertically","getMaximumDialogPositionRight","isDialogOverflowingBottomEdgeOfWindow","isDialogOverflowingTopEdgeOfWindow","DEFAULT_ARROW_OFFSET","getMaximumDialogPositionBottom","arrowTop","ARROW_PADDING","arrowLeft","ViewContainerRef","RepositionDialogComponent_mat_icon_2_Template","RepositionDialogComponent_ng_template_3_Template","RepositionTooltipComponent","_RepositionTooltipComponent","targetDOMRect","forceArrowCentered","setTooltipAndArrowPositioning","topPosition","tooltipPaddingInPx","arrowVerticalPositioningClassName","classNameForBottomPositionArrow","classNameForTopPositionArrow","leftPosition","arrowHorizontalPositionInPx","arrowHorizontalPositioningClassName","classNameForLeftPositionArrow","classNameForRightPositionArrow","addPanelClass","arrowElement","arrow","_elementRef","arrowCenterOffset","offsetLeft","RepositionTooltipComponent_ng_template_3_Template","NOT_IN_GROUP","NR_COLUMNS_FOR_WEFT_SELECTION","SIZE_IN_KB","MAIN_DESIGN","NAME","MACHINE_PRODUCTION_ORDER","MACHINE_ORDER_ID","DATE_MODIFIED","advancedSearchFilter_r4","selectObject","getInputLabel","isInputOfTypeObject","getSuffixUnit","AdvancedSearchComponent_section_0_div_5_mat_form_field_2_ng_container_5_mat_error_1_Template","_r5","AdvancedSearchComponent_section_0_div_5_mat_form_field_2_span_4_Template","AdvancedSearchComponent_section_0_div_5_mat_form_field_2_ng_container_5_Template","maximumFractionDigits","allowDecimalCases","canShowInputFieldSuffix","option_r6","getOptionText","AdvancedSearchComponent_section_0_div_5_mat_form_field_3_mat_option_4_Template","_r7","getChipValueKey","getBaseRouterLink","getDateInputLabel","advancedSearchForm","getMinDate","getMaxDate","getPlaceholderForAdvancedSearchFilter","_r8","AdvancedSearchComponent_section_0_div_5_mat_form_field_1_Template","AdvancedSearchComponent_section_0_div_5_mat_form_field_2_Template","AdvancedSearchComponent_section_0_div_5_mat_form_field_3_Template","AdvancedSearchComponent_section_0_div_5_mat_form_field_4_Template","AdvancedSearchComponent_section_0_div_5_vdw_datepicker_form_input_5_Template","AdvancedSearchComponent_section_0_div_5_div_6_Template","isBigWidth","isSmallWidth","getPropertyClass","canShowTextField","canShowNumberField","canShowSelectField","canShowDateField","canShowCheckboxField","closeAdvancedSearch","AdvancedSearchComponent_section_0_div_5_Template","clearAdvancedSearchFilters","applyAdvancedSearchFilters","_r9","onObjectSelected","cancelSelectObject","selectObjectInput","getSelectedObject","AdvancedSearchComponent","_AdvancedSearchComponent","BaseAdvancedSearchComponent","advancedSearchClose","clearAdvancedSearchFilterValues","updateAdvancedSearchFilterValues","AdvancedSearchComponent_section_0_Template","AdvancedSearchComponent_app_advanced_search_select_object_1_Template","canShowSelectObject","_BaseAdvancedSearchComponent","setFormFields","isInputOfTypeDate","option","canShowObjectPreview","getPreviewObjectName","_this$advancedSearchF","_this$advancedSearchF2","getAdvancedSearchFilter","kebabCase","dateInputLabel","minDate","maxDate","_this$advancedSearchF3","controlConfigs","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_2_ng_container_5_mat_error_1_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_2_span_4_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_2_ng_container_5_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_3_mat_option_4_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_1_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_2_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_3_Template","AdvancedSearchDialogComponent_section_0_div_5_mat_form_field_4_Template","AdvancedSearchDialogComponent_section_0_div_5_vdw_datepicker_form_input_5_Template","AdvancedSearchDialogComponent_section_0_div_5_div_6_Template","AdvancedSearchDialogComponent_section_0_div_5_Template","AdvancedSearchDialogComponent","_AdvancedSearchDialogComponent","onNavigationHelperDestroy","AdvancedSearchDialogComponent_section_0_Template","AdvancedSearchDialogComponent_app_advanced_search_select_object_1_Template","onFilterOverflowClicked","filterOverflowPositionLeft","getFilterOverflowTooltip","searchFilter_r4","canShowFilterTooltip","getFilterTooltip","getFilterDisplayText","SearchFiltersComponent_div_3_div_1_Template","canShowFilter","index_r5","SearchFiltersComponent","_SearchFiltersComponent","hasFilters","_this$searchFilters","showOverflowChip","searchFilters","showFiltersFromRightToLeft","searchFiltersChanged","showAdvancedSearch","filterContainerContentChangedSubject","checkIfFiltersAreTooBigForContainer","filterContainer","lastNonOverflowFilterIndex","unitKey","commercialUnit","substring","emitCheckIfFiltersAreTooBigForContainerEvent","setFiltersOpacity","maxWidth","widthCount","setFilterOverflowLeftPosition","OVERFLOW_BUTTON_WIDTH_IN_PX","OVERFLOW_BUTTON_PADDING_IN_PX","opacity","currentChildElementIndex","SearchFiltersComponent_div_0_Template","SearchFiltersComponent_div_3_Template","getRowHeightForCreelPreview","rowHeight","amountOfColoredYarnSets","SelectFinishingComponent","_SelectFinishingComponent","overviewListFinishingAndFinishingTemplateService","_data$machineQualityI","gridOptionsForListOfFinishings","listOfGridOptions","setGridOptionsForListOfFinishings","getFinishings","_this$finishingsGrid","listOfGridApis","finishingsGrid","canSelectFinishing","_this$finishingsGrid2","selectFinishing","getSelectedFinishing","showOnlyLatestVersionChanged","change","getColumnDefsForListOfFinishings","withOnCellDoubleClicked","withRememberStateForNavigationHelper","showOnlyLatestVersion","listOfFinishings","finishingsForMachineQuality","NavigationSearchService","_NavigationSearchService","navigationOpenSearchEmitter","navigationCloseSearchEmitter","notifySearchOpened","notifySearchClosed","SideNavigationStateService","_SideNavigationStateService","sideNavStateStorageKey","initializeSideNavState","changeSideNavState","changeNavigationStateToClosed","getCurrentNavigationState","sideNavState","storedSideNavState","calendarRouting","RouterModule","forChild","PatternOverviewService","_PatternOverviewService","editPageUrl","numDays","_nodeA$data","_nodeB$data","getDefaultGridOptionsBuilder","builder","PatternShift","dayIndex","sequence","occurrenceOfShift","_dayIndex","_sequence","_occurrenceOfShift","_startTime","_endTime","getHoursAndMinutesFromDuration","hours","minutes","getStartAndEndTimeFromMidnight","patternStartTime","Duration","fromISOTime","end","plus","days","patternShiftJSON","convertTimeSpanToDuration","startTimeFromMidnight","minus","endTimeFromMidnight","shiftId","breakTimes","patternShifts","_numDays","_patternShifts","_patternJSON$patternS","patternShift","ShiftSelectionService","_ShiftSelectionService","shifts","builderFactoryService","TRANSLATION_KEY","init","withEntityName","withRowData","withCrudGridOptions","withRowSelection","openContentSwitcherDialog","inputValue","selectedObjects","CrudObjectSelectionDialogNewComponent","AddPatternShiftDialogComponent","_AddPatternShiftDialogComponent","shiftSelectionService","addPatternShiftForm","addPatternShiftNavigationData","previousDayEndTime","nextDayStartTime","selectShift","getCurrentPatternShift","addPatternShift","_this$navigationHelpe","overlappingShiftsValidator","newStart","newEnd","scheduleItem","overlappingShifts","setErrors","getTimeFromMidnight","day","AddPatternShiftDialogComponent_mat_error_15_Template","AddPatternShiftDialogComponent_vdw_invalid_form_message_20_Template","AddPatternShiftDialogComponent_vdw_invalid_form_message_21_Template","AddPatternShiftDialogComponent_vdw_invalid_form_message_25_Template","AddPatternShiftDialogComponent_vdw_invalid_form_message_26_Template","AddPatternShiftDialogService","_AddPatternShiftDialogService","getLoadEntry","addPatternForm","AddPatternPageComponent","_AddPatternPageComponent","addPatternShiftDialogService","textileService","HEADER_IDENTIFIER","PATTERN_TRANSLATION_KEY","SAVE_TYPE","SaveType","DEFAULT_START_TIME","DEFAULT_NUM_DAYS","DAY_COLUMN_WIDTH","TIMELINE_COLUMN_WIDTH","noSpaceValidator","generalTab","patternToSave","totalHours","withGridOptions","withoutRowSelection","_this$patternToSave$p","maxEndTime","minEndTime","as","refreshHeader","redrawRows","snapshot","setFormValues","setPatternShiftRowData","savePattern","saveType","getCurrentPattern","saving","isEditingPattern","finalize","finalizeSaving","navigateAndShowToast","TextileDataType","SHIFT_PATTERN","duplicatePattern","removeConfirmation","onNumDaysBlurred","onStartTimeBlurred","_this$addPatternForm$","routeConfig","setAsyncValidators","patternShiftRowData","patternShiftA","patternShiftB","getScheduleItemFromPatternShift","_this$gridApi","getGridOption","selectedShiftNames","withSuppressHeaderMenuButton","withHeaderComponent","TimelineHeaderComponent","withHeaderClass","TimelineRowComponent","onRowButtonClicked","onScheduleItemDeleted","deletePatternShift","_this$gridApi$getDisp","_this$gridApi$getDisp2","getDisplayedRowAtIndex","filteredPatternShifts","insertIndex","SAVE_AND_CLOSE","SAVE_AND_CREATE_NEW","AddPatternPageComponent_vdw_invalid_form_message_15_Template","AddPatternPageComponent_vdw_invalid_form_message_16_Template","AddPatternPageComponent_Conditional_23_Template","shared","_PatternOverviewPageComponent","PatternOverviewPageComponent","crudOverviewDataBuilderFactory","gridActionButtonsHelper","patternOverviewService","pageUrls","colDefs","withDefaultButtons","grid","navigateToGivenRoute","withNewClicked","i6","patternRouting","AddScheduleViewMode","matchingCriteriaData","getSchedulePermission","AddSchedulePageComponent","_AddSchedulePageComponent","machines","machineOverview","selectedMenuItem","machineGroups","VIEW_MODE","getRootGroup","groups","canShowFormBasedOnViewMode","openCustomSettings","ScheduleCustomSettingsComponent","AddSchedulePageComponent_Conditional_3_Template","ScheduleOverviewService","_ScheduleOverviewService","InputChipCellRendererComponent","_ScheduleOverviewPageComponent","ScheduleOverviewPageComponent","schedule","scheduleOverviewService","SHIFT_SCHEDULE","withCustomSettingsClicked","scheduleRouting","CalendarFormat","STANDARD_GREGORIAN","ISO_8601","StartOfDay","FIRST_SHIFT_START","LAST_SHIFT_END","StartOfWeek","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY","SUNDAY","item_r1","item_r2","item_r3","_ScheduleCustomSettingsComponent","calenderFormats","startOfWeekFormats","startOfDayFormats","SCHEDULE_TRANSLATION_KEY","scheduleForm","calendarFormat","startOfWeek","startOfDay","ScheduleCustomSettingsComponent_For_12_Template","ScheduleCustomSettingsComponent_For_20_Template","ScheduleCustomSettingsComponent_For_28_Template","ShiftOverviewService","_ShiftOverviewService","PAGE_URLS","enableClickableName","GridColorPreviewComponent","convertHexadecimalColorCodeToRGB","AddShiftPageComponent","_AddShiftPageComponent","SHIFT_TRANSLATION_KEY","LIMITED","ColorPickerMode","shiftToSave","saveShift","addShiftForm","getCurrentShift","isEditingShift","deleteShift","VIOLET","setNameAsyncValidator","AddShiftPageComponent_vdw_invalid_form_message_10_Template","AddShiftPageComponent_vdw_invalid_form_message_11_Template","AddShiftPageComponent_vdw_invalid_form_message_12_Template","_ShiftOverviewPageComponent","ShiftOverviewPageComponent","shiftOverviewService","GRID_IDENTIFIER","shiftRouting","SelectMachineTypeService","_SelectMachineTypeService","machineTypes","translateService","translationKeyMap","getColumnDefsForMachineType","getColumnDefsForWeavingMachine","getColumnDefsForTuftingMachine","getColumnDefsForWinderMachine","getColumnDefsForDyeingMachine","getColumnDefsForPlasticsMachine","getAvailableTypes","canSelectMachineType","getBackendRoute","getMachineTypeDetails","_machineType$manufact","_machineType$technolo","_machineType$controll","_machineType$minimumL","_machineType$maximumL","_machineType$maximumT","basicMachineTypeDetails","labelForUnit","getMachineTypeGridIdentifier","getUrlToAddPage","getGenericColumns","getTechnologyColDef","addUnitToString","unitTranslationKey","PlasticMachineOverviewList","MachineOverviewList","TuftingMachineOverviewList","WeavingMachineOverviewList","_MachineType","machineManufacturer","JacquardMachineManufacturerType","PTR_PTX_SINGLE_WIDTH","PTR_PTX_DOUBLE_WIDTH","HMI_SINGLE_WIDTH","HMI_DOUBLE_WIDTH","HMI_AXMINSTER","S500","S600_NO_EXF","S600","S800","S200_S250","CI","SPLIT_14","SPLIT","FLAT_SPLIT_14","FLAT_SPLIT","FLAT_WEAVE","CARPET_ALPHA","OLD_SPLIT_14","OLD_SPLIT","NEW_SPLIT_14","NEW_SPLIT","FLAT_OLD_SPLIT_14","FLAT_OLD_SPLIT","FLAT_NEW_SPLIT_14","FLAT_NEW_SPLIT","HMI_PLUS_SINGLE_WIDTH","HMI_PLUS_DOUBLE_WIDTH","HMI_PLUS_AXMINSTER","getRandomMachineWithIdAndMachineGroup","machineManufacturerBonas","MachineOverviewViewMode","DETAILVIEW","LISTVIEW","GRIDVIEW","PHYSICALVIEW","getMachineDimensionsForViewMode","mode","isLow","isHigh","formattedReportItem_r1","OverviewMachineEfficiencyComponent_ng_container_0_ng_container_1_div_1_Template","OverviewMachineEfficiencyComponent_ng_container_0_ng_container_1_Template","canSeeReportItemHeader","reportItemHeader","getEfficiencyValue","OverviewMachineEfficiencyComponent_ng_template_1_div_0_Template","hasEfficiency","OverviewMachineEfficiencyComponent","_OverviewMachineEfficiencyComponent","reportDataSetTemplateService","useReportItemData","getReportItemMachineEfficiency","String","_this$machine$efficie","_this$machine$efficie2","canShowReportItemHeader","getCurrentReportDataSetTemplate","_response$variants$fi","_response$variants","_response$variants2","variants","reportMachineDataSetTemplate","_this$machine$reportI","reportItemHeaderTemplate","getHeaderReportItem","ReportItem","attrs","OverviewMachineEfficiencyComponent_ng_container_0_Template","OverviewMachineEfficiencyComponent_ng_template_1_Template","machineEfficiency_r3","OverviewMachineTypeComponent","_OverviewMachineTypeComponent","hasTexstateViewLiveStatusPermission","hasTexstateViewLiveDeclarationMessagesPermission","getStatusClass","MachineOverviewService","_MachineOverviewService","isKioskMode","hasTexstateViewLiveOrderMessages","hasTexstateViewLiveStatus","hasTexstateViewLiveDeclarationMessages","efficiencyValueColDefBuilder","machineNameValueGetter","currentStatus","nextStatus","createStringFromStatusValue","createStatusValue","currentProductionOrderProgress","nextProductionOrderProgress","compareProductionOrderProgresses","createProductionOrderProgressValue","withInitialHide","createMachineGroupsValue","getColumnDefsForSpeed","overviewMachine","getProductionOrderProgressDuration","progress","timeSpentInSeconds","createStringFromProductionOrderProgress","durationA","durationB","ReportDataSetTemplateService","_ReportDataSetTemplateService","currentReportDataSetTemplate","ReplaySubject","setCurrentReportDataSetTemplate","reportDataSetTemplate","_field","_title","reportItemJson","valueIsObject","valueAsReportItems","spreadObjectValue","checkAllowedToShowEmpty","entries","flattenMachineGroup","flatten","pathToMachineGroup","findMachineGroupById","found","toDraggableDropListEntry","editMode","_group$groups$map","_group$groups","ArrayUtils","sortByKey","childGroup","extraData","dropAllowed","dragAllowed","notification_r3","openMachineDetailSidebar","NotificationListComponent_div_2_mat_icon_12_Template","NotificationListComponent_div_2_div_13_Template","NotificationListComponent_div_2_div_14_Template","getPriorityIconName","notificationClickable","NotificationListComponent","_NotificationListComponent","listScrolled","notificationList","loadMore","endIndex","previousScrollEvent","_this","_this$dialogRef","componentInstance","NotificationListComponent_div_2_Template","scroll_r6","toggleValue","toggleSubscription","isSubscriptionProcessing","NotificationListSettingsComponent","_NotificationListSettingsComponent","pushNotificationsService","filterChanged","toastParams","subscriptionEnabledInBrowser","isSubscribed","onFilterOptionChanged","isBrowserSupported","showError","unsubscribeToPushNotifications","subscribeToPushNotifications","NotificationListSettingsComponent_vdw_slide_toggle_0_Template","markAllAsRead","onOptionChanged","customSettingsButton_r4","toggleDialog","notificationSettingsComponent","getDialogData","getNotifications","notificationsList","scaleImage","NotificationsComponent","_NotificationsComponent","VIEW_NOTIFICATIONS_PERMISSION","loading","savedPriorities","enabledPriorities","setScale","setEnabledPriorities","setDisabledPriorities","subscribeToGroupChanges","initialCurrentGroup","currentGroup","machineOverviewMode","onNotificationAdded","getNestedChildMachineIds","addedNotification","addNotificationsToList","onNotificationMarkedAsRead","notificationMarkedAsRead","markNotificationsAsRead","originalHeight","wantedHeight","_this$currentGroup","getNotificationsSlice","canShowUnreadCount","floorplanId","overviewGroupId","_this$group","isInitializing","priorityLevel","foundPriority","notificationsToAdd","uniqueNotifications","distinctBy","floorplanMachines","NotificationsComponent_h3_6_Template","NotificationsComponent_div_8_Template","NotificationsComponent_vdw_dialog_button_10_Template","NotificationsComponent_app_notification_list_11_Template","NotificationsComponent_div_12_Template","NotificationMobileListFilterComponent","_NotificationMobileListFilterComponent","confirm","NotificationMobileListFilterComponent_div_1_Template","NotificationMobileListFilterComponent_button_6_Template","NotificationMobileOverviewHeaderPipe","_NotificationMobileOverviewHeaderPipe","headerKey","translatedHeader","NotificationMobileOverviewPageComponent_ng_container_4_div_2_Template","notificationRouting","_NotificationMobileOverviewPageComponent","NotificationMobileOverviewPageComponent","URL_TO_ROOT","FILTER_ICON","HEIGHT_WITH_PUSH_NOTIFICATION_TOGGLE","HEIGHT_WITHOUT_PUSH_NOTIFICATION_TOGGLE","onFilterClicked","withPosition","NotificationMobileOverviewPageComponent_ng_container_4_Template","NotificationMobileOverviewPageComponent_div_5_Template","NotificationsModule","_NotificationsModule","MatDialogRef","SharedModule","SelectionListModule","ScrollingModule","HtmlWithVariablesToTextPipeModule","SelectionListContainerModule","i7","i8","i9","NotificationsService","_NotificationsService","_unreadCount","realtimeNotifications","PAGE_SIZE","notificationAdded","readUpdates","_initialCountForCurrentSubscription","shareReplay","bufferSize","refCount","WebNotificationSubscription","p256DH","auth","_auth","_p256DH","_endpoint","PushNotificationsService","_PushNotificationsService","_this$_isSubscribed","_isSubscribed","swPush","notificationService","requestSubscription","_ref2","_subscriptionJSON$end","p256dh","isEnabled","applicationServerKey","publicVapidKeyOfServer","serverPublicKey","_NotFoundPageComponent","machineEventInfoJSON","yieldOfMachine","rotationsPerMinute","_rotationsPerMinute","runningMachineEventInfoJSON","hasMachineSpeed","LoadDrawingImageDirective","_LoadDrawingImageDirective","shouldDownloadImage","_this$imageSignature","downloadAndSetImage","imageSignature","drawingDimensionsInPx","downloadOriginalDrawing","setDownloadedImage","downloadRecoloredDrawing","BackendErrorSeverity","INFO","getRecoloredImage","MISSING_DATA_IMAGE","onImageDownloaded","DrawingLibraryImagePreviewComponent_ng_template_3_img_0_Template","DrawingLibraryImagePreviewComponent_ng_template_3_img_1_Template","DrawingLibraryImagePreviewComponent_ng_template_3_div_2_Template","canShowImageLoader","DrawingLibraryImagePreviewComponent","_DrawingLibraryImagePreviewComponent","hideTooltip","onMouseLeave","previewHeight","preview","mouseOffsetY","mouseOffsetX","PREVIEW_TOOLTIP_HEIGHT_FROM_BOTTOM_IN_PX","showAmountSpecifier","isImageDownloading","areImagesUploading","_this$drawingImage","DrawingLibraryImagePreviewComponent_img_2_Template","DrawingLibraryImagePreviewComponent_ng_template_3_Template","designIsPresent_r3","DrawingLibraryHelper","_DrawingLibraryHelper","onRowDrag","productionScheduleItemMultiplier","draggingService","setData","dragPreview","dragEvent","getQuantitySuggestionForPath","selectedPath","availableSpaceInBuggyInPicks","buggyLengthMaxInPicks","shouldMakeSuggestion","productionScheduleMultiplier","makeQuantitySuggestionCalculation","getWidthFilterForPath","selectedRestPathColoredYarnSet","widthFilter","_productionSchedule$m","_productionSchedule$m2","_productionSchedule$p","_pathsOfSelectedRestP","_productionSchedule$m3","_pathsOfSelectedRestP2","totalWidthOfPathsOfColoredYarnSetInDents","pathsOfSelectedRestPath","isQuantityEditable","recalculateQuantitySuggestionWhenRollLengthIsChanged","rollLengthColumnId","column","getColId","setDataValue","setQuantitySuggestionForPath","getColorSetIdOfSelectedPath","getInitializationFilterModel","showOnlyPreSelectedDrawings","preselectedDesignIds","preselectedConfigurationIds","isPreselection","selectedPathContentRowData","designIds","configurationIds","savedFilterModel","selectedDrawingIdFilterModel","getPreselectedDrawingAndConfigurationIdsFilterModel","_productionSchedule$m4","_productionSchedule$m5","_productionSchedule$m6","_drawing$drawing","_productionSchedule$m7","_drawing$drawing2","availableSpace","drawingHeightInPicks","convertPixelsToPicks","_productionSchedule$m8","convertHeightInMeterToPicks","ceil","getMaxBuggyLengthOrLongestPath","_productionSchedule$p2","longestPathHeight","totalHeightInPicks","getTotalCutbarLengthInPicks","longestPathLengthInPicks","getLongestPathLengthInPicks","_productionSchedule$p3","productionSchedulePathLenths","_productionSchedulePa2","totalCutbarLengthInPicks","_finishing$cutbarsInf","_finishing$cutbarsInf2","_finishing$cutbarsInf3","_finishing$cutbarsInf4","AddArticlePageComponent_section_0_mat_form_field_26_mat_error_11_Template","FINISHING_CHIP_VALUE_KEY","getRouterLink","_r4","onQualityChanged","addArticleForm","canEditArticle","canShowInvalidFormMessageError","saveArticle","deleteArticle","openConflictsDialog","AddArticlePageComponent_section_0_mat_error_16_Template","AddArticlePageComponent_section_0_mat_error_17_Template","selectDesign","AddArticlePageComponent_section_0_mat_error_25_Template","AddArticlePageComponent_section_0_mat_form_field_26_Template","AddArticlePageComponent_section_0_app_drawing_configuration_27_Template","isEditingArticle","getActionText","isArticleBeingUsed","isLoadingArticle","hasEditPermission","FINISHING_VIEW_PERMISSION","canShowDesignConfiguration","AddArticlePageComponent","_AddArticlePageComponent","articles","isSelectingDesign","isSelectingFinishing","selectedMachineQualityId","articleToSave","urlToEditArticle","urlToDuplicateArticle","urlToArticleOverview","saveButtonTouched","articleEditPermission","finishingBaseRouterLink","initializeAddArticleFormFields","getCurrentArticle","articleTranslationKey","isDuplicatingArticle","isFormInvalid","invalid","createInUseData","SelectDesignComponent","addDesignConfiguration","getRawValue","hasChosenFinishing","_this$selectedMachine","openSelectGridDialog","rowSelection","AgGridRowSelection","SINGLE","checkForm","canShowArticleForm","urlParams","articleState","setArticle","setArticleFormValues","setDesign","designConfiguration","_designConfiguration$","getQuality","heightInCm","convertToCommercialUnitCentimeter","compose","removeControl","addControl","_result","configurationForm","convertToCommercialUnitMillimeter","AddArticlePageComponent_section_0_Template","skeletonViewAnimation","onNameFilterChange","getNameFilterValue","onDrawingDoubleClicked","onDrawingSelected","onVirtualScrollerEnd","listOfDrawings","allowSelectMultipleDrawings","selectedDrawings","SelectDesignComponent_section_0_ng_container_14_ng_container_1_app_drawing_list_1_Template","SelectDesignComponent_section_0_ng_container_14_ng_container_1_vdw_nodata_overlay_2_Template","hasDrawings","SelectDesignComponent_section_0_ng_container_14_ng_container_1_Template","SelectDesignComponent_section_0_ng_container_14_vdw_nodata_overlay_2_Template","canShowNoResultOverlay","SelectDesignComponent_section_0_vdw_filter_4_Template","updateAdvancedSearchFilters","drawingImageInput_r4","click","onDrawingFileChange","SelectDesignComponent_section_0_ng_container_14_Template","SelectDesignComponent_section_0_app_progress_spinner_15_Template","designTranslationKey","canShowFilterInput","loadingDrawings","canSelectDesign","_SelectDesignComponent","drawingImageUploadHelper","_data$allowSelectMult","canShowAdvancedSearch","ALLOWED_FILE_EXTENSION_FOR_FILES","DesignFileType","hasFilterActive","canGetMoreDrawings","bmpDrawingsOnly","SLICE_LENGTH","nameFilterChangeSubject","getFirstSliceOfDesigns","initializeAdvancedSearchFilters","subscribeToNameFilterChanges","updatedAdvancedSearchFilters","checkIfHasFilterActive","getDesigns","getAdvancedSearchFiltersWithRestrictions","shapeFilter","getDrawingShapes","drawingShapes","SelectDesignComponent_section_0_Template","SelectDesignComponent_app_advanced_search_1_Template","ArticleOverviewPageComponent","articleDataRouting","_ArticleOverviewPageComponent","textileDataType","loadArticles","GridColoredYarnSetPreviewComponent","exportGridForArticles","exportDataAsCsv","columnKeys","listOfArticles","OverviewListArticle","CustomerSelectionService","_CustomerSelectionService","AddCustomerComponent","_AddCustomerComponent","invalidFormFieldMessage","EDIT_PERMISSION","urlToCustomerOverview","urlToEditCustomer","labelForCustomer","invalidFormFieldMessageChangeSubject","initializeAddCustomerComponent","canShowErrorForFormControl","canShowErrorForErrorCodeAndFormControlForFormGroup","addCustomerForm","checkIfAddCustomerFormIsValidAfterTouched","saveCustomer","isEditingCustomer","deleteCustomer","isCustomerBeingUsed","canShowSkeletonView","isMobile","canShowInvalidFormFieldMessage","matErrorElement","subscribeToInvalidFormFieldMessageChanges","getCustomerId","BackendLimitsConstants","INT64_MAX","requiredTrue","setTechnicalNumberAsyncValidator","_this$currentSubscrip2","AddCustomerComponent_mat_error_19_Template","AddCustomerComponent_mat_error_20_Template","AddCustomerComponent_mat_error_21_Template","AddCustomerComponent_mat_error_28_Template","AddCustomerComponent_mat_error_114_Template","AddCustomerComponent_div_125_Template","CustomerOverviewPageComponent","customerDataRouting","_CustomerOverviewPageComponent","customerOverviewService","listOfCustomers","CustomerOverviewService","_CustomerOverviewService","withLinkIcon","nameColDef","loadingForTheFirstTime","gridOptions","OrderLinesGridComponent","_OrderLinesGridComponent","orderLinesGridService","isExporting","selectedOrderLinesChange","advancedSearchFiltersChange","exportComplete","exportGridOptions","exportData","quantityOfOrderLinesToRequestPerSlice","localStorageFilterModelKey","initialiseGridOptions","selectedOrderLines","handleSelectedOrderLinesChange","exportAllData","reloadOrderLines","orderLinesGrid","hideOverlay","refreshServerSide","purge","exportOrderLinesGrid","getFilterModel","GridModel","fetchExportData","listOfOrderlines","cacheBlockSize","onExportComplete","startRow","endRow","isGridTargetOrderbook","withHeaderHeight","withFloatingFiltersHeight","withLoadingCellRenderer","withServerSideDataSource","getServerSideDatasource","rowClickedEvent","onRowClicked","withOnRowSelected","onRowSelected","withComponents","customLoadingCellRenderer","LoadingCellOverlayComponent","noRowsOverlayComponentParams","isAnyFilterPresent","withCompactView","applyFilterModel","withOnFilterChanged","saveFilterModel","_this$selectedOrderLi","setSelected","getSelectedNodes","getRows","sortModel","listOfOrderLines","endRowOrderbook","loadingCellRendererParams","success","rowCount","setSelectedOrderLines","fail","MULTIPLE","hasSelectedOrderLines","_this$orderLinesGrid","setFilterModel","OrderLinesGridComponent_ag_grid_angular_0_Template","productionSchedule_r2","navigateToProductionScheduleDetails","OrderlineDetailsSidebarComponent_div_47_div_5_a_1_ng_container_1_Template","OrderlineDetailsSidebarComponent_div_47_div_5_a_1_ng_template_2_Template","noNameYet_r4","OrderlineDetailsSidebarComponent_div_47_div_5_a_1_Template","OrderlineDetailsSidebarComponent_div_47_div_4_Template","OrderlineDetailsSidebarComponent_div_47_div_5_Template","isLoadingOrderLine","tmp_3_0","isArticlePreviewMissingDesign","getYarnSet","OrderlineDetailsSidebarComponent","_OrderlineDetailsSidebarComponent","l10nIntlService","colorSets","orderlineDetailsSidebarClose","dentsUnit","DENTS","picksUnit","initializeOrderLine","closeOrderLineDetails","getCommercialValueInCommercialUnit","LocaleUtils","formatNumber","getTechnicalValueWithUnit","productionScheduleId","canShowProductionSchedules","getOrderLineStatusLabel","_this$orderLine","_this$orderLine$artic","_this$orderLine$artic2","getColoredYarnSet","_this$orderLine$artic3","_this$orderLine$artic4","OrderlineDetailsSidebarComponent_div_47_Template","OrderlineDetailsSidebarComponent_img_58_Template","OrderlineDetailsSidebarComponent_app_drawing_library_image_preview_59_Template","OrderlineDetailsSidebarComponent_app_colored_yarn_set_preview_103_Template","tmp_36_0","closeSelectedOrderLineDetails","getSelectedOrderLineId","deleteOrderLine","isOrderLineSelected","OrderbookOverviewPageComponent","_OrderbookOverviewPageComponent","permissionToDeleteOrderLines","orderbookIconName","orderLinesGridTarget","PERMISSION_TO_ACCESS_CUSTOM_SETTINGS","filterChangeSubject","listOfClassesThatShouldNotCloseSidebarOnClick","orderLineTranslationKey","onOutsideDetailClick","sidenav","opened","initialiseAdvancedSearchFilters","setNoRowsOverlayComponentParams","subscribeToFilterChanges","selectedOrderLine","filterText","handleBackendError","hasCustomSettingsPermission","navigateToCustomSettings","OrderbookOverviewPageComponent_app_orderline_details_sidebar_8_Template","OrderbookOverviewPageComponent_button_13_Template","OrderbookCustomSettingsComponent_div_13_mat_error_6_Template","OrderbookCustomSettingsComponent_div_13_mat_error_7_Template","index_r2","OrderbookCustomSettingsComponent","_OrderbookCustomSettingsComponent","URL_TO_ORDERBOOK_OVERVIEW","settingsForm","orderbookSettingsUniqueFieldsValidator","formArray","formControlsGroupedByLabelValue","getFormControlsGroupedByValue","_formControl$get$valu","_formControl$get$valu2","formControlValue","nonUniqueValueExists","unique","settingsControl","navigateToOrderbookOverview","OrderbookCustomSettingsComponent_div_13_Template","orderbookDataRouting","overviewListArticleForOrderLineJSON","getCommercialWidthInCommercialUnit","_isSelectable","_canBePlanned","_orderType","overviewListOrderLineJSON","_overviewListOrderLin","PathLayoutTemplateOverviewPageComponent","_PathLayoutTemplateOverviewPageComponent","pathLayoutTemplates","getPathLayoutTemplates","getColumnDefsForListOfPathLayoutTemplates","buildAgGridCellTextWithUnit","getPathsWidth","buildAgGridCellTooltipWithUnit","getTotalWidth","totalWidthInMM","AgGridUtils","listOfPathLayoutTemplates","PATH_LAYOUT_TEMPLATE","applySuggestionForPathLayoutTemplateName","suggestedPathLayoutTemplateName","PATH_WIDTH_MIN_VALUE","PATH_WIDTH_MAX_VALUE","onPathWidthDragOver","onDraggedPathWidthLeavesPathWidthItem","onDraggedPathWidthDroppedOnPathWidthItem","container_r7","onPathWidthDrag","AddPathLayoutTemplateComponent_div_39_mat_error_7_Template","AddPathLayoutTemplateComponent_div_39_mat_error_8_Template","AddPathLayoutTemplateComponent_div_39_mat_error_9_Template","removePathWidth","path_r8","AddPathLayoutTemplateComponent","_AddPathLayoutTemplateComponent","INT32_MAX","isLoadingPathLayoutTemplate","PATH_LAYOUT_TEMPLATE_TRANSLATION_KEY","URL_TO_PATH_LAYOUT_TEMPLATE_OVERVIEW","PATH_TO_EDIT_PATH_LAYOUT_TEMPLATE","PATH_TO_ADD_PATH_LAYOUT_TEMPLATE","classNameForDropIndicator","dragPreviewElementWidth","classNameForPathWidthItem","initialisePathLayoutTemplate","getPathLayoutTemplateToSave","isEditingPathLayoutTemplate","addPathWidth","addPathLayoutTemplateForm","getPathWidthFormArray","savePathLayoutTemplate","pathLayoutTemplateToSave","isPathWidthsTitleInvalid","pathWidthsForm","arePathWidthsFormControlsInvalid","_this$activatedRoute","isAddingPathLayoutTemplate","_this$activatedRoute2","deletePathLayoutTemplate","pathWidthIndex","draggedPathWidthItemDifferentFromTargetItem","draggedPathWidthIndex","addPathWidthItemDropIndicator","removePathWidthItemDropIndicator","canShowSuggestionForPathLayoutTemplateName","_this$suggestedPathLa","_this$getPathWidthFor","productionScheduleItemElementboundingDOMRect","pathWidthItemDropIndicator","pathWidthItemElement","pathWidthItemElementboundingDOMRect","_this$addPathLayoutTe","_this$addPathLayoutTe2","_this$addPathLayoutTe3","setFormFieldsValues","withName","checkPermissionToEdit","pathLayoutTemplateState","pathLayoutTemplateId","AddPathLayoutTemplateComponent_mat_hint_15_Template","AddPathLayoutTemplateComponent_mat_error_16_Template","AddPathLayoutTemplateComponent_mat_error_17_Template","AddPathLayoutTemplateComponent_mat_error_23_Template","AddPathLayoutTemplateComponent_div_39_Template","nameGeneratorSeparator_r1","PathLayoutTemplateSettingsComponent","_PathLayoutTemplateSettingsComponent","toastHelperService","pathLayoutTemplateCustomSettingsForm","getCustomSettingsAndNameGenerationProperties","_this$generateNameCon","generateNameConfiguration","showToastForObjectAction","ObjectActionType","getKeysOfNameGeneratorSeparator","_this$generateNameCon2","PathLayoutTemplateSettingsComponent_mat_option_14_Template","pathLayoutTemplateRouting","FixedSchedulePlaceholderComponent","_FixedSchedulePlaceholderComponent","SMALL_ITEM_THRESHOLD","shouldShowSmallInfo","toSignal","contentRect","initialValue","FixedSchedulePlaceholderComponent_Conditional_0_Template","PlanningOrderTooltipComponent_Conditional_10_Conditional_0_Template","PlanningOrderTooltipComponent_Conditional_10_Conditional_1_Template","differentConfig","pastDue","PlanningOrderTooltipComponent","_PlanningOrderTooltipComponent","_this$order$productio","_this$order$productio2","_this$order$productio3","order","runTitle","statusName","productChanges","sortedPlanningItemForecasts","PlanningOrderTooltipComponent_Conditional_10_Template","getIconNameForProductionOrderStatus","getProductionOrderStatus","PlanningOrderComponent","_PlanningOrderComponent","planningGroup","SMALL_ORDER_THRESHOLD","onMouseEnter","openDetailsTooltip","closeDetailsTooltip","groupText","_this$dialogBuilder","hostBindings","PlanningOrderComponent_ng_container_0_Template","PlanningOrderComponent_ng_template_1_Template","smallEllipsis_r2","MachineGroupFilterComponent","_MachineGroupFilterComponent","planningFilterService","formattedMachineGroups","gridOptionsBuilder","selectionCache","getDataPath","hierarchy","onSelectionChanged","changed","allSelectedGroups","getRowId","onGridReady","gridReady","selectedMachineGroups","initGridOptions","updateSelectedMachineGroups","NEVER","autoGroupColumnDef","withTreeData","withOnSelectionChanged","MaintenanceComponent","_MaintenanceComponent","getIconName","maintenance","openFixedSchedules","getShiftName","shift_r5","regime_r6","shiftStart","shiftEnd","PlanningPrototypeComponent_For_22_For_2_Template","PlanningPrototypeComponent_For_24_For_2_ng_container_0_Template","itemTemplate_r10","item_r9","PlanningPrototypeComponent_For_24_For_4_ng_container_0_Template","PlanningPrototypeComponent_For_24_Conditional_5_ng_container_0_Template","child_r15","getOrderIsPastDue","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_0_For_2_ng_template_0_Conditional_0_Template","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_0_For_2_ng_template_0_Conditional_1_Template","planningItemIsFixedSchedulePlaceholder","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_0_For_2_ng_template_0_Template","_r14","onDragMove","selectItem","NEW_RUN_TEXT","_r12","item_r13","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_0_For_2_Template","getIsDifferentConfig","getPlanningItemDisplayName","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_1_ng_template_0_Template","_r16","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_0_Template","PlanningPrototypeComponent_For_24_ng_template_6_Conditional_1_Template","getPlanningItemIsGroup","machine_r8","selectMachine","PlanningPrototypeComponent_For_24_For_2_Template","_forTrack1","PlanningPrototypeComponent_For_24_For_4_Template","PlanningPrototypeComponent_For_24_Conditional_5_Template","PlanningPrototypeComponent_For_24_ng_template_6_Template","getIconForMachineType","getPlanningItemsForMachine","getHistoryForMachine","tmp_18_0","getItemCreationPlaceholder","_PlanningPrototypeComponent","PlanningPrototypeComponent","planningContext","planningDragDrop","planningUpdates","toastHelper","realtimeProductionOrder","realtimeProductionOrderLite","dateTimePipe","FILTER_SETTINGS_COMPONENT","updatedPlanningLines","regimes","translationForUnknownItem","INTERVAL_WAIT_ON_INITIALIZED","INTERVAL_AGGREGATE_BACKEND_UPDATES","INTERVAL_AUTO_REFRESH_FORECASTS","DEBOUNCE_AGGREGATE_TO_PLAN_UPDATES","loadInitialData","fetchUpdatedForecastsWhenPlanningLinesAreUpdated","trackUpdatedPlanningLines","listenToSaveEventEmitter","applyRequiredChangesOnBackendUpdates","loadHistoryData","planningForecast","toJSDate","mergeHistoryData","planningItemsByMachine","canShowFixedSchedules","fixedSchedulesToPlan","planningLinesByMachine","planningHistory","planningItem","getForecastForPlanningItem","_PlanningItemHelper$g","_item$creel$name","_item$creel","_item$quality$name","_item$quality","openToPlan","ordersToPlan","saveChanges","updatePlanningItemIds","openNewItemForm","selectedItem","stopImmediatePropagation","itemCreationPlaceholder","HOUR_IN_MS","machinesByPlanningItem","regime","fromISO","DateTimeFormat","TIME_SIMPLE","dateRangeChanged","machineOverviewSettings","planningGrid","rootGroup","storedFilter","sortedPlanningItemForecastsNew","storedData","getEmptyDataForNavigationHelper","haveSameContent","initRegimes","initPlanningObservable","planningLineChanges","line","allChanges","buffer","removeEmptyItems","concatMap","updateForecasts","poChanges","getProductionOrdersStatusChanges","itemToUpdate","getFlatListOfPlanningItems","orderToUpdate","poLiteChanges","getProductionOrdersLiteStatusChanges","sequenceChanges","timing","dragActive","regimesValue","observable","mergeUpdatedPlanning","PlanningGridComponent","machineFilterSettingsButton_r2","PlanningPrototypeComponent_Conditional_11_Template","PlanningPrototypeComponent_Conditional_17_Template","PlanningPrototypeComponent_For_22_Template","PlanningPrototypeComponent_For_24_Template","_forTrack0","planningPrototypeRouting","PlanningPrototypeSidebarComponent","_PlanningPrototypeSidebarComponent","sideNav","CLASSES_THAT_SHOULD_NOT_CLOSE_SIDEBAR","selectedItemIsMachine","selectedItemIsPlanningItem","showOrdersToPlan","showItemCreation","showFixedSchedulesToPlan","onSelectedItemChanged","activeElement","HTMLElement","blur","selectedItemChanges","onClickOutsideSidebar","PlanningPrototypeSidebarComponent_Conditional_0_Template","PlanningPrototypeSidebarComponent_Conditional_1_Template","PlanningPrototypeSidebarComponent_Conditional_2_Template","PlanningPrototypeSidebarComponent_Conditional_3_Template","PlanningFilterService","_PlanningFilterService","_filterChanged","_storedFilter","flattenedGroup","flattenGroup","formatMachineGroups","subGroup","PlanningItemDragDropService","_PlanningItemDragDropService","newRunText","asMilliseconds","planningItemData","PlanningItemData","draggable","planningGroupData","PlanningGroupData","class","startPositionInContainer","bodyContainer","scrollLeft","clientY","bodyContainerOffset","scrollTop","dragEndEvent","dragEnd","drag","draggedItem","targetRow","sourceList","targetList","sourceLine","targetLine","readDragDropData","addNewRunIfRequired","removeItemFromList","addItemToList","targetTime","updateEstimatedProductionTime","setEarliestStartDate","shiftKey","reduceFlickeringBySettingATemporaryForecastOnDropLocation","updatedMachines","markAsChanged","isItemCompatible","setDragIcon","_data$sourceRow","_data$targetItem","_data$sourceGroup","_sourceItem$planningI","_targetItem$planningI","targetMachine","sourceMachine","sourceRow","sourceItem","sourceGroup","isFixedScheduleCompatibleWithTarget","child","isTargetMachineCompatible","oldForecast","tempEnd","difference","fixedScheduleToPlan","targetRun","PlanningPrototypeContextService","_PlanningPrototypeContextService","_machineChanges","_selectedItemChanges","getMachinesFromForecast","getPlanningItemsByMachine","recalculateProductChanges","getMachinesByPlanningItem","flatList","plannedOrder","_plannedOrder$compati","mach","updatedPlanningLine","mergeUpdatedPlanningLine","removeItemsNotToPlan","_parent$planningItems","_parent$planningItems2","_this$planningForecas","_this$planningForecas2","planningLineId","_this$planningHistory","_this$planningForecas3","_this$planningForecas4","historyUpdate","itemUpdate","setMachineForPlanningItems","itemToRemove","draggedItemIndex","itemsToUpdate","itemsToRemove","asHours","parentList","itemToAdd","_itemBeforeTarget$seq2","itemsBeforeTarget","itemBeforeTarget","itemsAfterTarget","_itemBeforeTarget$seq","getEmptyDataOfPlanningItemSidebarForNavigationHelper","createItemMode","maintenanceTypes","machinesWithDuplicates","runs","lastRun","run","updatedItems","updatedChild","existingItem","existingItemParent","activeItem","topLevelItem","ConfirmProductionOrderDeletionCommand","_ConfirmProductionOrderDeletionCommand","MachineFilterSettingsComponent","_MachineFilterSettingsComponent","_data$containerTitle","_data$maxHeight","filterOptionsChanges","selectListOptions","containerTitle","maxHeight","PLANNING_SCHEDULER","RemovePlanningOrderCommand","sourceGroupedCalendarItem","groupedCalendarItems","adjustRunRunningTime","removedPlanningOrder","runEndDate","groupedCalendarItem","ProductionOrderCarpetForPlanningOrderStubFactory","getRandomProductionOrder","getRandomWithIdAndDueDate","getRandomProductionOrderWithStatusValue","getRandomProductionOrderWithIdAndStatusValue","getRandomProductionOrderWithIdMachineQualityIdAndCreelId","getRandomWithIdAndName","ProductionOrderTuftingForPlanningOrderStubFactory","getRandomProductionOrderTuft","getRandomProductionOrderTuftWithIdAndStatus","getRandomProductionOrderTuftWithIdAndTuftProductId","getRandomProductionOrderTuftWithIdAndDueDate","getRandomProductionOrderTuftWithYield","productYield","ProductionOrderWeavingForPlanningOrderStubFactory","getRandomProductionOrderLiteWithIdAndStatusValue","getRandomPlanningWeaveProduct","getRandomProductionOrderLiteWithStatusValue","getRandomProductionOrderLiteWithIdAndDueDate","getRandomProductionOrderLite","getRandomProductionOrderLiteWithIdAndWeaveProductId","PlanningOrderStubFactory","getRandomPlanningOrder","getRandomPlanningOrderWithId","getRandomWithIdStartDateEndDateAndProductionOrderWithDueDate","getRandomWeavingWithIdStartDateEndDateAndProductionOrderWithDueDate","getRandomTuft","getRandomTuftingWithIdStartDateEndDateAndProductionOrderWithDueDate","getRandomPlanningOrderThatContainsProductionOrderWithStatusValue","productionOrderStatus","getRandomPlanningOrderThatContainsProductionOrderLiteWithStatusValue","getRandomPlanningOrderWithEfficiency","getRandomPlanningOrderWithProductionOrder","getRandomPlanningOrderWithIdAndProductionOrder","PlanningContextService","_PlanningContextService","planningScheduler","machinesForSelectedPlanningGroups","isOnboardingRunning","isDragAndDropActive","unplannedOrderItem","resetSelectedVariables","selectedMachine","selectedPlanningItem","selectedPlanningOrderId","canEditPlanningItem","canEdit","canReschedulePlanningItem","isUpdating","canEditPlanningOrder","hasPermissionToEditOrder","canEditMachineRun","machineRun","_machineRun$planningO","getCurrentDateForSubscriptionTimezone","hasMachinePlanningItemPlaceholder","selectedPlaceholder","hasMachineMachineRunPlaceholder","_this$selectedMachine2","currentDate","isPlanningItemExecuting","isSameOrBefore","_this$currentSubscrip3","PlanningDragDropChangesService","_PlanningDragDropChangesService","unsubscribeOnViewDestroy","eventData","unplannedOrderDragEnd","unplannedOrderDrag","onPlanningItemDragStart","dragDropData","draggedPlanningItem","onPlanningOrderDragStart","draggedPlanningOrder","originalParentRun","planningItemDragEnd","_this$planningContext","destinationMachine","destinationGroup","executingRun","executingRunForPlanningGroup","rescheduleItems","onPlanningOrderDragEnd","_dragDropData$targetI","destinationRun","_this$planningContext2","addPlannedPlanningOrderToNewRun","getPlanningOrderPositionOnDragEnd","reschedulePlanningOrder","planningOrderDragEnter","_dragDropData$targetR","_dragDropData$targetI2","_dragDropData$sourceG","sourceRun","validateTargetRun","planningRunDragEnter","_dragDropData$targetR2","sidebarUnplannedOrderDragStart","unplannedOrder","viewContainerRef","planningGridDisplay","_eventData$targetRow","_eventData$targetItem","draggedOrderData","validateTargetRunForOrder","_dragDropData$targetR3","_dragDropData$targetI3","_this$planningContext3","addUnplannedPlanningOrderToNewRun","removeUnplannedOrderFromNeedsAttentionSidebar","pos","addUnplannedPlanningOrderToRun","resetPlanning","_this$needsAttentionS","needsAttentionSidebar","removeProductionOrderWeaving","_this$needsAttentionS2","removeProductionOrderCarpet","_this$needsAttentionS3","removeProductionOrderTufting","_dragDropData$targetC","targetGroup","targetChildItem","foundIndex","itemData","defaultResult","_targetRun$weaveProdu","_targetRun$creel","_targetRun$machineQua","_targetRun$tuftProduc","_targetRun$creel2","_targetRun$machineQua2","_targetRun$weaveProdu2","_targetRun$tuftProduc2","PlanningOnboardingService","_PlanningOnboardingService","onboarding","DEMO_ITEM_ID","initializeOnboarding","gridDisplay","planningSidebars","startOnboarding","dialogDate","createStubHtmlElement","updateOnboardingDialog","handleOnboardingAddItemStep","handleOnboardingViewDetailsStep","handleOnboardingDragAndDropStep","handleOnboardingCompletion","unshift","getDemoEntityTranslation","creelName","orderName","machineQualityName","creelForDemoMachine","machineQualityForDemoMachine","productionOrderForDemoMachine","planningOrderForDemoMachine","planningItemForDemoMachine","calendarItemGroupForDemoMachine","demoMachine","openPlanningItemDetails","demoPlanningItem","newEndDate","hourInterval","newStartDate","closeSidebar","positionX","getLeftPercentForDate","rowWidth","ROW_INDICATOR_WIDTH","COLUMN_HEADER_HEIGHT","_this$planningDragDro","hourIndicator","hide","entityKey","calculateRowWidth","calculateBodyContainerOffset","PlanningRealtimeChangesService","_PlanningRealtimeChangesService","sidebarManager","sideBars","planningSideBars","selectedDateRange","planningSidebarManager","updateGroupedCalendarItems","updatedGroupedCalendarItems","updatedGroupedCalendarItem","calendarItems","isItemSelectedItem","isItemInSelectedRange","removeOutdatedPlanningItem","groupedCalendarItemToUpdate","updateItemInCalendarItemGroup","setGroupedCalendarItems","planningItemUniqueId","predicate","updateItem","planningItemIndex","removePlanningItemFromGroupedCalendarItems","deletedItem","calendarItemGroup","originalSize","isSidebarTypePlanningItem","showToastForDeletedPlanningItem","updatePlanningOrderStatus","isWeaving","calendarItem","foundPlanningOrder","PlanningSidebarManager","_opened","setSidebarSizeAsSmall","setSidebarSizeAsLarge","isSidebarTypeMachine","PlanningSidebarType","PLANNING_ITEM","isSidebarTypePlanningOrder","PLANNING_ORDER","isSidebarTypeNeedsAttention","NEEDS_ATTENTION","onMachineFilterChanged","machineFilterSettingsButton_r3","machineFilterSettingsComponent","getMachineFilterDialogData","openNeedsAttentionOrders","selectedDateRangeChanged","fallbackMachineGroupId","PlanningComponent","_PlanningComponent","planningOnboarding","realtimeChanges","realtimePlanning","loadingMachines","planningGroupFilter","MACHINES_FILTER_KEY","CARPET_QUEUE_PERMISSION","WEAVE_QUEUE_PERMISSION","TUFT_QUEUE_PERMISSION","getRegimes","getMachines","canShowNoDataOverlay","selectedGroups","storePlanningGroupFilter","updateMachinesForSelectedPlanningGroupsList","showMachineFilterButton","_this$planningGroupFi","canShowOpenNeedsAttentionOrders","updatePlanningGroupFilter","subscribeToPlanningChanges","getPlanning","lastMachineWithGroup","concat","initialized","onboardingStarted","onPlanningChanges","planningGridDisplayParentXPosition","initializeRealtimeChangesService","initializeAndStartOnboarding","navigateToTexFab","addPlaceholder","canAddItemForMachineType","subscribeToRealtimePlanningChanges","subscribeToRealtimeDeletedPlanningItems","subscribeToRealtimeProductionOrderStatusChanges","subscribeToRealtimeProductionOrderLiteStatusChanges","getPlanningChanges","getDeletedPlanningItem","deletedPlanningItem","productionOrderStatusChange","productionOrderLiteStatusChange","getStoredPlanningGroupFilter","allGroups","undefinedIndex","_storedFilter$find$va","_storedFilter$find","selectionItem","_this$planningGroupFi2","enabledGroups","fallbackGroupName","_machine$group$name","_machine$group","emptyDateRangeState","dateRangeState","PlanningSidebarsComponent","onSidebarOpenedChange","PlanningComponent_vdw_dialog_button_7_Template","PlanningComponent_button_8_Template","PlanningComponent_article_11_Template","PlanningComponent_article_12_Template","PlanningComponent_article_13_Template","planningRouting","dueDateAndPlannedAmountText","plannedAmountText","OrderInfoComponent","_OrderInfoComponent","productionOrderCarpet","productionOrderTufting","yieldUnit","yieldUnitShouldHaveASpace","DATE_SHORT","ellipsisLabelText","OrderInfoComponent_p_2_Template","OrderInfoComponent_p_3_Template","PlannedOrderCardComponent","_PlannedOrderCardComponent","httpProductionOrderCustomSettings","confirmProductionScheduleOnDesktopCommand","plannedOrderReconfirmed","viewPlannedOrderDetails","reconfirming","reconfirm","productionOrdersCustomSettings","productionOrderCustomSettings","getAndReconfirmProductionOrder","viewDetails","getAndConfirmProductionSchedule","confirmProductionScheduleOnDesktopResult","ConfirmProductionScheduleOnDesktopResult","CONFIRMED","UnplannedOrderCardComponent","_UnplannedOrderCardComponent","deleteUnplannedOrder","unplannedOrderDragStart","isBeingDragged","hostVars","needsAttentionItem_r5","onUnplannedOrderDragStart","onUnplannedOrderDrag","onUnplannedOrderDragEnd","planningOrderId","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_ng_container_1_app_unplanned_order_card_1_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_ng_container_1_app_planned_order_card_2_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_ng_container_1_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_ng_container_2_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_ng_container_3_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_ng_container_2_Template","filteredNeedsAttentionItems","virtualScroller_r9","nameFilterTextChanged","filterNeedsAttentionProductionOrders","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_virtual_scroller_7_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_ng_template_8_Template","hasFilteredProductionOrders","noResultsOverlay_r10","NeedsAttentionSidebarComponent_ng_template_6_ng_container_0_Template","NeedsAttentionSidebarComponent_ng_template_6_ng_template_1_Template","hasProductionOrders","noDataOverlay_r11","NeedsAttentionSidebarComponent","_NeedsAttentionSidebarComponent","productionOrdersWeaving","productionOrdersTufting","confirmProductionOrderDeletionCommand","closeNeedsAttentionSidebar","selectPlanningOrder","loadingProductionOrders","filterNeedsAttentionItem","needsAttentionItem","applySearchFilter","getOrdersThatRequireAttention","needsAttentionItems","unplannedItem","_unplannedItem$produc","_unplannedItem$produc2","_unplannedItem$produc3","filterFn","_needsAttentionItem$p","_needsAttentionItem$p2","_needsAttentionItem$p3","nameFilter","iconElement","_orderData$name","_advancedSearchFilter","NeedsAttentionSidebarComponent_vdw_loading_overlay_5_Template","NeedsAttentionSidebarComponent_ng_template_6_Template","productionOrdersLoaded_r12","openPlanningOrderDetails","unplannedOrderTemplate_r3","planningDragDropChanges","deletePlanningItem","savePlanningItem","onPlanningItemChange","deletePlanningOrder","_PlanningSidebarsComponent","sidebar","removePlanningOrderCommand","classesThatShouldNotCloseSidebar","emptyState","sidebarType","sidebarPlanningItem","sidebarPlanningMachine","sidebarPlanningOrderId","previousState","openMachineDetails","onOutsideSidebarClick","closed","resetSidebar","sidebarShouldBeLarge","replacePlanningItemInGroupedCalendarItem","planningItemType","getCachedGroupedCalendarItem","addNewPlanningItem","foundOrder","findSelectedPlanningOrder","updatedPlanningItem","groupedItem","PlanningSidebarsComponent_app_needs_attention_sidebar_0_Template","PlanningSidebarsComponent_app_machine_detail_sidebar_1_Template","PlanningSidebarsComponent_app_planning_item_sidebar_2_Template","PlanningSidebarsComponent_app_planning_order_detail_sidebar_3_Template","PlanningSidebarsComponent_ng_template_4_Template","HttpPlasticProductionOrdersCustomSettingsService","_HttpPlasticProductionOrdersCustomSettingsService","PlasticProductionOrderCustomSettingsComponent","_PlasticProductionOrderCustomSettingsComponent","plasticProductionOrderCustomSettings","setTabs","closeDialog","selectedTab","addPlasticProductionOrderGeneralForm","AddPlasticProductionOrderPageComponent","_AddPlasticProductionOrderPageComponent","plasticProductionOrders","plasticProductionOrdersCustomSettings","toolSelectionService","plasticProductSelectionService","machineOverviewService","matchingCriteriaOverviewService","MIN_DUE_DATE","customSettingsUpdated","setGeneralFormFields","setBuilderConfigForMachine","setBuilderConfigForMachineGroup","plasticProductionOrderId","setCurrentProductionOrder","currentProductionOrder","plasticProductionOrderToSave","isEditingPlasticProductionOrder","PLASTIC_PRODUCTION_ORDER","duplicatePlasticProductionOrder","deletePlasticProductionOrder","selectProduct","_this$addPlasticProdu","_this$addPlasticProdu2","product","activeTab","selectObjectWithNavigationHelper","machineConfig","selectMachineGroup","machineGroupConfig","selectTool","_this$addPlasticProdu3","_this$addPlasticProdu4","getQuantitySuffixTranslationKey","_product$unitOfMeasur","_this$currentProducti","applyNameSuggestion","_this$currentProducti2","_this$currentProducti3","isDuplicatingPlasticProductionOrder","getConfig","getColDefForMachineGroup","gridIdentifier","configureBuilder","fieldName","_this$addPlasticProdu5","_this$addPlasticProdu6","_this$addPlasticProdu7","dataObservable","i10","i11","AddPlasticProductionOrderPageComponent_vdw_invalid_form_message_12_Template","AddPlasticProductionOrderPageComponent_vdw_invalid_form_message_13_Template","AddPlasticProductionOrderPageComponent_mat_error_29_Template","AddPlasticProductionOrderPageComponent_Conditional_35_Template","AddPlasticProductionOrderPageComponent_mat_error_40_Template","AddPlasticProductionOrderPageComponent_mat_error_41_Template","AddPlasticProductionOrderPageComponent_mat_error_42_Template","AddPlasticProductionOrderPageComponent_Conditional_73_Template","AddPlasticProductionOrderPageComponent_mat_error_77_Template","AddPlasticProductionOrderPageComponent_Conditional_83_Template","AddPlasticProductionOrderPageComponent_mat_error_87_Template","AddPlasticProductionOrderPageComponent_mat_error_88_Template","tmp_57_0","_PlasticProductionOrderOverviewPageComponent","PlasticProductionOrderOverviewPageComponent","ProductionScheduleOverviewStatusComponent","navigateWithRoute","plasticProductionOrderRouting","SelectWeaveProductComponent","_SelectWeaveProductComponent","weaveProducts","gridOptionsForListOfWeaveProducts","getWeaveProducts","initializeGridOptionsForListOfWeaveProducts","_this$weaveProductsGr","weaveProductsGrid","selectWeaveProduct","canSelectWeaveProduct","_this$weaveProductsGr2","navigateToAddWeaveProduct","_this$machineId","getColumnDefsForListOfWeaveProducts","listOfWeaveProducts","PICKS_PER_CENTIMETER","ROTATIONS_PER_MINUTE","overviewListWeavingMachineJSON","fromMachineSummary","ProductionOrderWeavingOverviewPageComponent","_ProductionOrderWeavingOverviewPageComponent","realtimeProductionOrdersLite","listOfProductionOrdersWeaving","subscribeToProductionOrderLiteUpdates","getColumnDefsForListOfProductionOrdersWeaving","_params$data$machine","getValueWithMeter","updateProductionOrderLiteStatus","textileDataOverview","_node$data","applySuggestionForProductionOrderWeavingName","suggestedProductionOrderWeavingName","AddProductionOrderWeavingPageComponent","_AddProductionOrderWeavingPageComponent","translationKeyForProductionOrder","MACHINE_BASE_ROUTER_LINK","WEAVE_PRODUCT_BASE_ROUTER_LINK","URL_TO_PRODUCTION_ORDER_OVERVIEW","URL_TO_EDIT_PRODUCTION_ORDER_WEAVING","URL_TO_DUPLICATE_PRODUCTION_ORDER_WEAVING","QUEUE_PERMISSION","getUnsavedChangesNotifierEmitValue","setProductionOrderWeavingForm","emptyProductionOrderWeavingState","productionOrderWeavingState","isEditingProductionOrderWeaving","isDuplicatingProductionOrderWeaving","isAddingProductionOrderForRun","initializeForRun","isAddingProductionOrderForMachine","initializeForMachine","initializeWithProductionOrderWeavingState","getCurrentProductionOrderWeaving","hasChosenProperty","getChosenProperty","getControlDisabled","addProductionOrderWeavingForm","SelectMachineComponent","allowedMachineTypes","selectedWeaveProductId","selectedMachineId","selectedWeaveProduct","clearMachineValue","getEarliestPossibleDueDate","saveProductionOrderWeaving","productionOrderWeavingToSave","editProductionOrderWeaving","addProductionOrderWeaving","duplicateProductionOrderWeaving","deleteProductionOrderWeaving","hasPermissionToEditProductionOrderWeaving","canShowDelete","canDisableForm","canShowSuggestionForProductionOrderWeavingName","_this$suggestedProduc","canQueue","backendError","_error$errorContext","showProductionOrderIncompatibleWithMachineAlert","_error$errorContext$l","_error$errorContext$l2","productionOrderName","translationParams","amountOfCompatibleMachines","compatibleMachinesList","dialogResult","showToast","productionOrderWeavingName","hasQueuePermission","_this$addProductionOr","getSuggestionForProductionOrderWeavingName","_this$addProductionOr2","setWeaveProduct","navigateToPlanning","machineSummary","weaveProductControl","machineControl","endsWith","_this$currentSubscrip4","AddProductionOrderWeavingPageComponent_mat_hint_12_Template","AddProductionOrderWeavingPageComponent_mat_error_13_Template","AddProductionOrderWeavingPageComponent_mat_error_14_Template","AddProductionOrderWeavingPageComponent_mat_error_15_Template","AddProductionOrderWeavingPageComponent_mat_error_35_Template","AddProductionOrderWeavingPageComponent_mat_error_46_Template","AddProductionOrderWeavingPageComponent_mat_error_47_Template","ProductionOrderWeavingSettingsComponent","_ProductionOrderWeavingSettingsComponent","productionOrderWeavingCustomSettingsForm","ProductionOrderWeavingSettingsComponent_mat_option_14_Template","productionOrderWeavingRouting","onClickEvent","onProductionSchedulePhaseClicked","onPathContentSettingsDialogDataChanged","getHeaderIcon","productionScheduleInitialPreparationsForm","getMenuItemsLoadingProperties","currentProductionSchedulePhase","productionScheduleToAdd","getInvalidFormMessageError","getMenuItemsCanShowProperties","areAllFieldsDisabled","pathContentSettingsDialogData","initialPreparationsChanged","restZoneLoaded","freeZoneLoaded","pathZoneLoaded","juteZoneLoaded","setHeaderVisibility","listOfMachineQualityCustomSettings","preselectedOrderlineIdsChanged","preselectedDrawingsChanged","preselectedDrawingIdsChanged","preselectedConfigurationIdsChanged","preselectedOrderlineIds","addProductionScheduleNavigationState","preselectedDrawings","setProductionSchedulePhase","productionSchedulePlanChanged","productionScheduleVerified","lastProductionSchedulePhase","isVerifyingFromConfigurePhase","AddProductionScheduleNewPageComponent","BaseAddProductionScheduleNewPageComponent","productionSchedulePlan","addProductionSchedule","productConfigurations","temporaryStateService","drawingLibraryHelper","orderlinesHelper","isRunningInitialPreparations","isRunningInitialPreparationsToDesigns","verifyingProductionSchedule","isLoadingProductionSchedule","completingProductionSchedule","decreatingProductionOrder","pathContentPanelEnabled","isPreselectionMade","justInitialized","saveButtonClicked","headerVisible","showSkeletonViewForToolbar","initialRestZoneLoaded","initialFreeZoneLoaded","initialPathZoneLoaded","initialJuteZoneLoaded","nextButtonTouched","confirmingProductionSchedule","localstoragePathContentPanelEnabledKey","canLeavePageAfterCheckingGuard","redirectToBuildStatuses","getRouteStateProperties","isCurrentRouteEditProductionScheduleRoute","isCurrentRouteDuplicateProductionScheduleRoute","setProductionScheduleInitialPreparationsFormFields","setPathContentSettingsDialogData","initialiseAddProductionSchedule","navigationHelperState","_this$initialPreparat","setFilterModelsToZero","initialPreparationsComponent","getConfiguredProductionSchedule","canShowInitialPreparationsForProductionSchedule","canShowPreselectionForProductionSchedule","selectedDrawingsChanged","listDrawings","notifyChangesToInitialPreparationsForm","hideHeader","productionScheduleInitialised","emptyProductionSchedulePhaseState","productionSchedulePhaseState","phase","removePathLabelsForBuilderStep","setCorrectProductionSchedulePhaseAfterInitialization","updateProducedAmount","updateProductionScheduleItemInPathGroupStatus","setProductionScheduleInitialPreparationsFormFieldsValues","productionSchedulePhaseOrderMap","BidirectionalMap","canShowProductionSchedulePlan","confirmImmediately","confirmProductionSchedule","navigateToOverview","PRODUCTION_SCHEDULE_OVERVIEW_URL","_this$productionSched3","_this$productionSched4","_this$productionSched5","_this$productionSched6","_this$productionSched7","_this$productionSched8","_this$productionSched9","isDuplicatingProductionOrder","validateConfigurePhaseForms","navigateBackFromVerify","isLoading","preselectionLoading","nextPhaseLoading","isNextPhaseLoading","completeLoading","decreateLoading","_this$productionSched10","canShowNavigateToNextPhaseButton","canShowProductionScheduleNavigationForPhases","canShowCompleteButton","canShowDecreatedButton","canShowCancelButton","disableUnsavedChanges","PLAN_ADJUSTMENT_NEEDED","updateWithMachineQualityChanged","canShowSkeletonViewForToolbar","canConfirmProductionSchedule","isDirty","hasUnsavedBuildingChanges","hasUnsavedChanges","_this$productionSched11","canNavigateToNextPhase","saveConfigurationPhaseFromLeaveDialog","formsAreValid","getProductionSchedule","isCreatingNewProductionSchedule","createProductionSchedule","qualityHasChanged","initialPreparationsCompleted","navigateToNextPhase","preselectionListId","createNewPreselectedOrderlinesAndDrawingsList","updatePreselectedOrderlinesAndDrawings","productionSchedulePlanComponent","verifyProductionSchedule","_this$productionSched12","isVerifyingProductionSchedule","navigateToPreselection","completeProductionSchedule","completePartially","decreateProductionOrder","decreatedProductionOrder","_this$productionSched13","_this$productionSched14","ProductionScheduleClickEvent","NEXT_PHASE","DECREATE","saveProductionSchedule","SaveTypeForProductionSchedule","SAVE_AND_GO_TO_PRESELECTION","SAVE_AND_QUIT","CANCEL","getTemporaryState","TemporaryStateKey","handleConfigurePhase","isEditingProductionOrder","orderlineIds","drawingIds","_this$initialPreparat2","zonesLoaded","validateForms","hasStatusThatShouldBeSentToVerifyStep","cancelOngoingRecoloring","manualSaveProductionSchedule","getNewScheduleWithOldScheduleInformation","goToPreselection","nextPhase","updatePreselectionList","savePreselectionList","_this$initialPreparat3","oldQualityId","oldMachineQuality","_this$initialPreparat4","_this$productionSched15","canVerify","routeToNextRoute","practicalPickDensityUnit","getDefaultParameterForPropertyNameOfMachineQualitySettings","practicalPickDensityInPicksInMM","initialiseProductionSchedulePathsOfColoredYarnSets","navigateToEditProductionSchedule","startRoute","getPreselectedOrderlinesAndDrawings","getPreselectionListById","preselectionParameters","orderlinesIds","getPreselectedDrawings","_this$preselectedDesi","_this$preselectedDesi2","_this$preselectedConf","_this$preselectedConf2","getAllWithoutImageDataFromGridModel","setProductionSchedulePlan","requests","stopRunningInitialPreparationsAndThrowError","alreadyAdjustedDefaultParameters","customSettingsForProductionScheduleChosen","preselectionState","emptyProductionScheduleState","productionScheduleState","hasProductionScheduleState","initialiseNewProductionSchedule","initialiseExistingProductionSchedule","currentUpdatedProductionSchedule","isAddingProductionOrderForProductConfiguration","makePreselectionListFromProductConfiguration","_this$productionSched16","emptyProductionScheduleNameState","productionScheduleNameState","hasProductionScheduleNameState","MAX_LENGTH_FOR_PRODUCTION_ORDER_NAME","getProductionScheduleObservable","getDuplicatedProductionOrder","setExistingProductionSchedule","isDuplicatingProductionSchedule","getDesignsAndOrderLines","duplicateProductionSchedule","_this$activatedRoute$","EDIT_PRODUCTION_SCHEDULE_URL","DUPLICATE_PRODUCTION_SCHEDULE_URL","adjusted","alreadySetUpDefaultParameters","duplicatedProductionSchedule","markAsDirty","cancelTemporarySavedChanges","_this$addProductionSc","_this$activatedRoute$2","paramMap","_AddProductionScheduleNewPageComponent","PRODUCTION_SCHEDULE_PLAN","AddProductionScheduleNewPageComponent_vdw_tabs_menu_card_1_Template","AddProductionScheduleNewPageComponent_div_3_Template","AddProductionScheduleNewPageComponent_app_production_schedule_new_drawing_library_4_Template","AddProductionScheduleNewPageComponent_app_production_schedule_plan_new_5_Template","AddProductionScheduleNewPageComponent_vdw_loading_overlay_6_Template","defaultProductionOrderSettings","selectedOrderlinesChanged","AddProductionSchedulePageComponent","BaseAddProductionSchedulePageComponent","productionOrders","canShowDesignsForProductionSchedule","canShowToDesignsButton","canShowVerifyAndConfirmButton","verifyAndConfirm","navigateToDesigns","completeProductionOrder","VERIFY_AND_CONFIRM","hasPermissionToNavigateToNewBuilder","saveDesignsAndOrderLines","applyMeasurementsCalculationsFactor","_AddProductionSchedulePageComponent","AddProductionSchedulePageComponent_div_3_Template","AddProductionSchedulePageComponent_app_production_schedule_drawing_library_4_Template","AddProductionSchedulePageComponent_app_production_schedule_plan_5_Template","AddProductionSchedulePageComponent_vdw_loading_overlay_6_Template","AddProductionScheduleService","_AddProductionScheduleService","isInitialPreparationsFormDirty","hasInitialPreparationsFormChanged","_BaseAddProductionScheduleNewPageComponent","ADD_PRODUCTION_SCHEDULE_URL","isAddingProductionOrder","isAddingAnyTypeOfProductionOrder","isAddingProductionOrderForType","isAddingAnyTypeOrDuplicatingOfProductionOrder","getDefaultParameterForPropertyNameOfGivenSettings","_BaseAddProductionSchedulePageComponent","OrderLinesHelper","_OrderLinesHelper","hasActiveFilters","_Object$values","_orderLinesGrid$api","onServerSideDataSourceError","buildAgGridCellTextWithUnitForCommercialDimension","commercialDimension","forceUnit","decimals","selectedUnit","getSelectedUnit","buildAgGridCellTooltipWithUnitForCommercialDimension","getTotalCount","ProductionScheduleOrderLineWithQuantity","showPreselectedItems","alternativeQualityNames","qualityNames","alternativeColorSetNames","colorSetNames","showOnlyQueryCompatibleOrderlines","isPreSelection","newFilterModel","colorSetName","preselectionFilterModel","compatibleFilter","compatibleColorSetId","selectedOrderlineIdFilterModel","setAmountInProductionSchedule","editProductionScheduleItem","productionScheduleItemInPathGroupIndex","getProductionScheduleItemsInPathGroupWithIdentification","ProductionScheduleItemInPathGroupWithIdentification","productionScheduleItemInPathGroupWithIdentification","marginInDentsOfMissingDesigns","listDrawingOrderLine","createListDrawingOrderLine","isAutoFilling","fullQualities","getListDrawingOrderLineAmount","lookupCommercialWidthInPathWidths","convertDentsToPixels","convertWidthInMeterToDents","convertPicksToPixels","isRollLengthEditable","getMaxQuantityToPlan","productionScheduleOrderLineWithQuantity","getAmountInProductionSchedule","amountLeftForProductionSchedule","_productionScheduleOr","getNoRowsOverlayForPreselection","orderLinesNewViewGrid","getNoRowsOverlayForBuilder","noOverlayAction","descriptionKey","hideActions","_productionSchedule$m9","getAmountLeft","maxQuantityToPlan","getProductionScheduleItemsInPathGroup","getProductionSchedulePaths","pathItem","getProductionScheduleItemsFromProductionSchedule","getMaxBuggyLengthOrPathThatIsLonger","cellRendererSelectorForOrderLinesOnly","cellRenderer","cellRendererParams","colDef","EmptyCellRendererComponent","_finishing2","_finishing3","_finishing4","displayTechnicalUnit","_productionSchedule$m10","_productionSchedule$m11","_orderline$article$te","_orderline$article","_orderline$article2","orderlineHeightInPicks","toPlanAmount","_productionSchedule$m12","_productionSchedulePath","_productionScheduleItemInPathGroup","_productionScheduleItemInPathGroupIndex","_productionSchedulePathIndex","_startDentOfColoredYarnSet","_productionScheduleOrderLine","_SelectMachineComponent","_data$allowedMachineT","manufacturerColDef","gridOptionsForListOfMachines","instantiateGridOptionsForListOfMachines","getListOfMachines","_this$machinesGrid","machinesGrid","canSelectMachine","_this$machinesGrid2","_this$machinesGrid$ap","machinesRequests","flattenAndOnlySubset","listOfMachines","_this$allowedMachineT","flattenedMap","firstFilterElement","secondFilterElement","_this$allowedMachineT2","_this$allowedMachineT3","isWeavingMachineAllowed","isTuftingMachineAllowed","columns","getColumnDefsForListOfWeavingMachines","getColumnDefsForListOfTuftingMachines","getColumnDefsForListOfMachines","getColumnDefsForListOfLiteMachines","SETTINGS","PathLengthComponent","_PathLengthComponent","pathLengthInCommercialUnit","pathLengthInTechnicalUnit","calculatePathLengthInCommercialUnit","PathWidthComponent","_PathWidthComponent","commercialWidth","calculateCommercialWidth","commercialWidthOfPath","creelMappingTableComponent_r5","checked","coloredYarnSetPath_r6","getColoredYarnSetCreelMap","coloredYarnSetIndex_r2","showColoredYarnSetDetails","ProductionScheduleBuilderSummaryComponent_mat_expansion_panel_1_div_14_Template","gridOptionsForProductionScheduleColoredYarnSets","ProductionScheduleBuilderSummaryComponent","_ProductionScheduleBuilderSummaryComponent","maxDifferenceInPathCommercialLength","percentageUnit","trackByColoredYarnSetPathId","coloredYarnSetPath","calculateMaxDifferenceInPathCommercialLength","getColumnDefsForListOfPaths","smallTableMode","getRowClass","withTooltipShowDelay","gridOptionsForProductionScheduleColoredYarnSet","indexA","alignedGrids","indexB","coloredYarnSetIndex","textileDataAmount","coloredYarnSetWithStartDentId","getCreelMap","createActiveCreelMap","_this$getCreelMap","_this$getCreelMap2","getRestLengthInCommercialUnit","getLossPercentage","_this$customSettings","restLengthInMillimeters","commercialRestLengthOfPath","ProductionScheduleBuilderSummaryComponent_mat_expansion_panel_1_Template","ConfirmProductionScheduleBaseComponent","_ConfirmProductionScheduleBaseComponent","completingAndPlanning","completingAndQueuing","completingAndProcess","TEXFAB_QUEUE_PERMISSION","PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE","PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE_NEW","SCHEDULE_DUE_DATE_PERMISSION","datePickerFilter","_this$confirmationFor","confirmationForm","pristine","getFullYear","getMonth","getDate","canShowConfirmationForm","canShowWarningsForProductionSchedule","totalLossInPercent","maxBuggyLengthExceeded","minBuggyLengthReached","maximumLossOfProductionScheduleInPercent","_DateTime$fromJSDate","canComplete","isUserBasic","hasTexfabQueuePermission","hasPlanningPermission","canShowPlanAndQueueButton","canShowProcessAndSendButton","canShowProcessButton","canShowPlanButton","isProcessAndSendRaisedButton","process","adjustProductionOrderLabelWithLatestChanges","onProductionScheduleCompleted","completeAndPlan","completeAndQueue","hasScheduleDueDatePermission","_this$confirmationFor2","WarningsForProductionSchedulePlanComponent","_WarningsForProductionSchedulePlanComponent","canShowWarningForMaximumLossInProductionSchedule","getWarningTotalLossInPercentValue","productionScheduleWarnings","getMessages","currentLossInPercent","Message","MessageType","amountChanged","incrementNumberOfRepeats","decrementNumberOfRepeats","getNumberOfRepeatsForecast","ConfirmProductionScheduleDesktopComponent_div_5_mat_error_7_Template","ConfirmProductionScheduleDesktopComponent_div_5_mat_error_8_Template","ConfirmProductionScheduleDesktopComponent_div_5_mat_form_field_29_Template","accessAllPermission","ConfirmProductionScheduleDesktopComponent_Conditional_11_vdw_progress_button_0_Template","ConfirmProductionScheduleDesktopComponent","_ConfirmProductionScheduleDesktopComponent","hint","ConfirmProductionScheduleDesktopComponent_div_5_Template","ConfirmProductionScheduleDesktopComponent_app_warnings_for_production_schedule_plan_6_Template","ConfirmProductionScheduleDesktopComponent_Conditional_11_Template","ConfirmProductionScheduleDesktopComponent_Conditional_12_Template","ConfirmProductionScheduleDesktopComponent_Conditional_13_Template","ConfirmProductionScheduleDesktopComponent_div_14_Template","ConflictWithOrderlinesDialogResult","DISMISS","ADJUST_ORDER_PLAN","ConflictsWithOrderLinesAmountComponent","_ConflictsWithOrderLinesAmountComponent","setLabelsWidth","requested","inPlan","tooMuch","biggestLabelWidth","currently","ConflictsWithOrderLinesComponent","_ConflictsWithOrderLinesComponent","closeConflicts","conflictedOrderLines","gridOptionsForConflictsWithOrderLines","initialiseGridOptionsForConflictsWithOrderLines","_this$conflictsWithOr","conflictsWithOrderLinesGrid","adjustOrderPlanTranslationKey","dismiss","goToPlan","getColumnDefsForConflictsWithOrderLine","withRowHeight","getValueForOrderNumber","requestedAmount","amountInSchedule","amountAlreadyPlanned","amountTooMuchPlanned","ConflictsWithOrderLinesComponent_vdw_header_1_Template","ConflictsWithOrderLinesComponent_vdw_mobile_page_header_2_Template","ConfirmProductionScheduleOnDesktopCommand","_ConfirmProductionScheduleOnDesktopCommand","confirmProductionScheduleOnDesktopSubject","checkPossibleConflictsWithOrderLines","showConflictsDialog","handleUnhandledBackendError","showConfirmDialog","withCloseDisabled","action_r2","_ListOverviewActionsComponent","ListOverviewActionsComponent_For_2_Template","ShowReasonForFailureDialogCommand","_ShowReasonForFailureDialogCommand","getReasonForFailure","reasonForFailureContext","extraInformationText","reasonForFailure","errorText","extraMessageText","ProductionScheduleState","globalStatus","statusColor","statusColorDescription","subStatus","_globalStatus","_statusColor","_statusColorDescription","_subStatus","productionScheduleStateJSON","MachineQualityForOverviewListProductionSchedule","machineQualityForOverviewListProductionScheduleJSON","MachineForOverviewListProductionSchedule","_remoteMachine","machineForOverviewListProductionScheduleJSON","OverviewListProductionSchedule","yieldOfProductionSchedule","pathWidthsInMM","pathWidthsInDents","lengthInPicks","buggy1","buggy2","numberOfPaths","wovenStartDate","wovenEndDate","statusesRequiredToRemoveMachineFiles","_state","_pathWidthsInMM","_pathWidthsInDents","_lengthInMM","_lengthInPicks","_buggy1","_buggy2","_numberOfPaths","_colorSets","_wovenStartDate","_wovenEndDate","overviewListProductionScheduleJSON","hasToBeReconfirmed","canDownloadEpFiles","canRemoveMachineFiles","canBeConfirmed","canBeCompleted","FilterModelsUtils","setFilterModelsForColumnId","combinedValues","_filterModel$key","_filterModel$key2","setFilterModelIndex","mappedValues","entry","translatedValue","textFilterModelIndex","_filterModel$key3","searchText","matchingKeys","originalKey","setFilterModelValues","Set","downloadEpFilesForSelectedProductionSchedule","removeMachineFilesForSelectedProductionSchedule","canDownloadEpFilesForSelectedProductionSchedule","canRemoveMachineFilesForSelectedProductionSchedule","printWeavingOrderForSelectedProductionSchedule","ProductionScheduleOverviewPageComponent_ng_template_7_span_4_Template","showFailureReasonForSelectedProductionSchedule","confirmSelectedProductionSchedule","ProductionScheduleOverviewPageComponent_ng_template_7_ng_container_13_Template","completeProductionSchedules","completePartiallyProductionSchedules","canPrintSelectedProductionScheduleWeavingOrder","hasPrintWeaveOrderPermission","canShowFailureReasonForSelectedProductionSchedule","canConfirmSelectedProductionSchedule","permissionToDownloadEpFiles","canCompleteProductionSchedules","canCompletePartiallyProductionSchedules","ProductionScheduleOverviewPageComponent","_ProductionScheduleOverviewPageComponent","printDocument","showReasonForFailureDialogCommand","overviewService","weftDensityUnit","WEFTS_PER_METER","PICKS_PER_METER","DENTS_PER_METER","isActionsMenuOpen","quantityOfRowsToRequestPerSlice","isConfirmingProductionSchedule","isPrintingProductionSchedule","selectedProductionSchedules","printWeaveOrderPermission","machineFileTranslation","STATUS_COL_ID","MACHINE_COL_ID","COLUMN_UNITS_MAP","getDefaultColumnUnitsMap","manageAdd","getServerSideDataSource","getTextileDataType","PRODUCTION_SCHEDULE_NEW","getColumnDefsForListOfProductionSchedules","_this$pageUrls","getRowHeight","heightForCreelPreviews","isSingleProductionScheduleSelected","getSelectedProductionSchedule","selectedProductionSchedule","downloadEpFiles","Blob","downloadAnchor","URL","createObjectURL","UnavailableArchiveError","deleteSelectedProductionScheduleMachineFiles","reloadProductionSchedules","ensureIndexIsVisible","openActionsMenu","closeActionsMenu","updateProductionOrderStatus","getWeavingOrderXMLForProductionOrder","getWeavingOrderXSLTForProductionOrder","hasSelectedProductionSchedule","productionSchedulesSelected","editProductionSchedule","exportProductionSchedulesGrid","listOfProductionSchedules","processCellCallback","dataSource","sources","convertFilterModel","haveCustomSettingsBeenLoaded","listOfMachineQualitiesCustomSettings","endRowPO","getDefaultParameterForPropertyName","updateColumnUnitsMap","subscribeToRealtimeProductionOrderChanges","setLoadingCellRendererParams","numberFilterModel","conditions","condition","convertNumberFilterValue","convertFilterValue","filterTo","getDisplayUnit","dataToUnit","removeMachineFiles","isGridSortedByStatus","getProductionOrderCreated","productionOrderCreated","updateProductionOrderId","scheduleId","oldId","newId","_node$data2","_this$sort","ProductionScheduleOverviewPageComponent_ng_template_7_Template","actionsMenu_r5","ProductionScheduleCombinedStatus","CREATE_BUSY_DRAFT","CREATE_BUSY_CREATING","CREATE_WARNING_VERIFIED_WITH_WARNINGS","CREATE_WARNING_TO_RECONFIRM","CREATE_FAILURE_VERIFIED_WITH_ERRORS","CREATE_COMPLETE_VERIFIED","CREATE_COMPLETE_CANCELLED","CREATE_COMPLETE_HIDDEN","CONFIRM_BUSY_PROCESSING","CONFIRM_BUSY_PROCESSED","CONFIRM_BUSY_TRANSLATING","CONFIRM_BUSY_CREATING","CONFIRM_COMPLETE_TRANSLATED","CONFIRM_COMPLETE_CREATED","CONFIRM_FAILURE_PROCESSING","CONFIRM_FAILURE_TRANSLATING","CONFIRM_FAILURE_CREATED","SEND_BUSY_SENDING","SEND_FAILURE_SENDING","SEND_COMPLETE_SENT","PLAN_BUSY_PLANNING","PLAN_FAILURE_PLANNING","PLAN_COMPLETE_PLANNED","REPLAN_BUSY_REPLANNING","REPLAN_COMPLETE_REPLANNED","REPLAN_WARNING_REPLANNED_WITH_WARNINGS","REPLAN_FAILURE_REPLANNING","PRODUCE_BUSY_PRODUCING","PRODUCE_COMPLETE_PRODUCED_COMPLETELY","PRODUCE_WARNING_PRODUCED_PARTIALLY","PRODUCE_WARNING_NO_PRODUCTION_INFORMATION_RECEIVED","ColumnUnitsId","PATH_WIDTHS_IN_MM_COL_ID","WEFT_DENSITY_COL_ID","PICK_DENSITY_COL_ID","REED_DENSITY_COL_ID","PRACTICAL_PICK_DENSITY_COL_ID","LENGTH_IN_MM_COL_ID","WIDTH_IN_MM_COL_ID","coloredYarnSet_r4","creelMaps","getStartDent","ProductionScheduleOverviewCreelPreviewComponent","_ProductionScheduleOverviewCreelPreviewComponent","GridCreelPreviewComponent","theoreticalValue","colorListPreviewElements","colorListPreviewElement","getDialogDataForColoredYarnSetDetailsDialog","ProductionScheduleOverviewCreelPreviewComponent_app_color_list_preview_2_Template","listOfColoredYarnSets","ProductionScheduleOverviewMachineComponent","_ProductionScheduleOverviewMachineComponent","ProductionScheduleOverviewMachineComponent_mat_icon_0_Template","ProductionScheduleOverviewService","_ProductionScheduleOverviewService","SLICE_SIZE","getColumnUnits","withMobile","cellClassParams","getNameCellClass","names","getYieldValue","withHeaderValueGetter","getHeaderNameAndSetTooltip","buildAgGridCellTextWithoutUnit","WEFTS_PER_MILLIMETER","dataFromUnit","columnUnitsMap","getConversionRate","columnUnits","headerName","headerNameWithUnit","headerTooltip","ProductionScheduleGlobalStatus","CREATE","SEND","PLAN","REPLAN","PRODUCE","productionScheduleGlobalStatusIconMap","_ProductionScheduleOverviewStatusComponent","getIconNameForProductionScheduleStatus","productionScheduleStatus","getIconColorNameForProductionScheduleStatus","_params$data","possibleRestZonePosition_r3","restZonePositionEnum","possibleRestZonePosition_r4","ProductionScheduleCustomSettingsComponent_section_0_Conditional_55_For_4_Template","possibleUserDefinedRestZonePositions","INT_32_MAXIMUM_VALUE","possibleLoomDeletePolicy_r5","ProductionScheduleCustomSettingsComponent_section_0_Conditional_122_mat_error_6_Template","ProductionScheduleCustomSettingsComponent_section_0_Conditional_122_mat_error_7_Template","productionScheduleCustomSettingsForm","tmp_4_0","fontFamily_r6","fontWeight_r7","fontStyle_r8","ProductionScheduleCustomSettingsComponent_section_0_mat_error_23_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_hint_24_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_33_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_radio_button_54_Template","ProductionScheduleCustomSettingsComponent_section_0_Conditional_55_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_65_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_66_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_67_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_83_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_92_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_101_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_radio_button_121_Template","ProductionScheduleCustomSettingsComponent_section_0_Conditional_122_Template","ProductionScheduleCustomSettingsComponent_section_0_For_145_Template","ProductionScheduleCustomSettingsComponent_section_0_For_153_Template","ProductionScheduleCustomSettingsComponent_section_0_For_160_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_170_Template","ProductionScheduleCustomSettingsComponent_section_0_mat_error_179_Template","hasViewLossPermission","hasError","hasPlanningBoardPermission","possibleRestZonePositions","userDefinedRestZonePosition","possibleLoomDeletePolicies","loomDeletePolicy","loomDeletePolicyTimePeriodInDays","possibleFontFamilies","possibleFontWeights","possibleFontStyles","pathLabelNameGenerationProperties","ProductionScheduleCustomSettingsComponent","_ProductionScheduleCustomSettingsComponent","httpProductionOrdersCustomSettings","VIEW_LOSS_PERMISSION","ACCESS_ALL_PERMISSION","showCustomSettings","initialiseCustomSettings","formValue","customSettingsToSave","onPlanningBoard","leftCommercialWidth","rightCommercialWidth","inBetweenCommercialWidth","initialCustomSettings","commercialLabelFontSize","loomDeletePolicyOption","canShowCustomSettings","_this$currentSubscrip5","setValueWatcherForRestZonePosition","setValueWatcherForLoomDeletePolicy","restZonePosition","_this$initialCustomSe","_this$initialCustomSe2","ProductionScheduleCustomSettingsComponent_section_0_Template","canDeactivateProductionScheduleInitialPreparationsGuard","_component$initialPre","initialPreparationsAdditionalOptionsComponent","showDiscardConfirmation","navigationThroughNavigationHelper","canDeactivateProductionScheduleGuard","discardUnsavedChanges","canDeactivateProductionScheduleGuardNew","_component$production","hasNoPaths","isFormEmpty","succesfullSave","_navigationHelperServ","_navigationHelperServ2","discardTemporarySavedChanges","_component$production2","_component$production3","productionScheduleDataRouting","OverviewListSalesOrder","addedToOrderBook","_addedToOrderBook","overviewListSalesOrderJSON","SalesOrderOverviewPageComponent","_SalesOrderOverviewPageComponent","salesOrders","getSalesOrders","getColumnDefsForListOfSalesOrders","addToOrderBookColDef","withOnCellClicked","addToOrderBook","exportGridForSalesOrders","listOfSalesOrders","copyToOrderbook","salesOrderName","OverviewListArticleStubFactory","getRandomArticleWithId","OrderLineForSalesOrderStubFactory","getRandomOrderLine","getRandomOrderLineWithId","SalesOrderStatus","ADDED_TO_ORDERBOOK","SalesOrderStubFactory","getRandomSalesOrderWithId","getRandomSalesOrderWithIdAndOrderLines","getRandomSalesOrderWithOrderLines","SelectArticleComponent","_SelectArticleComponent","getArticlesCommand","gridOptionsForListOfArticles","setGridOptionsForListOfArticles","getArticles","_this$articlesGrid","articlesGrid","canSelectArticle","_this$articlesGrid2","selectArticle","navigateToAddArticle","getColumnDefsForListOfArticles","withOnRowDoubleClicked","row","SelectCustomerComponent","_SelectCustomerComponent","gridOptionsForListOfCustomers","setGridOptionsForListOfCustomers","getCustomers","_this$customersGrid","customersGrid","canSelectCustomer","_this$listOfCustomers","_this$customersGrid2","selectCustomer","navigateToAddCustomer","getColumnDefsForListOfCustomers","int32MaximumValue","priority_r2","paymentStatus_r3","AddSalesOrderPageComponent_div_45_mat_option_9_Template","paymentStatuses","salesOrderToSave","orderLineIndex_r7","removeOrderLine","ctx_r4","orderLine_r6","selectArticleForOrderLine","AddSalesOrderPageComponent_div_61_mat_error_9_Template","AddSalesOrderPageComponent_div_61_mat_error_16_Template","AddSalesOrderPageComponent_div_61_mat_error_17_Template","AddSalesOrderPageComponent_div_61_ng_container_18_Template","AddSalesOrderPageComponent_div_61_button_20_Template","ARTICLE_BASE_ROUTER_LINK","isEditingSalesOrder","hasMoreThanOneOrderLine","AddSalesOrderPageComponent","_AddSalesOrderPageComponent","CUSTOMER_BASE_ROUTER_LINK","isLoadingSalesOrder","urlToEditSalesOrder","urlToDuplicateSalesOrder","urlToSalesOrderOverview","BASIC_DIALOG_PANEL_CLASS","salesOrderEditPermission","initializeAddSalesOrderFormFields","getCurrentSalesOrder","selectedOrderlineIndex","salesOrderTranslationKey","canShowErrorForErrorCodeAndButtonForFormGroup","addSalesOrderForm","isSalesOrderBeingUsed","isDuplicatingSalesOrder","getChosenCustomer","getOrderLines","getOrderLinesFormArray","orderLineIndex","overviewListArticle","hasAddedToOrderbook","saveSalesOrder","deleteSalesOrder","addNewOrderLine","orderLineFormGroup","orderLineGroup","setAddSalesOrderForm","salesOrderState","setAddSalesOrderFormValues","getFunctionsBasedOnDialogComponent","setNewCustomer","setNewArticle","headerActions","_this$addSalesOrderFo","_this$addSalesOrderFo2","addAsyncValidators","AddSalesOrderPageComponent_mat_error_20_Template","AddSalesOrderPageComponent_mat_error_21_Template","AddSalesOrderPageComponent_mat_error_22_Template","AddSalesOrderPageComponent_mat_error_31_Template","AddSalesOrderPageComponent_mat_option_43_Template","AddSalesOrderPageComponent_mat_error_44_Template","AddSalesOrderPageComponent_div_45_Template","AddSalesOrderPageComponent_div_61_Template","salesOrderDataRouting","canActivateProductionScheduleGuard","childRoute","texfabRouting","SelectTuftProductComponent","_SelectTuftProductComponent","tuftProducts","gridOptionsForListOfTuftProducts","getTuftProducts","initializeGridOptionsForListOfTuftProducts","_this$tuftProductsGri","tuftProductsGrid","selectTuftProduct","canSelectTuftProduct","_this$tuftProductsGri2","_this$tuftProductsGri3","navigateToAddTuftProduct","getColumnDefsForListOfTuftProducts","listOfTuftProducts","INCH","gaugeComparator","PER_CENTIMETER","_nodeA","_nodeB","_isInverted","TuftProductionOrderOverviewPageComponent","_TuftProductionOrderOverviewPageComponent","tuftProductionOrders","listOfTuftProductionOrders","getColumnDefsForListOfTuftProductionOrders","exportGridForTuftProductionOrders","_params$value","TUFT_PRODUCTION_ORDER","OverviewListTuftingMachine","overviewListTuftingMachine","applySuggestionForTuftProductionOrderName","suggestedTuftProductionOrderName","AddTuftProductionOrderPageComponent","_AddTuftProductionOrderPageComponent","toast","TUFT_PRODUCT_BASE_ROUTER_LINK","hasTuftProductionOrderState","URL_PRODUCTION_ORDER_OVERVIEW","URL_EDIT_TUFT_PRODUCTION_ORDER","URL_DUPLICATE_TUFT_PRODUCTION_ORDER","tuftProductionOrderToSave","setTuftProductionOrderForm","emptyTuftProductionOrderState","tuftProductionOrderState","isEditingTuftProductionOrder","isDuplicatingTuftProductionOrder","setTuftProductionOrder","setTuftProduct","getCurrentTuftProductionOrder","selectedTuftProductId","addTuftProductionOrderForm","selectedTuftProduct","canShowErrorForButton","saveTuftProductionOrder","editTuftProductionOrder","addTuftProductionOrder","duplicateTuftProductionOrder","deleteTuftProductionOrder","hasPermissionToEditTuftProductionOrder","canShowSuggestionForTuftProductionOrderName","_this$suggestedTuftPr","tuftProductDetails","tuftProductControl","tuftProductionOrderName","_this$tuftProductionO","_this$addTuftProducti","getSuggestionForTuftProductionOrderName","_this$addTuftProducti2","newTuftProduct","AddTuftProductionOrderPageComponent_mat_hint_13_Template","AddTuftProductionOrderPageComponent_mat_error_14_Template","AddTuftProductionOrderPageComponent_mat_error_15_Template","AddTuftProductionOrderPageComponent_mat_error_38_Template","AddTuftProductionOrderPageComponent_mat_error_50_Template","AddTuftProductionOrderPageComponent_mat_error_51_Template","TuftProductionOrderSettingsComponent","_TuftProductionOrderSettingsComponent","tuftProductionOrderCustomSettingsForm","TuftProductionOrderSettingsComponent_mat_option_14_Template","tuftProductionOrderRouting","BuggyCustomSettingsComponent","_BuggyCustomSettingsComponent","httpBuggyCustomSettings","BUGGY_SETTINGS_TRANSLATION_KEY","getInitialCustomSettings","getHeaderText","BUGGY_TRANSLATION_KEY","createdObject","AddBuggyComponent","_AddBuggyComponent","buggies","buggyNameGenerationView","getBuggy","addBuggyGeneralForm","buggyToSave","getCurrentBuggy","isEditingBuggy","deleteBuggy","_this$addBuggyGeneral","isDuplicatingBuggy","AddBuggyComponent_Conditional_1_Template","AddBuggyComponent_vdw_invalid_form_message_11_Template","AddBuggyComponent_vdw_invalid_form_message_12_Template","_BuggyOverviewPageComponent","BuggyOverviewPageComponent","buggyOverviewService","printBuggyOverviewPermission","isPrintingBuggyReport","_this$authentication$","_this$authentication$2","hasPrintBuggyOverviewPermission","withExtraActions","onlySingleSelection","closeMenuOnClick","printOverviewForSelectedBuggy","_grid$api","selectedBuggy","buggyRouting","BuggyOverviewService","_BuggyOverviewService","contentSwitcherEntry","AddColorSetPageComponent","hasColorSetState","initialiseAddColorSetPage","emptyColorSetState","materialSet","colorSetState","isDuplicatingColorSet","isEditingColorSet","colorSetToSave","urlToColorSetOverview","urlToEditColorSet","urlToDuplicateColorSet","_AddColorSetPageComponent","GridColorSetPreviewComponent","_GridColorSetPreviewComponent","showDetailColor","alternatives","_alternatives","colorSetOverviewListJSON","_colorSetOverviewList","alternativeColorSets","alternativeColorSetJSON","ColorSelectionService","_ColorSelectionService","colors","ColorOverviewService","_ColorOverviewService","withHeaderNameAndClass","showRGBValue","descriptionColDef","getColorColDef","colorColDef","GridColorPreviewComponent_Conditional_0_Conditional_6_Template","isRuleCondition","hasMultipleSelection","getRgbAsCommaSeparatedValue","_GridColorPreviewComponent","_params$color","_params$editPageUrl","_params$id","getColorFromParams","getReadableLabelForRGB","canShowColorPreview","GridColorPreviewComponent_Conditional_0_Template","tooltipDisabled","ColorGridPreviewComponent_div_1_vdw_ellipsis_label_3_Template","ColorGridPreviewComponent_div_1_span_4_Template","getTooltipForColor","showLabel","ColorGridPreviewComponent","_ColorGridPreviewComponent","trackByColorId","_this$name2","ColorGridPreviewComponent_div_1_Template","_GridColorsOfCreelPositionComponent","_params$data$creelPos","_creelPositionForColo","_GridYarnTypesOfCreelPositionComponent","yarnTypes","GridYarnTypesOfCreelPositionComponent_span_2_Template","yarnType_r1","YarnTypeGridPreviewComponent_div_1_span_4_Template","showFirstRawMaterial","YarnTypeGridPreviewComponent","_YarnTypeGridPreviewComponent","YarnTypeGridPreviewComponent_div_1_Template","canShowDetailColor","_GridColoredYarnSetPreviewComponent","GridColoredYarnSetPreviewComponent_app_color_list_preview_0_Template","_overviewListColorSet","_overviewListYarnSet","coloredYarnSetOverviewListJSON","_GridCreelPreviewComponent","setListOfColoredYarnSets","colorAmountExceedsEight","coloredYarnSetAmountExceedsEight","getTextileDataAmount","startDentText","GridCreelPreviewComponent_app_color_list_preview_0_Template","usedInPo","_coloredYarnSetsWithStartDent","_usedInPo","_machines","_creelJSON$machines","toSortedBy","coloredYarnSetsWithStartDents","createEmptyCreel","getColoredYarnSetsName","_coloredYarnSetWithSt","fromLabel","machineQualityNameWithVersion","fromFinishing","_finishing$machineQua","_finishing$machineQua2","_finishing$machineQua3","getFinishingId","convertLabels","SINGLE_WIDTH","OverviewWeaveQualityTypeComponent","_OverviewWeaveQualityTypeComponent","weaveQualityType","getIconNameForWeaveQualityType","getWeaveQualityTypeLabelForTranslate","pileRowDensityInPileRowsPerMeter","alternativeQualities","juteConditionIds","_alternativeMachineQualityIds","_pileRowDensityInPileRowsPerMeter","_alternativeQualities","_juteConditionIds","_machineQualityJSON$c","_machineQualityJSON$a","_machineQualityJSON$j","_machineQualityJSON$f","alternativeQualityJSON","fromCarpetWeaveQuality","_carpetWeaveQuality$c","AddColorSetViewMode","GENERAL","OPTIONAL_SETTINGS","ALTERNATIVE_SETS","applySuggestionForMaterialSetName","suggestedMaterialSetName","selectAllCreelPositions","isMaterialSetSelected","_c8","_c9","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_16_mat_error_6_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_16_mat_error_7_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_16_mat_error_8_Template","addCreelPositions","canAddCreelPositions","onMaterialSetNameChange","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_12_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_mat_error_13_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_mat_error_14_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_15_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Conditional_16_Template","selectedCreelPositionChanged","creelPositionHasBeenChanged","generalForm","canEditMaterialSet","canShowSuggestionForMaterialSetName","canSelectCreelPosition","canShowCreelPositionsInput","canShowErrorForCreelPositionIndex","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Conditional_1_Template","canShowGeneralForm","additionalOptionsForAddColorSetForm","AddMaterialSetPageComponent_Conditional_3_Conditional_1_Template","AddMaterialSetPageComponent_Conditional_3_Conditional_2_Template","showOptionalSettingsTab","showAlternativeSetsTab","gridOptionsForColorSets","listOfColorSets","showSelected","AddMaterialSetPageComponent_Conditional_4_Conditional_12_Template","canShowListOfColorSets","getSelectedCreelPositions","AddMaterialSetPageComponent_Conditional_5_Conditional_0_Template","AddMaterialSetPageComponent_Conditional_5_Conditional_1_Template","canShowSelectColor","canShowSelectYarnType","getSelectedCreelPosition","canShowErrorForSelectedCreelPosition","AddMaterialSetPageComponent","_AddMaterialSetPageComponent","hasMaterialSetState","generalMenuItem","optionalSettingsMenuItem","alternativeSetsMenuItem","headerIdentifier","modifiedCreelPositions","formValidationHelper","possibleCreelPositionsSubject","slideToggleChecked","_this$addMaterialSetF","addMaterialSetForm","getEmitValue","permissionToEditMaterialSet","isMaterialSetOfTypeColorSet","initializeSelectedMenuItem","initializeGridOptionsForColorSets","setForm","_this$addMaterialSetF2","textileDataService","hasEditedMaterialSet","updateMaterialSet","canShowIllegalMaterialSetReason","hasCreelPositions","hasEmptyCreelPosition","containsGroupsWithNoOrOneMaterial","getMaterialType","canSaveMaterialSet","saveMaterialSet","isEditingMaterialSet","getTranslationKeyForMaterialSet","deleteMeterialSet","duplicateMeterialSet","duplicateUrl","getSuggestionForMaterialSetName","_this$materialSet","canShowCreelPositionDetailsAndMaterialTypeSelection","hasSelectedCreelPosition","canShowCreelPositionDetails","clone","getSelectedCreelPositionIndex","isMaterialSetOfTypeYarnSet","isMaterialSetBeingUsed","AddYarnSetPageComponent","urlToEditYarnSet","areAllCreelPositionsSelected","selectColorComponent","filterForListOfColors","focus","selectYarnTypeComponent","filterComponent","showInUseUnableToSave","isDuplicatingMaterialSet","hasPermissionToEditMaterialSet","slideToggleChange","selectedColorSets","gridModelForListOfColorSets","selectedNode","initialListOfColorSets","getTabAction","onSelectedMenuItemChange","showSelectionCard","_this$suggestedMateri","emptySelectedMenuItemState","selectedMenuItemState","_this$materialSet2","getColorSets","emptyNumberOfCreelPositionsState","numberOfCreelPositionsState","getColumnDefsForListOfColoredYarnSets","rowSelected","onGridReadyEventForListOfColoredYarnSets","selectColorSets","listOfColorSet","getPossibleCreelPositions","colorNamesOfFirstColorSet","colorNamesOfSecondColorSet","urlToDuplicateYarnSet","containsGroupWithNoOrOneMaterial","_this$selectedColorSe","selectedColoredYarnSet","getRowNode","horizontalPositionsOfGroupCreelPosition","_this$gridModelForLis","AddMaterialSetPageComponent_Conditional_3_Template","AddMaterialSetPageComponent_Conditional_4_Template","AddMaterialSetPageComponent_Conditional_5_Template","AddMaterialSetPageComponent_Conditional_6_Template","PlasticProductViewMode","SETUP","unit_r4","standardCycleTime","speedUnit_r8","AddPlasticProductPageComponent_Conditional_4_vdw_invalid_form_message_7_Template","AddPlasticProductPageComponent_Conditional_4_vdw_invalid_form_message_8_Template","selectProductGroup","AddPlasticProductPageComponent_Conditional_4_For_25_Template","AddPlasticProductPageComponent_Conditional_4_Conditional_31_Template","AddPlasticProductPageComponent_Conditional_4_mat_error_35_Template","selectMaterial","selectColor","AddPlasticProductPageComponent_Conditional_4_Conditional_64_Template","AddPlasticProductPageComponent_Conditional_4_mat_error_68_Template","AddPlasticProductPageComponent_Conditional_4_mat_error_69_Template","AddPlasticProductPageComponent_Conditional_4_Conditional_75_Template","AddPlasticProductPageComponent_Conditional_4_mat_error_76_Template","AddPlasticProductPageComponent_Conditional_4_For_83_Template","currentPlasticProduct","plasticProductsCustomSettings","refreshObjectSelection","getWeightSuffixTranslationKey","speedUnits","setupForm","matchingCriteriaForm","getPlasticProductPermission","AddPlasticProductPageComponent","_AddPlasticProductPageComponent","plasticProducts","plasticProductGroupSelectionService","materialSelectionService","colorSelectionService","customerSelectionService","addPlasticProductForm","plasticProductToSave","toSorted","getCurrentPlasticProduct","savePlasticProduct","isEditingPlasticProduct","deletePlasticProduct","canShowForm","PlasticProductCustomSettingsComponent","AsyncGreaterThanValidator","createGreaterThanValidator","isDuplicatingPlasticProduct","SECONDS_IN_A_MINUTE","_this$plasticProductT","selectionService","_this$activatedRoute$3","AddPlasticProductPageComponent_Conditional_1_Template","AddPlasticProductPageComponent_Conditional_4_Template","AddPlasticProductPageComponent_Conditional_5_Template","AddPlasticProductPageComponent_Conditional_6_Template","PlasticProductGroupOverviewService","_PlasticProductGroupOverviewService","HttpPlasticProductGroupsService","_HttpPlasticProductGroupsService","plasticProductGroupsJSON","plasticProductGroupJSON","PlasticProductGroupSelectionService","_PlasticProductGroupSelectionService","plasticProductGroups","PlasticProductGridType","PlasticProductOverviewService","_PlasticProductOverviewService","gridType","componentModule","_params$data$color","PlasticProductSelectionModule","_PlasticProductSelectionModule","MaterialOverviewService","MaterialSelectionService","useClass","PlasticProductSelectionService","_PlasticProductSelectionService","plasticProductService","enableMultiDelete","_this$config$selected","PlasticProductModule","newClickedEntry","addPlasticProductSetupForm","PlasticProductSetupComponent","_PlasticProductSetupComponent","PlasticProductSetupComponent_Conditional_7_Template","PlasticProductSetupComponent_mat_error_11_Template","PlasticProductSetupComponent_Conditional_17_Template","PlasticProductSetupComponent_mat_error_21_Template","PlasticProductSetupComponent_Conditional_28_Template","PlasticProductSetupComponent_mat_error_32_Template","PlasticProductSetupComponent_Conditional_38_Template","PlasticProductSetupComponent_mat_error_42_Template","_PlasticProductModule","plasticProductRouting","TextileDataSharedModule","EditorHeaderModule","CrudOverviewDataModule","SplitButtonModule","MatchingCriteriaModule","i12","i13","i14","i15","i16","i17","i18","i19","i20","i21","i22","_PlasticProductOverviewPageComponent","PlasticProductOverviewPageComponent","plasticProductOverviewService","_PlasticProductCustomSettingsComponent","plasticProductCustomSettings","PLASTIC_PRODUCT_TRANSLATION_KEY","_MaterialOverviewService","RAW_MATERIAL_TRANSLATION_KEY","AddRawMaterialComponent","_AddRawMaterialComponent","rawMaterialService","isRawMaterialUsed","getRawMaterialDetails","isEditingRawMaterial","addRawMaterialForm","_this$addRawMaterialF","rawMaterialToSave","getCurrentRawMaterial","resetFormFields","_navigationData$route","disableNameValue","AddRawMaterialComponent_Conditional_1_Template","AddRawMaterialComponent_vdw_invalid_form_message_11_Template","AddRawMaterialComponent_vdw_invalid_form_message_12_Template","addRawMaterialEntry","editRawMaterialEntry","AddStockLocationComponent","addStockLocationEntry","editStockLocationEntry","ContentSwitcherUtils","getAddStockLocationEntry","componentEntries","getEditStockLocationEntry","getAddRawMaterialEntry","getEditRawMaterialEntry","_MaterialSelectionService","materials","materialService","_this$previouslySelec","previouslySelectedObjects","getYarnConsumptionCommercialLengthInMeters","_GridYarnConsumptionComponent","GridYarnConsumptionComponent_div_1_Template","onCreelMapViewModeChange","showActiveCreelMap","_TextileDataDetailComponent","repositionDialogComponent","showYarnConsumption","initialCreelMappingInfoClassName","updateListOfCreelPositions","getTextileDataIcon","getTextileDataName","canShowTextileDataAmount","matButtonToggleChange","mappedColoredYarnSet","reversedIndexPosition","hasCreelMap","calculatedYarnConsumptionForColoredYarnSet","setMappedColoredYarnSetAndListCreelPositions","replicateCreelPositionForColorsUntilLeastCommonMultiple","replicateCreelPositioForYarnTypesUntilLeastCommonMultiple","creelPositionForColorsToRepeat","numberOfRepititionsForCreelPositionForColors","creelPositionForYarnTypesToRepeat","numberOfRepititionsForCreelPositionForYarnTypes","withColumnMenu","withOnGridSizeChanged","resizeGrid","withLockPinnedColumns","withRowClassRules","withSuppressSizeToFit","TextileDataDetailComponent_span_8_Template","TextileDataDetailComponent_div_12_Template","TextileService","_TextileService","textileDataTypesToEmitEventForOnAction","COMPANY_WEAVE_STRUCTURE","EVENT_ALERT","WEAVE_PATTERN","QUALITY_FINISHING","textileDataTypesToSaveNavigationNewItemData","RESOURCE_TYPE","OVERLAY_NO_DATA_SCALE_IF_ACTIONS_ARE_PRESENT","getGridApi","gridModelForTextileDataOverviewFromService","resetGridModelForTextileDataOverviewFromService","executeActionForItem","eventEmitter","managedRoute","navigateToAddPage","canDisableDeleteButton","disableDeleteButton","isSingleTextileDataRowSelected","deleteItem","selectedTextileDataItems","reloadData","infiniteGrid","rowsSelected","amountOfTotalCreatedTextileDataItemsSubject","multiDelete","isActionButton","selectedObject","getConfirmationDeleteMessage","hasMultipleSelected","entities","deleteSelectedTextileDataItem","exportGridApi","resolve","iconForSearch","isTextileDataTypeProductionSchedule","advancedSearchFiltersValues","updateGrid","previousValue","deselectRows","clearFocusedCell","gridResizable","resetRowHeights","listOfTextileData","getDisplayedRowCount","disableActionButton","initialiseGridOptionsForTextileDataOverview","autoSizeAllColumns","loadData","rememberScrollPosition","initialGridOptions","subscribeToDeviceChanges","observeDeviceChanges","device","Device","PHONE","setHeaderNameForColumn","columnName","getColumnDef","getElementsByClassName","obj","attributes","ensureIndexVisible","_this$gridModelForTex","isEditing","getObjectName","getObjectNameForList","selectedItemId","deleteItemEmit","textileDataItemHasBeenRemoved","deleteRequest","multiDeleteResponses","handleDeletionResponse","deletedRows","succesfullDeletedIds","multiDeleteResponse","handleConflics","unsuccesfullDeletedIds","_event$node","textileDataOfRow","markForCheck","onGridReadyEvent","columnDefsValue","textileDataOverviewColDef","mobile","getOverlayNoDataCreateParamKey","EVENT","DEVICE_TEMPLATE_COUNTER","DEVICE_TEMPLATE_COUNTER_CATALOG","DEVICE_TEMPLATE_CONFIGURATION","DEVICE_TEMPLATE_CONFIGURATION_CATALOG","getOverlayNoDataActions","_this$getOverlayNoDat","addAction","getOverlayNoDataHideDescriptionCreateParamKey","searchFilter","_this$gridModelForTex2","_this$gridModelForTex3","filterDescriptionParam","paramKeyCreate","_this$gridModelForTex4","withOnFirstDataRendered","updateGridOptions","CreelPositionsHelper","getPositionOfMaterialTypeCreelInList","materialTypeCreel","uniqueListOfMaterialTypeCreelPositions","getUniqueListOfMaterialTypeCreelPositions","materialTypeCreelPosition","groupAndMaterialTypeCreelPositions","materialTypeCreelPositionsCache","uniqueGroupAndMaterialTypeCreelPositions","groupOrMaterialTypeCreel","duplicateSelectedMaterialSetTypesAndGroups","CreelPositionDetailsComponent_Conditional_0_Conditional_10_Conditional_1_Template","groupSelectedMaterialSetTypesAndGroups","deleteSelectedMaterialSetTypesAndGroups","canShowDuplicate","addEmptyGroupToSelectedCreelPosition","emitCreelPositionChanges","entry_r7","getPositionOfMaterialTypeCreel","droplistsRecursive","canShowError","isDraggingOver","CreelPositionDetailsComponent_Conditional_0_div_20_div_2_Template","CreelPositionDetailsComponent_Conditional_0_div_20_Conditional_3_Template","CreelPositionDetailsComponent_Conditional_0_div_20_Conditional_4_Template","canShowMaterialType","CreelPositionDetailsComponent_Conditional_0_Conditional_8_Template","CreelPositionDetailsComponent_Conditional_0_Conditional_10_Template","CreelPositionDetailsComponent_Conditional_0_Conditional_11_Template","drop","CreelPositionDetailsComponent_Conditional_0_div_20_Template","CreelPositionDetailsComponent_Conditional_0_Conditional_21_Template","canShowWarning","getCreelPositionViewIndex","hasSelectedMaterialSetTypesOrGroups","canShowCreelPreview","CreelPositionDetailsComponent","_CreelPositionDetailsComponent","DEFAULT_AMOUNT","creelPositionHelper","setDroplistsRecursive","setCreelPreview","firstChange","deselectAllPreviouslySelectedMaterialTypesAndGroups","previousContainer","moveItemInArray","previousIndex","transferArrayItem","canShowDetailsOfCreelPosition","selectedHorizontalPositionsOfCreelPosition","selectedMaterialSetTypes","getAllSelectedMaterialSetTypesAndGroups","resetAllSelectedMaterialSetTypesAndGroups","horizontalPositionOfGroupCreelPosition","horizontalPositionsOfCreelPositions","deselectAllSelectedMaterialTypesAndGroups","selectedColorsAndGroups","getMaterialTypeCreel","_this$creelPosition","childItem","getIdsRecursive","_item$group","horizontalPositionOfCreelPositions","CreelPositionDetailsComponent_Conditional_0_Template","horizontalPositionOfMaterialTypeCreelPosition","getPreviewColorCode","getMaterialTypePositionViewIndex","materialTypeName","MaterialTypeComponent","_MaterialTypeComponent","creelPositionDetailsComponent","typeChanges","maxMaterialTypeNameSize","setMaterialTypeName","convertRGBToHexadecimalColorCode","indexOfHorizontalPositionOfCreelPosition","incrementAmount","decrementAmount","canDecrementAmount","onMaterialTypeClick","metaKey","altKey","selectedMaterialTypes","canShowSelectedIndicator","forwardRef","MaterialTypeComponent_div_1_Template","MaterialTypeComponent_mat_icon_2_Template","MaterialTypeComponent_div_4_Template","MaterialTypeComponent_div_5_Template","emitGroupChanges","horizontalPositionOfGroupCreelPosition_r4","connectedDroplist","onDragEntered","onDragStarted","MaterialTypeGroupComponent_div_18_div_2_Template","MaterialTypeGroupComponent_div_18_app_material_type_3_Template","MaterialTypeGroupComponent_div_18_app_material_type_group_4_Template","MaterialTypeGroupComponent","_MaterialTypeGroupComponent","groupChanges","onMaterialTypeGroupClick","selectAllChildMaterialTypesAndGroups","relinkOwnDroplistReference","dropContainer","droplist","siblings","connectedTo","c","CdkDropList","_dropLists","d","ref","_dropListRef","asapScheduler","MaterialTypeGroupComponent_div_2_Template","MaterialTypeGroupComponent_div_3_Template","MaterialTypeGroupComponent_mat_icon_5_Template","MaterialTypeGroupComponent_mat_icon_9_Template","MaterialTypeGroupComponent_div_18_Template","showMaterialTypeName","materialType_r2","PreviewForCreelPositionComponent_div_2_div_1_Template","getMaterialTypesToShow","maxMaterialTypesToShow","PreviewForCreelPositionComponent","_PreviewForCreelPositionComponent","gapBetweenColorsInPixels","getAmountOfMaterialTypesToShow","moreMaterialTypesAvailable","canShowNameOfFirstColor","canShowMaterialTypeName","PreviewForCreelPositionComponent_vdw_ellipsis_label_1_Template","PreviewForCreelPositionComponent_div_2_Template","PreviewForCreelPositionComponent_app_more_items_available_3_Template","CreelPositionComponent","_CreelPositionComponent","deselectAllSelectedCreelPositions","dropIndicatorClass","attachListeners","detachListeners","onCreelPositionClick","selectedCreelPosition","onMetaOrAltKeyDown","onShiftKeyDown","onNoKeyDown","getData","horizontalPositionOfMaterialSetPosition","repeatedHorizontalCreelPosition","horizontalPosition","creelPositionElement","onDragEnter","onDragLeave","onDropListener","onDragEnterListener","onDragLeaveListener","onDragOverListener","indexOfFirstSelectedCreelPosition","indexOfCurrentlySelectedCreelPosition","hasMoreThanOneCreelPositionSelected","CreelPositionComponent_div_2_Template","CreelPositionComponent_div_3_Template","CreelPositionComponent_mat_icon_6_Template","CreelPositionComponent_mat_icon_10_Template","creelPositionIndex_r5","canShowErrorForCreelPosition","getActualCreelPositionIndex","onDropCreelPosition","CreelPositionsComponent_article_3_app_creel_position_1_Template","CreelPositionsComponent","_CreelPositionsComponent","CreelPositionsComponent_div_1_Template","CreelPositionsComponent_article_3_Template","getPreviewBoxShadow","getColorHexCode","clickSubtract","clickAdd","GridSelectPreviewComponent_div_0_div_6_button_1_Template","GridSelectPreviewComponent_div_0_div_6_button_2_Template","hasAlreadyAddedItem","GridSelectPreviewComponent_div_0_div_1_Template","GridSelectPreviewComponent_div_0_div_6_Template","isColorPreview","getAltLabel","canShowControls","GridSelectPreviewComponent","_GridSelectPreviewComponent","canShowPreview","subtractClick","addClick","unsub","maxFetchPerSlice","onRequestCompleted","er","param","search","initSimpleSearchSubject","GridSelectPreviewComponent_div_0_Template","createColor","SelectColorComponent","_SelectColorComponent","colorPicker","COLOR_EDIT_PERMISSION","searchSubject","filterColors","searchValue","showColorPickerPopup","rxJsFilter","saveColor","_this$grid","addColorToCreelPosition","removeColorFromCreelPosition","removeColorFromHorizontalPositions","hasAlreadyAddedColor","gridOptionsForListOfColors","getColumnDefsForListOfColors","getNoRowsOverlayTitleParameters","withDndSource","withDndSourceOnRowDrag","dragStart","horizontalPositions","shouldRemove","SelectColorComponent_p_8_Template","createYarn","SelectYarnTypeComponent","_SelectYarnTypeComponent","YARN_EDIT_PERMISSION","filterYarnTypes","addYarnTypeToCreelPosition","_horizontalPosition$y","removeYarnTypeFromCreelPosition","removeYarnTypeFromHorizontalPositions","hasAlreadyAddedYarnType","SelectYarnTypeComponent_p_8_Template","_TextileDataSharedModule","OverviewListYarnSetService","OverviewListWeaveStructureService","AgGridModule","VirtualScrollerModule","ColorPickerModule","COLORED_YARN","GROUPED_WEAVE_STRUCTURE","DEVICE_TEMPLATE_CATALOG","DEVICE_TEMPLATE","REPORT_ITEM","DECLARATION","AUTOMATIC_STOP_GROUP","REJECT_REASON","MANAGE_WEAVE_STRUCTURE","FinishingTemplateModule","ColorModule","ColorSetModule","ColoredYarnModule","YarnSetModule","ColoredYarnSetModule","WeftColoredYarnSetModule","YarnTypeModule","MachineQualityModule","CreelModule","WeaveStructureModule","GroupedWeaveStructureModule","CompanyWeaveStructureModule","BuggyModule","FixedScheduleModule","textileDataRouting","fromTuftProduct","GridOwnerLabelComponent","_GridOwnerLabelComponent","_params$data$fromVand","getLabelForOwner","_OverviewListWeaveStructureService","canClickName","isManagedRoute","showQualityType","canClick","BooleanUtils","booleanComparator","weavePatterns","yarnSets","hasYarnSetState","initialiseAddYarnSetPage","emptyYarnSetState","yarnSetState","isDuplicatingYarnSet","isEditingYarnSet","yarnSetToSave","_AddYarnSetPageComponent","GridYarnSetPreviewComponent","_GridYarnSetPreviewComponent","getYarnTypes","showYarnSetDetails","yarntypes","_OverviewListYarnSetService","getColumnDefsForListOfYarnSets","possibleValuesSubject","listOfYarnSet","getPossibleNumberOfPositions","getNumberOfYarns","getPossibleNumberOfYarns","yarnSetOverviewListJSON","yarnCountInNm","_yarnConsumption","_yarnCountInNm","ToolType","SINGLE_MOLD","AddToolViewMode","STATUS","CAVITIES","PRODUCTS","TOOL_TRANSLATION_KEY","toolType_r4","addToolGeneralForm","speedUnit_r7","AddToolPageComponent_Conditional_4_vdw_invalid_form_message_7_Template","AddToolPageComponent_Conditional_4_vdw_invalid_form_message_8_Template","AddToolPageComponent_Conditional_4_For_21_Template","AddToolPageComponent_Conditional_4_mat_error_22_Template","AddToolPageComponent_Conditional_4_Conditional_28_Template","AddToolPageComponent_Conditional_4_mat_error_32_Template","AddToolPageComponent_Conditional_4_mat_error_33_Template","AddToolPageComponent_Conditional_4_Conditional_40_Template","AddToolPageComponent_Conditional_4_mat_error_41_Template","AddToolPageComponent_Conditional_4_For_51_Template","currentTool","httpToolsCustomSettingsService","toolTypes","addToolCavitiesForm","addToolSetupForm","addToolStatusForm","addToolMatchingCriteriaForm","getToolPermission","AddToolPageComponent","_AddToolPageComponent","tools","translationParameters","addToolForm","getCurrentTool","toolToSave","isEditingTool","deleteTool","_this$addToolGeneralF","_this$products","ToolCustomSettingsComponent","setWaiveCyclesValidators","resetCavitiesValidators","setCavitiesValidators","isDuplicatingTool","AddToolPageComponent_Conditional_1_Template","AddToolPageComponent_Conditional_4_Template","AddToolPageComponent_Conditional_5_Template","AddToolPageComponent_Conditional_6_Template","AddToolPageComponent_Conditional_7_Template","AddToolPageComponent_Conditional_8_Template","AddToolPageComponent_Conditional_9_Template","MatchingCriteriaOverviewService","_MatchingCriteriaOverviewService","colDefBuilder","showStandardEfficiencyColumn","showSpeedColumn","isEditable","getResourceType","getResource","getColDefForSpeed","getColDefForStandardEfficiency","withEditable","CustomCellEditorComponent","_params$data$baseStan","allowDecimals","placeholder","CustomCellEditorRendererComponent","_params$data$baseStan2","_params$data2","getSpeed","_params$data$baseStan3","_params$data3","_params$data$baseStan4","_params$data4","getStandardEfficiency","_params$data$machineT","_params$data5","_params$data6","_params$data7","_params$value2","MatchingCriteriaComponent","_MatchingCriteriaComponent","selectMachineTypeService","enableDragHandle","enableMultiRowSelect","showMachineGroup","matchingCriteriaChange","plasticMachineTypes","plasticMachines","matchingcriteriaData","_this$configGridApi","setMachineConfig","setMachineGroupConfig","setMachineTypeConfig","configGridApi","setDisabledForOverlay","setConfig","selectedMatchingCriteriaWithMachines","selectedMachines","existingSelectedMachineIds","itemsToAdd","newSelectedMachineIds","setLatestMatchingCriteriaList","selectMachineType","selectedMatchingCriteriaWithMachineTypes","selectedMachineTypes","plasticMachineTypeConfig","existingSelectedMachineTypeIds","newSelectedMachineTypeIds","selectedMatchingCriteriaWithMachineGroups","existingSelectedMachineGroupIds","newSelectedMachineGroupIds","_this$configGridApi2","builderFactory","withOnCellValueChanged","onCellValueChanged","_params$rowNode$data","withOnRowDragEnd","getColDefForMachine","machinesGroups","rowsToRemove","querySelectorAll","getLatestMatchingCriteriaList","updatedData","latestMatchingCriteriaList","_MatchingCriteriaModule","STOCK_LOCATION_TRANSLATION_KEY","_AddStockLocationComponent","stockLocationService","getStockLocationDetails","isEditingStockLocation","addStockLocationForm","_this$addStockLocatio","stockLocationToSave","getCurrentStockLocation","AddStockLocationComponent_Conditional_1_Template","AddStockLocationComponent_vdw_invalid_form_message_11_Template","AddStockLocationComponent_vdw_invalid_form_message_12_Template","ToolOverviewService","_ToolOverviewService","TEAL","YELLOW","AQUA","_params$data$pieceCyc","_params$data$cavities","_params$data$usedCavi","_ToolCustomSettingsComponent","toolCustomSettings","ToolSelectionService","_ToolSelectionService","addRoute","_ToolOverviewPageComponent","ToolOverviewPageComponent","toolOverviewService","crudColdef","getTools","routeInfo","toolRouting","utilitiesRouting","_BackendLimitsConstants","HttpYarnConsumptionService","_HttpYarnConsumptionService","calculateYarnConsumptionForProductionOrder","calculateYarnConsumptionPerDent","filterObjects","AdvancedSearchSelectObjectComponent","_AdvancedSearchSelectObjectComponent","weaveStructures","weftColoredYarnSets","weaveStructureColumnPipe","showSearchBar","objectSelected","actionsHeightInPx","minimumBottomMarginInPx","setSubtitle","initialiseColumnsDefsForListOfObjects","initialiseGridOptionsForListOfObjects","getListOfObjects","cancelObjectSelection","canChooseSelectedObject","chooseSelectedObject","canShowLatestVersionToggle","objectInput","getOverlayTranslationKey","gridOptionsForListOfObjects","columnsDefsForListOfObjects","getGridIdentifier","onRowDoubleClicked","withAutomaticRowSelection","withAutomaticButtonFocusOnRowSelection","FooterConstants","CHOOSE_BUTTON_CLASS_NAME","subtitle","getMachineQualities","getColoredYarnSets","getCreels","getWeaveStructures","getMainDesigns","getWeftColoredYarnSets","getPlasticProducts","listOfObjects","getDefaultMachineQualityParameterForPropertyName","pileHeightUnit","getNoDataTranslation","nameTranslationKey","numberOfCreelPositionsTranslationKey","overviewListColorSetName","overviewListYarnSetName","previewTranslationKey","getColumnDefsForListOfMachineQualities","getValueForWeaveStructureCell","getHeaderNameFromUnit","getColumnDefsForListOfColorSets","getNumberOfCreelPositionsForColorSet","getCommaSeparatedStringForColorSet","getColumnDefsForListOfCreels","getColumnDefsForListOfWeaveStructures","getValueForQualityTypeCell","getColumnDefsForListOfDesigns","getColumnDefsForListOfWeftColoredYarnSets","getColumnDefsForListOfPlasticProducts","getColumnDefsForListOfTools","fromUnit","toUnit","conversionResult","buildAgGridCellTooltipWithUnitConversion","calculateGridHeight","gridHeight","gridElement","AdvancedSearchSelectObjectComponent_vdw_slide_toggle_7_Template","AdvancedSearchSelectObjectComponent_vdw_filter_8_Template","_SharedModule","DateTimePipe","HttpClientModule","ReactiveFormsModule","FormsModule","CommonFormsModule","LabelModule","HeaderModule","GridUtilsModule","ToastModule","FilterModule","SlideToggleModule","ZoneInputModule","PatternModule","RadioToggleButtonModule","MinutesFromNowPipeModule","ReverseArrayPipeModule","CanShowErrorForFormControlModule","CapitalFirstLetterPipeModule","HexValuePipeModule","TagModule","AutoFocusModule","DatepickerFormInputModule","DialogButtonModule","DialogModule","DistanceSpecifierModule","InputL10nDecimalModule","FilterChipsModule","MessageContainerModule","MobilePageHeaderModule","TabsMenuModule","TabsMenuCardModule","ObjectSelectionModule","StringInputModule","FooterModule","ProgressButtonModule","StatusBarModule","LocalStorageModule","forRoot","prefix","BreadcrumbModule","ResponsivenessModule","InputChipModule","DateTimePipeModule","DialogHeaderComponent","development","isDebugMode","siteIdHotjar","useTexStateWithDynamicTemplates","raw","hash","distance","tag","semver","suffix","semverString","LoadRuntimeApplicationEnvironmentError","BaseError","HttpRuntimeApplicationEnvironmentService","_HttpRuntimeApplicationEnvironmentService","httpHandler","HttpClient","loadEnvironment","environmentUrl","CustomSignalrHttpClient","DefaultHttpClient","configureHeaders","headers","initializeApplicationEnvironment","applicationEnvironment","injector","MsalService","InitializeL10n","_InitializeL10n","languageService","initializeNavigationHistory","initializeSignalrHubConnectionFactory","signalrLogger","SignalrHubConnectionFactoryService","SubscriptionId","CompanyId","BrowserInstanceId","authenticationresult","acquireTokenSilent","account","instance","getAllAccounts","initializeGridOptionsBuilderFactory","gridSettingsService","GridOptionsBuilderFactoryService","columnState","initializeMSALInstance","PublicClientApplication","redirectUri","postLogoutRedirectUri","navigateToLoginRequestUrl","cache","cacheLocation","BrowserCacheLocation","LocalStorage","system","allowNativeBroker","loggerOptions","logLevel","LogLevel","Warning","Trace","piiLoggingEnabled","initializeMSALInterceptorConfig","protectedResourceMap","interactionType","InteractionType","Redirect","CustomRouteReuseStrategy","BaseRouteReuseStrategy","shouldReuseRoute","future","BackgroundTask","_action","backgroundTaskJSON","BackgroundJob","numberOfRetries","_jobType","_tasks","_errorMessage","_numberOfRetries","backgroundJobJSON","hasCompleted","getFailedTask","hasCancelled","getCancelledTask","hasJobFailed","hasJobBeenCancelled","isJobTypeProcessSingleBmp","isJobTypeGenerateScheduleZip","isJobTypeCompleteOrder","BackgroundJobGlobalStatusUpdate","amountOfStartedJobs","amountOfFailedJobs","amountOfCompletedJobs","_amountOfStartedJobs","_amountOfFailedJobs","_amountOfCompletedJobs","backgroundJobGlobalStatusUpdateJSON","HttpBackgroundJobsService","_HttpBackgroundJobsService","backgroundJobsJSON","getGlobalStatus","backgroundJobGlobalStatusUpdate","jobId","DrawingRecolorInformation","drawingRecolorInformationJSON","UploadDrawingInfo","designMap","_designMap","uploadDrawingJSON","designMapJSON","GroupedDrawing","commercialWidthInCM","technicalWidthInPx","_commercialWidthInCM","_drawingIds","_configurationIds","groupedDrawingJSON","_groupedDrawingJSON$c","_groupedDrawingJSON$t","_groupedDrawingJSON$d","_groupedDrawingJSON$c2","HttpDrawingsService","_HttpDrawingsService","_uploadQueue","getAllWithoutImageData","VIEW_MODE_HTTP_PARAMETER_NAME","LOAD_CONFIGURATIONS_HTTP_PARAMETER_NAME","drawingsJSON","loadConfigurations","exclude","startIndex","loadConfiguration","drawingImageId","drawingImageSignature","deleteMultiple","shapeAbbreviation","removeDrawingImagesFromUploadQueue","namesOfDrawingImagesToRemove","uploadDrawingImages","drawingImages","pvdFile","pvd","uploadDrawingInfo","responseElement","deleteDrawingImages","drawingImagesIds","getRecoloredImageConfiguration","dimensions","numberOfWeftSelectionColumns","outputHeightInPx","outputWidthInPx","processThreadByThread","getRecoloredPathLabelImage","freePatternId","reader","FileReader","onloadend","readAsDataURL","drawingNameAvailable","saveAll","overwriteExistingDrawings","processDrawingConfigurationIntoEpDrawing","drawingName","downloadFile","downloadPVDFile","yarnConsumptionId","getDrawingInfoByName","drawingInfoJSON","getGroupedDrawings","groupedBy","groupedDrawingsJSON","HttpGridSettingsService","_HttpGridSettingsService","gridSettingJSON","gridSetting","MediaType","SVG","PNG","CONNECTIVITY_TOAST","HttpRequestManagerService","_HttpRequestManagerService","cancelPendingRequestsSubject","cancelPendingRequests","onCancelPendingRequests","InterceptedHttp","_InterceptedHttp","connectivityToast","httpRequestManagerService","appInsightsLoggingService","assetsPath","timeoutDurationForSlowConnection","canShowConnectivityToast","intercept","canIntercept","requestId","setRequestIdAndUserIdOnErrorLoggingScope","Accept","ConnectionId","getConnectionId","setHeaders","handleRequest","handle","setTagOnErrorLoggingScope","setTag","isMediaUrl","isMediaContent","checkForSlowConnection","delay","attempt","timer","_error$error2","severity","getErrorSeverity","handleBlobError","_error$error","BackendError","requestEnded","clearTimeout","connectivityToastTimeout","blobToString","errorResponse","err","ErrorCode","onerror","readAsText","FATAL","getFileExtension","lastIndexOf","show","SignalrEventService","_SignalrEventService","getEventExecutedSuccessfullyUpdates","SignalrBackgroundJobService","_SignalrBackgroundJobService","updateForBackgroundJobGlobalStatus","REALTIME_SUBSCRIPTIONS","SignalrSubscriptionService","_SignalrSubscriptionService","getSubscriptionCacheCleared","ConnectivityToastRef","overlayRef","dispose","isVisible","_this$overlayRef","overlayElement","ToastAnimationState","DEFAULT","CLOSING","slideDownUpAnimation","marginTop","pixels","timings","trigger","transition","animate","ConnectivityToastComponent","_ConnectivityToastComponent","animationState","initialiseComponent","didRequestEnd","setAnimationStateToClosing","onSlideAnimationFinished","isToStateClosing","toState","isAnimationStateClosing","subscribeToRouteEventChanges","attachClickEvent","ConnectivityToastService","_ConnectivityToastService","overlay","parentInjector","didRequestEndSubject","_this$connectivityToa","connectivityToastRef","positionStrategy","global","centerHorizontally","create","Injector","providers","componentPortal","ComponentPortal","attach","_this$connectivityToa2","ConnectivityToastModule","_ConnectivityToastModule","OverlayModule","NavigationContextService","_NavigationContextService","AccountSwitchComponent","_AccountSwitchComponent","showExpanded","colorPalette","PRIMARY_AQUA_400","PRIMARY_TEAL_400","PRIMARY_YELLOW_400","PRIMARY_PINK_400","PRIMARY_PURPLE_400","firstCharacter","charAt","backgroundColor","AccountSwitchComponent_mat_icon_6_Template","subscription_r2","company_r3","subscriptionClicked","isActiveSubscription","AccountSwitcherDialogComponent_Conditional_1_For_1_For_4_Template","AccountSwitcherDialogComponent_Conditional_1_For_1_Template","navigationContext","AccountSwitcherDialogComponent","_AccountSwitcherDialogComponent","hoverDialogService","menuTreeViewContext","_sub$company","registerElement","setHovered","disconnectAll","connectAll","reload","profileClicked","setActive","logoutClicked","manageSubscriptionsClicked","creditsUrl","AccountSwitcherDialogComponent_Conditional_1_Template","AccountSwitcherDialogComponent_Conditional_2_Template","MobileNavigationComponentService","_MobileNavigationComponentService","navigationSearchService","chooseMenuItem","_item$path","isCurrentPathEqualTo","currentBasePath","endOfNavigationItemPath","getMenuItemEntryFromNavigationBarItem","MobileNavigationSidebarComponent","_MobileNavigationSidebarComponent","sideNavigationStateService","navigationComponentService","accountSwitcherActive","startSubscription","subscriptionName","accountSwitcherClicked","_this$dialogBuilder2","accountSwitcher","openAtElement","ArrowPosition","closeNavigation","MobileNavigationSidebarComponent_vdw_menu_item_7_Template","BadgeLabelPipe","_BadgeLabelPipe","isSearchAvailable","NavigationMobileComponent","_NavigationMobileComponent","setNavBarItems","quickAccessNavBarItems","isSmallItem","activeNavigationBarItem","getCurrentActiveNavigationItem","NavigationMobileComponent_mat_list_item_1_Template","BackgroundJobsDialogComponent","_BackgroundJobsDialogComponent","shouldHideEntry","entry_r2","idx_r3","SIDEBAR_ICON_WIDTH_IN_PX","processClicked","processEntry","NavigationComponent","_NavigationComponent","_this$dialog","MAX_NESTED_LEVEL","ACCOUNT_SWITCH_WIDTH_MARGIN","FAVORITED_KEY","ACCOUNT_SWITCH_DIALOG_WIDTH","initializeSubscription","itemFavorited","setFavorited","_flattenedItems$filte","filteredOrderItems","filteredProductItems","setMenuItems","flattenedItems","getFlattenedMenuItems","filteredFlattenedItems","processMenuItems","getMenuItemPath","setFavouriteItems","possibleEntries","_this$router$url","second","sidebarWidth","withAutoHeight","processActive","processItem","favorites","isFavorited","hideFavorites","storedFavorites","currentFavorites","favoritedItem","favoritedItems","_this$dialogBuilder3","processEmptyNavigationItems","processSingularNestedItems","emptyItems","_entry$childEntries","emptyItem","findParentEntry","singularNestedItems","_entry$childEntries2","singularNestedItem","_parent$childEntries","rootIndex","_this$localStorage$ge","favoriteLinks","NavigationComponent_vdw_menu_tree_view_5_Template","NavigationComponent_vdw_menu_item_8_Template","resizeHovered","NavigationHoverAreaComponent","_NavigationHoverAreaComponent","HOVER_TIMEOUT","sidebarOpened","getSidebarOpened","viewInitialized","areaEntered","hoverEntered","openHoverDialog","sidebarHoverButton","hoverArea","areaLeft","matDrawer","isDrawerOpened","change_r1","NewUpdateAvailableComponent_For_11_For_7_For_8_Template","type_r2","getChangesOfType","changelog_r3","NewUpdateAvailableComponent_For_11_For_7_Template","getChanges","NewUpdateAvailableComponent","_NewUpdateAvailableComponent","swUpdate","changelogs","setDate","changesOfType","changelog","updateApp","activateUpdate","types","changesTypes","_this$changelogs$0$ch","isoDate","DATE_HUGE","NewUpdateAvailableComponent_For_11_Template","UpdateService","_UpdateService","INTERVAL_TO_CHECK_FOR_UPDATES","MAX_DELAY_TO_RELOAD","dialogOpen","checkForUpdates","swUpdateAvailable","versionUpdates","rxjsFilter","updateOnStartup","updateOnInterval","partition","showNewUpdateDialog","getNewerVersionsChangeLog","_this$intervalSubscri","intervalSubscription","pollForUpdates","semverCompare","checkForUpdate","withAutoFocus","_this$intervalSubscri2","NavigationBreadcrumbsComponent","_NavigationBreadcrumbsComponent","ADD_URL","EDIT_URL","breadcrumbItems","disablePredicate","breadcrumb","_breadcrumb$data$rout","isNewKnownPath","setBreadcrumbs","subscribeToNameChanges","subscribeToIsUsingBreadcrumbsDirectiveChanges","onBreadcrumbItemsChanged","splitUrl","urlToTrim","isCustomSettingsPage","activeMenuItem","isAddOrEditRoute","NEW_TRANSLATION_KEY","currentActiveMenuItem","getCurrentActiveBreadcrumbItem","newName","isUsingBreadcrumbsDirective","_this$breadcrumbItems","maintenanceNotification","settingsClicked","NavigationHeaderComponent","_NavigationHeaderComponent","hoverDialogBuilderService","MAX_NOTIFICATIONS_VALUE","notificationsComponent","SETTINGS_PERMISSION","setUnreadNotifications","setMaintenanceNotifications","hasSettingsPermission","_subscription$hasPerm","sidebarIcon","getSidebarIcon","_this$sidebarButton","sidebarButton","hasNoUnreadNotifications","unreadNotifications","helpClicked","sidebarEnter","sidebarButtonClicked","toggle","closeHoverDialog","canShowMaintenanceNotification","keyboardIcon","isDesktop","_subscription","_subscription2","_this$notificationSer","isAfter","NavigationHeaderComponent_div_7_Template","notificationsButton_r3","NavigationHeaderComponent_button_14_Template","ApplicationLayoutRegisterService","_ApplicationLayoutRegisterService","registerElements","navigationHeaderType","onOpenedChange","sideNavInitialized","getMode","isTablet","isSideNavCollapsed","AppComponent_div_0_div_5_ng_container_1_Template","AppComponent_div_0_app_navigation_resizer_1_Template","AppComponent_div_0_mat_drawer_3_Template","AppComponent_div_0_div_5_Template","AppComponent_div_0_app_navigation_hover_area_7_Template","canShowMenu","resizeDirective","isResizing","toggleSideNav","getSideNavStateIcon","AppComponent_div_1_div_3_Template","AppComponent_div_1_app_navigation_mobile_8_Template","AppComponent_div_1_mat_sidenav_9_Template","AppComponent_div_1_div_10_Template","canShowMobileNavigation","AppComponent","_AppComponent","drawer","drawerInitialized","iconRegistry","sanitizer","subscriptionSignalr","updateService","matSnackBar","applicationLayoutRegistering","HOTJAR_VERSION","setUpIcons","calculateDpi","updateSideNavState","subscribeToApplicationUpdates","subscribeToApplicationUpdateApplied","subscribeToMediaChanges","checkForExperimentalLanguageUsage","subscribeToAuthenticationChanges","setLoggerLevel","setUpHotjar","setupApplicationInsightsLogging","resetSwitchingSubscriptions","isDefaultRoute","isLoginRoute","isLoadingMachineTechnicalWeaveSettingsFile","showUsedBackendSnackbar","isSideNavOpen","SOLID_ICONS","addSvgIcon","bypassSecurityTrustResourceUrl","ICONS","iconSet","icons","div","reloadPage","subscribeToSubscriptionSignalr","showWarning","extendedTimeOut","canShowNewUpdateAppliedToast","showNewUpdateApplied","lastNewUpdateActivationTimestampString","lastUpdate","NavigationStart","closeAll","activeLanguage","getActiveLanguage","isExperimentalLanguage","notifyUserAboutExperimentalLanguage","authenticated","authenticatedChanges","localeCompare","onTap","Hotjar","applicationInsightsKey","AppComponent_div_0_Template","AppComponent_div_1_Template","NavigationResizerComponent","_NavigationResizerComponent","appComponent","SIDEBAR_MIN_WIDTH","SIDEBAR_MAX_WIDTH","drawerElement","_content","drawerContent","_container","getElementRef","cachedSidebarWidth","resizer","marginLeft","cachedResizeValue","onResizeEnd","resizeEntered","resizeLeft","ResizeElementDirective","loggerConfig","WARN","TRACE","serverLogLevel","OFF","AppModule","_AppModule","bootstrap","MsalRedirectComponent","ErrorHandler","GlobalErrorHandler","RouteReuseStrategy","externalUrl","WINDOW_PROVIDERS","APP_INITIALIZER","useFactory","multi","deps","INJECTOR","MAT_RIPPLE_GLOBAL_OPTIONS","animation","enterDuration","exitDuration","centered","ENVIRONMENT","MAT_FORM_FIELD_DEFAULT_OPTIONS","floatLabel","MSAL_INTERCEPTOR_CONFIG","MSAL_INSTANCE","MSAL_GUARD_CONFIG","loginFailedRoute","MsalBroadcastService","HTTP_INTERCEPTORS","MsalInterceptor","SignalrLogger","TranslateService","provideLuxonDateAdapter","BrowserModule","BrowserAnimationsModule","onSameUrlNavigation","L10nIntlModule","L10nTranslationModule","defaultLocale","LanguageService","DEFAULT_LANGUAGE","keySeparator","asset","schema","AVAILABLE_LANGUAGES","locale","loader","translationLoader","TranslationLoader","translationHandler","TranslationHandler","ReloadRequiredModule","ServiceWorkerModule","register","LoggerModule","MenuTreeViewModule","AccountSwitchModule","ApplicationLayoutModule","MsalModule","ResizeElementModule","ProgressSpinnerModule","enableProdMode","LicenseManager","setLicenseKey","__NgCli_bootstrap_1","bootstrapModule","ngZoneEventCoalescing","ngZoneRunCoalescing","navigator","serviceWorker","console","log","Language","en","nl","tr","zh","dateAdapter","storedLanguage","storedRegion","LOCAL_STORAGE_KEY_REGION","Settings","setLocale","setLanguage","changeLanguage","changeRegion","region","getActiveRegion","getAvailableLanguages","availableLanguageKey","getAvailableRegions","languageNames","Intl","DisplayNames","languageDisplay","REGIONS","displayName","EXPERIMENTAL_LANGUAGES","_LanguageService","_TranslationHandler","parseValue","parsedKey","replacer","provider","HttpHeaders","entityType","allowUnlock","_titleKey","_descriptionKey","_entityType","_entityName","_conflicts","_conflictType","_allowUnlock","_currentSubscription","createUnlockData","conflict_r2","navigateToConflictUrl","getConflictTypeTranslationKey","ConflictsDialogComponent_ng_container_2_ng_container_1_li_8_Template","getTitleCount","entityName_r4","conflictIndex_r5","ConflictsDialogComponent_ng_container_2_ng_container_1_Template","conflict_r7","ConflictsDialogComponent_ng_template_3_li_7_Template","_ConflictsDialogComponent","hasMultipleConflicts","_this$data","getButtonText","getChooseDialogCloseValue","ConflictsDialogComponent_ng_container_2_Template","ConflictsDialogComponent_ng_template_3_Template","ConflictsDialogComponent_p_5_Template","singleConflict_r8","_CommonFormsModule","MatFormFieldModule","_ProgressButtonModule","_ProgressSpinnerModule","_SplitButtonModule","MatDividerModule","_FooterModule","_LabelModule","_HeaderModule","_MessageContainerModule","_CanShowErrorForFormControlModule","_DialogModule","HoverDialogBuilderService","DialogOpenerService","RepositionWatchDialogFactoryService","getMessageTypeByLabel","createErrorMessageWithDescription","createMessageWithTypeAndDescription","VisibleContentForSelectAddObject","SELECT_OBJECT","ADD_OBJECT","ToastService","_ToastService","POSITION_CLASS","buttonText","titleIcon","statusBarClass","getActive","toastRef","toastrConfig","positionClass","preventDuplicates","resetTimeoutOnDuplicate","newestOnTop","ToastHelperService","_ToastHelperService","defaultTimeout","actionTypeToTranslationKeyMap","actionType","objectTranslationKey","mapObjectActionTypeToTranslationKey","ColDefBuilder","tooltipField","headerValueGetter","withHeaderCheckboxSelection","headerCheckboxSelection","isNumberOf","unitCount","headerNameTranslation","withoutHeaderName","headerComponentParams","showName","pinned","lockPinned","withLockPosition","lockPosition","lockVisible","initialHide","minWidth","withHiddenInToolPanel","suppressColumnsToolPanel","headerClass","headerComponent","withAutoHeaderHeight","autoHeaderHeight","cellClass","withCellStyle","cellStyle","withCellClassRules","cellClassRules","autoHeight","withCellRendererSelector","cellRendererSelector","editable","cellEditor","cellEditorParams","cellEditorPopup","isCellEditable","withCellEditor","withSingleClickEdit","singleClickEdit","withRowDragText","rowDragText","withRowDrag","rowDrag","flex","dndSource","dnd","dndSourceOnRowDrag","rowGroup","enableRowGroup","withShowDisabledCheckboxes","showDisabledCheckboxes","suppressHeaderMenuButton","suppressSizeToFit","withTooltipFieldForHeader","tooltipValueGetter","valueGetter","valueFormatter","comparator","sortable","resizable","withValueSetter","valueSetter","onCellClicked","withOnEvent","cellClickedEvent","onCellDoubleClicked","withInput","numeric","getQuickFilterText","withSetColumnFilterOnly","withTextMultiFilterCellRenderer","filterParams","filterValueGetter","conversionRate","showTooltips","getPossibleValuesAsync","translatedFalse","translatedTrue","suppressSelectAll","valA","valB","withMultiFilter","menuTabs","showTime","DATETIME_SHORT","withUnitConversion","buildAgGridCellTextWithUnitConversion","withSquareMMConversion","SQUARE_CENTIMETER","SQUARE_MILLIMETER","colIdAndField","withVerticalCenterAlignment","suppressMovable","eventHandlerName","eventHandler","existingEventHandler","flat","convertedValues","setCellClass","cellClassName","_event$column","stopEditing","startEditingCell","colKey","__decorate","__param","Optional","ColDefBuilderFactoryService","_ColDefBuilderFactoryService","onEdit","isObjectSelected","isMultiSelection","deleteSelectedObject","goToAddObjectContent","SelectObjectsDialogComponent_article_4_button_4_Template","SelectObjectsDialogComponent_article_4_button_5_Template","hasEditMethod","hasDeleteMethod","objectInUseWarningMessage","SelectObjectsDialogComponent_article_6_vdw_message_container_1_Template","SelectObjectsDialogComponent_article_6_mat_error_9_Template","SelectObjectsDialogComponent_article_6_mat_error_10_Template","addNewObjectForm","goToSelectObjectContent","SelectObjectsDialogComponent","_SelectObjectsDialogComponent","_data$deleteObject","_data$deleteMultipleO","_data$updateObject","visibleContent","previousCheckboxSelection","getAllObjects","saveNewObject","deleteObject","deleteMultipleObjects","asyncUniqueValidator","updateObject","selectedObjectId","loadObjects","setGridOptionsForListOfObjects","_this$optionsForListO","optionsForListOfObjectsGrid","canShowAddObject","_this$optionsForListO2","_this$optionsForListO3","_this$optionsForListO4","getSvgIcon","setVisibleContent","itemToEdit","showToastAndProceed","getActionTranslation","_this$optionsForListO5","_this$optionsForListO6","getMultiDeleteConfirmationMessage","handleMultiDeletionResponse","showToastAndDeselect","handleErrorResponse","handleConflicts","selectemItemId","isMultiDelete","showCheckboxIfNeeded","content","getColumnDefsForObjects","setSelectedObject","hasMultiDeleteMethod","newCheckboxSelection","checkboxSelection","refreshCells","SelectObjectsDialogComponent_article_4_Template","SelectObjectsDialogComponent_article_5_Template","SelectObjectsDialogComponent_article_6_Template","SelectObjectsDialogComponent_vdw_footer_7_Template","SelectObjectsDialogComponent_vdw_footer_8_Template","FormValueHelper","syncValuesOfFormFieldsByFactor","firstFormField","secondFormField","factorForConversionFromFirstFormFieldToSecondFormField","factorForConversionFromSecondFormFieldToFirstFormField","divisibleBy","firstFormFieldChanges","convertedValue","getConvertedValue","secondFormFieldChanges","factorForConversion","_isAvailable","checkName","compareValue","greaterThan","DuplicateValueValidator","createDuplicateValueValidator","formIndex","controlName","getControlName","duplicateValue","createDuplicateValidator","itemList","currentItem","ipAddressValidator","invalidIpAddress","MinMaxLimitValidator","minimumControl","getFormControlWithNameContaining","maximumControl","minimumValue","parseNumber","maximumValue","isNumber","nomatch","noSpace","ColorPickerPopupComponent","_ColorPickerPopupComponent","selectedColor","_data$canEdit","okButtonText","cancelButtonText","createEmptyColor","validatorFunction","colorCreated","addColor_r2","ColorPickerPopupService","_ColorPickerPopupService","_ColorPickerModule","UntypedFormBuilder","BreakpointResponsivenessViewModeService","_DialogButtonModule","ColorPickerFormInputModule","_ColorPickerFormInputModule","_ResizeElementModule","getRandomColor","getRandomColorWithIdAndName","getRandomColorWithIdNameAndColorCode","colorCode","_ResponsivenessModule","forwardMap","reverseMap","setMaps","convertDentsToMillimeters","convertDentsToMillimetersParameters","valueInDents","dents","nrCloths","nrGroundYarns","calculateWidthInPixelsForThreadByThread","convertDentsToWidthInMeter","heightInMeter","pickDensityInPicksPerMeter","_weaveStructure$picks","_weaveStructure$sendR","convertMachineOrderIdIfLegacy","amountOfNumbersInGivenMachineOrderId","amountOfNumbersInLegacyMachineOrderId","indexOfFirstDigit","convertMillimetersToPixels","numberInMM","dpi","convertPicksToHeightInMeter","picks","nrPicksPerColorLine","convertPixelsToHeightInMeter","nrPicksPerColorline","convertPixelsToMillimeters","numberInPx","UTC","fromObject","HOURS_IN_A_DAY","_TimeUtils","SECOND_IN_MS","MINUTES_IN_AN_HOUR","MINUTE_IN_MS","SECONDS_IN_A_HOUR","widthInMeter","marginInDents","WEAVE_QUALITY","TemporaryStateService","_TemporaryStateService","_this$temporaryState","temporaryState","setTemporaryState","UnitType","TECHNICAL","COMMERCIAL","_ArrayUtils","arrayMove","filterArrayOnAllProperties","arrayReverseIndex","accumulator","convertFalsyValuesToZeroAndGetMaxValue","validArray","selectorFn","groupBy","selector","_compare","copy","array1","array2","areEqual","_areEqual","item1","item2","sourceArray","removeList","removeSet","el","descending","ascending","readAsArrayBuffer","FractionUtils","fractionComparator","numeratorA","denominatorA","numeratorB","denominatorB","comparison","observeIntersection","threshold","intersectionObserver","IntersectionObserver","isIntersecting","unobserve","disconnect","MathUtils","divide","numerator","denominator","precision","modifier","NumberUtils","roundAwayFromZero","sign","objectA","objectB","keysA","keysB","keyA","areObjects","isObject","navigationItem","isAddPath","_path$endsWith","isEditPath","_path$endsWith2","isDuplicatePath","_path$endsWith3","dateTimeString","momentDate","timezoneOffsetInMinutes","tz","utcOffset","_CustomCellEditorRendererComponent","ErrorDetails","errorKey","_errorKey","autoSelect","getErrorMessage","notation","_CustomCellEditorComponent","canShowErrorMessage","POPUP_EDITOR_BORDER_WIDTH","POPUP_EDITOR_BORDER_HEIGHT","onKeyDown","nextElementIndex","call","focusableElements","_params$number","_params$multiple","_params$required","setValidations","setErrorMessages","subscribeToStatusChanges","setPopupStyle","hasUnit","isObjectSelection","stopClickEvent","preventDefaultOnMouseDown","onModelChange","dispatchEvent","canShowClearInputButton","cellStartedEdit","errorDetails","_document$querySelect","selectionData","_this$params$colDef$h","_this$params$colDef","_this$params$eGridCel","_this$params$colDef$c","_this$params$colDef2","_this$params$colDef3","_this$params$data","eGridCell","hasOwnProperty","badInput","_this$params$eGridCel2","_params$validations","validations","validation","UntypedFormControl","_params$validations2","defaultErrorDetails","cellRect","formField","timePickerMenu","_this$params$colDef$c2","_this$params$colDef4","_this$params$data2","Kt","MatFormField","TimePickerMenuComponent","CustomCellEditorComponent_Conditional_1_Template","CustomCellEditorComponent_Conditional_2_Template","CustomCellEditorComponent_Conditional_3_Template","CustomCellEditorComponent_Conditional_4_Template","CustomCellEditorComponent_Conditional_5_Template","CustomCellEditorComponent_Conditional_6_Template","CustomCellEditorComponent_Conditional_7_Template","CustomCellEditorComponent_Conditional_8_Template","DisabledRowGroupCellRendererComponent","_DisabledRowGroupCellRendererComponent","indentClass","parentClass","_EmptyCellRendererComponent","_startRow","_endRow","_sortModel","_filterModel","GridCheckedFlagComponent","_GridCheckedFlagComponent","isDefault","canShowIcon","GridCheckedFlagComponent_mat_icon_1_Template","_DateTimePipeModule","MatDatepickerContent","_handleUserSelection","replaceHandleUserSelection","selection","isRange","DateRange","_rangeSelectionStrategy","newSelection","selectionFinished","updateSelection","_dateAdapter","sameDate","_applyPendingSelection","isComplete","datepicker","DatePickerModule","_DatePickerModule","_InputChipModule","_ObjectSelectionModule","_TagModule","TimePickerFormInputModule","_TimePickerFormInputModule","_AutoFocusModule","_InputL10nDecimalModule","_GridUtilsModule","OverlayActionsService","_InputChipCellRendererComponent","chips","InputChipCellRendererComponent_For_2_Template","CheckboxCellEditorComponent","_CheckboxCellEditorComponent","valueChanged","inputElement_r2","inputElement_r5","GridInputComponent_div_0_input_5_Template","GridInputComponent_div_0_input_6_Template","canShowRequiredErrorElement","canShowStringInput","GridInputComponent","_GridInputComponent","isConfigurableValue","canShowInput","canShowRequiredError","updateValue","minValue","canShowInputElement","valueToSet","inputElement","GridInputComponent_div_0_Template","ProgressCellRendererComponent","_ProgressCellRendererComponent","isSaving","isSmallView","COMPACT_GRID_HEIGHT","_this$params","isButtonDisabled","getQuantity","isOrderline","LinkIconRendererComponent_Conditional_2_button_0_Template","iconIsVisible","LinkIconRendererComponent_Conditional_3_button_1_Template","_LinkIconRendererComponent","destroySubject","_params$canClick","_params$node","_params$node2","_params$id2","cachedParams","getName","isRowGroupParent","isContentSwitcher","_this$contentSwitcher","isNavigationHelper","_contentSwitcherEntry","_this$cachedParams$id","_this$cachedParams","_this$cachedParams2","_this$cachedParams$ro","_this$cachedParams$id2","_this$cachedParams3","_this$cachedParams4","hasNoName","LinkIconRendererComponent_Conditional_2_Template","LinkIconRendererComponent_Conditional_3_Template","NumberCellEditorComponent","_NumberCellEditorComponent","_params$isSmall","isSmall","getUnitTranslationKey","isCancelAfterEnd","errorState","toggleGroup","NumberCellRendererComponent","_NumberCellRendererComponent","showGroup","isGroupExpanded","NumberCellRendererComponent_mat_icon_1_Template","NumberCellRendererComponent_mat_icon_2_Template","NumberCellRendererComponent_div_5_Template","_LoadingCellOverlayComponent","LoadingCellOverlayComponent_Conditional_0_Template","LoadingCellOverlayComponent_Conditional_1_Template","StringCellEditorComponent","_StringCellEditorComponent","_params$colDef","maxlength","StringCountCellRendererComponent","_StringCountCellRendererComponent","StringCountCellRendererComponent_div_2_Template","_GridTagComponent","textOverflow","setLabel","TooltipCellRendererComponent","_TooltipCellRendererComponent","tooltip","_SlideToggleModule","_ZoneInputModule","_FilterModule","MultiLineDragModule","_MultiLineDragModule","_FilterChipsModule","_TabsMenuCardModule","_MobilePageHeaderModule","MobileDropdownModule","_MobileDropdownModule","MobilePositionIndicatorModule","_MobilePositionIndicatorModule","MobileBottomSelectorModule","_MobileBottomSelectorModule","StatusBar","totalRows","filteredRows","currentRowIds","totalGroupedRows","_totalRows","_filteredRows","_currentRowIds","_totalGroupedRows","statusBarJSON","_statusBarJSON$totalG","_StatusBarModule","SelectColorsModule","_SelectColorsModule","_PatternModule","SelectPatternsModule","_SelectPatternsModule","_BreadcrumbModule","triggerAction","ToastComponent","_ToastComponent","Toast","toastrService","toastPackage","canShowActionButton","ToastComponent_div_4_Template","ToastComponent_div_6_Template","display","_ToastModule","ToastrModule","toastComponent","PaginatorModule","_PaginatorModule","DatePickerComponent","_DatePickerComponent","datepickerHeader","DatepickerHeaderComponent","pickedStartDate","isRangePicker","startAtDate","onSelectedChanges","_DatepickerFormInputModule","_DistanceSpecifierModule","_CapitalFirstLetterPipeModule","_HexValuePipeModule","_HtmlWithVariablesToTextPipeModule","HtmlWithVariablesToTextPipe","_MinutesFromNowPipeModule","_ReverseArrayPipeModule","_RadioToggleButtonModule","SwipeModule","_SwipeModule","ShowOverlayForVirtualScrollerModule","_ShowOverlayForVirtualScrollerModule","CheckboxToggleButtonModule","_CheckboxToggleButtonModule","BitPatternEditorModule","_BitPatternEditorModule","ProgressBarModule","_ProgressBarModule","DelayedClassModule","_DelayedClassModule","ReloadRequiredComponent","_ReloadRequiredComponent","reloadApp","_ReloadRequiredModule","AppInsightsLoggingService","_AppInsightsLoggingService","appInsightsKey","appInsights","ApplicationInsights","instrumentationKey","enableAutoRouteTracking","disableTelemetry","enableDebug","disableFetchTracking","disableAjaxTracking","loadAppInsights","logException","exception","severityLevel","_this$appInsights","trackException","_GlobalErrorHandler","reloadRequiredDialogReference","alertDialogReference","chunkFailedMessageRegex","handleError","showReloadRequiredDialog","captureException","shouldDisplayMessage","showAlertDialog","getDialogById","autoFocus","disableClose","dialogConfig","AlertDialogData","createErrorData","AlertDialogComponent","SignalrHubConnectionBuilder","accessTokenFactory","connect","connectedSubject","connectSubscription","getHubConnection","onclose","safeStartHubConnection","disconnectSubscription","safeStopHubConnection","connectedUpdates","connected","connectionOptions","HubConnectionBuilder","withAutomaticReconnect","configureLogging","withUrl","queryFactory","disconnectAllSubject","connectAllSubject","signalrHubConnectionsByUrl","signalrHubConnectionsByUrlAndEvent","signalrHubConnection","createSignalrHubConnection","method","signalrHubConnectionMap","createSignalrHubEventsConnection","getConnectedHubConnections","_this$connectedSubjec","_this$connectedSubjec2","connectionId","handler","_SignalrLogger","Critical","warn","MACHINE_GROUP_COLOURS_PALETTE","addAlphaToHexRGB","PLANNING_SOFT_ORANGE","PLANNING_SOFT_YELLOW","PLANNING_SKY_BLUE","PLANNING_BRIGHT_SKY_BLUE","PLANNING_BABY_BLUE","PLANNING_BRIGHT_PINK","PLANNING_SOFT_PINK","PLANNING_SOFT_PURPLE","PLANNING_SOFT_BLUE","PLANNING_SOFT_GREY","PlanningDisplayModule","_PlanningDisplayModule","PlanningDragDropModule","_PlanningDragDropModule","PlanningDragDropService","_SelectionListModule","_SelectionListContainerModule","TextAreaWithChipsModule","_TextAreaWithChipsModule","LazyLoadingScrollService","_LazyLoadingScrollService","scrolledToTop","scrolledToBottom","scrolled","scrollEventListener","scrolling","pageSize","scrollContainer","scrollHeight","resetScrollPosition","preserveScrollPosition","removeListeners","FilterModelType","BOOLEAN","SET","MULTI","FilterType","EQUALS","NOTEQUAL","CONTAINS","NOTCONTAINS","STARTSWITH","ENDSWITH","LESSTHAN","LESSTHANOREQUAL","GREATERTHAN","GREATERTHANOREQUAL","INRANGE","NULL","NOTNULL","FilterModelBuilder","setType","setValues","newFilter","GridModelBuilder","filterList","GridModelBuilderFactoryService","_GridModelBuilderFactoryService","getFilterBuilder","filterModelType","DndDraggableDropListModule","_DndDraggableDropListModule","DndDragDropHelperService","DndListModule","CdkDraggableDropListModule","_CdkDraggableDropListModule","CdkDragDropHelperService","ElementPressedModule","_ElementPressedModule","_ApplicationLayoutModule","ApplicationLayoutService","_MenuTreeViewModule","MenuTreeViewContextService","_AccountSwitchModule","toggleShowOnlySelected","onlyShowSelected","selectedItemCount","_CrudObjectSelectionDialogNewComponent","gridContext","_this$config","initialiseGrid","setButtons","rowActionComplete","setDataAndInitialiseGridAgain","_this$config$dataObse","popupParent","getElementById","gridReadyObservable","getGridSelectedRows","_this$gridContext$gri","_this$gridContext","withBackClicked","canShowOnlyShowSelectedToggle","_this$config$gridOpti","select","_this$gridContext$gri2","_this$gridContext$gri3","_this$dialogRef2","withConfirmClicked","_this$gridContext$gri4","getBuilderFromExistingGridApi","firstDataRendered","rowDataUpdated","_this$config$selected2","_this$gridContext$gri5","_this$gridContext$gri6","_this$gridContext$gri7","setCurrentGrid","_this$gridContext$gri8","rowModelType","onFilterChanged","CrudObjectSelectionDialogNewComponent_Conditional_10_Template","CrudObjectSelectionDialogComponent","_CrudObjectSelectionDialogComponent","_this$config$selected3","CrudObjectSelectionDialogComponent_Conditional_10_Template","GridSelectionsOptionsModule","_GridSelectionsOptionsModule","_CrudOverviewDataModule","CrudGridContextService","SettingsIconButtonComponent","headerText","ContentSwitcherDialogComponent","_ContentSwitcherDialogComponent","_this$contentSwitcher2","_this$contentSwitcher3","activeEntry","CrudOverviewDataPageComponent","showHeader","_this$contentSwitcher4","_this$contentSwitcher5","_this$contentSwitcher6","getHeaderPrefix","creatingObjectName","_this$contentSwitcher7","getInputs","creatingObjectNameChanged","beforeClosed","_this$contentSwitcher8","_this$contentSwitcher9","_this$contentSwitcher10","ContentSwitcherDialogComponent_Conditional_1_Template","ContentSwitcherDialogComponent_ng_container_3_Template","CrudOverviewDataBuilder","gridOptionsBuilderFactory","extraActions","rowActionButtons","getOptions","_getOptions","getCrudBuilder","_getOptions2","extraActionConfig","actionButtonsForGridSelection","withRowActionButtons","withSelectedObjects","withContentSwitcher","shouldClose","actionButtonForGridSelection","CrudOverviewDataBuilderFactoryService","_CrudOverviewDataBuilderFactoryService","dialogBuilderFactory","openObjectSelectionDialog","withMinHeight","_EditorHeaderModule","_StringInputModule","ScheduleItemComponent","_ScheduleItemComponent","deleteEvent","boxShadow","startDateTime","endDateTime","updateColors","isPastDay","hasShiftStarted","NEUTRAL_900","NEUTRAL_700","TINT_NEUTRAL_BLACK_30_TRANSPARENT","isCurrentDay","_TimelineHeaderComponent","timeList","BOX_WIDTH","generateTimeArray","setColumnWidths","newWidth","dateTime","TimelineHeaderComponent_For_2_Template","TimelineRowService","_TimelineRowService","getScheduleItems","newScheduleItems","pushDataToArray","calculateWidth","pushMultiDataToArray","timeOne","timeTwo","gapToBeDeleted","gap","calculateGapWidth","isLastElement","nextElement","checkGapBetweenSchedules","gapMinus","TimelineRowButtonComponent","_TimelineRowButtonComponent","isWorkingDay","TimelineRowComponent_For_2_Conditional_0_ng_template_0_Template","timelineRowButton_r2","TimelineRowComponent_For_2_Conditional_0_Template","TimelineRowComponent_For_2_Conditional_1_Template","width_r6","TimelineRowComponent_ng_template_3_Conditional_0_Template","_TimelineRowComponent","timelineRowService","_params$data$workingD","_params$data$date","_params$api","workingDay","hasSame","TimelineRowComponent_For_2_Template","TimelineRowComponent_ng_template_3_Template","ShowOverlayForVirtualScrollerDirective","_ShowOverlayForVirtualScrollerDirective","showOverlayChange","forceShowOverlay","overlayChangeSubject","virtualScrollSubject","toggleOverlayBasedOnScrollDirection","throttleTime","subscribeToForceShowOverlay","onScrollEvent","_BaseComponent","BitPatternEditorFormFieldComponent","_BitPatternEditorFormFieldComponent","MatFormFieldControlHelper","ngControl","nextId","onBitPatternChanged","onChange","MatFormFieldControl","useExisting","bitPattern","checkedChanged","isDisabled","isChecked","item_r4","BitPatternEditorComponent","_BitPatternEditorComponent","enabledBits","showHexValue","bitPatternChange","checkboxList","getStringBits","stringBitPattern","bits","BitPatternEditorComponent_span_1_Template","BitPatternEditorComponent_div_3_Template","optional","_ColorConstants","NEUTRAL_BLACK","NEUTRAL_200","NEUTRAL_300","NEUTRAL_400","NEUTRAL_500","NEUTRAL_600","NEUTRAL_800","NEUTRAL_850","NEUTRAL_950","NEUTRAL_WHITE","TINT_NEUTRAL_BLACK_6_TRANSPARENT","TINT_NEUTRAL_BLACK_15_TRANSPARENT","TINT_NEUTRAL_BLACK_20_TRANSPARENT","TINT_NEUTRAL_BLACK_25_TRANSPARENT","TINT_NEUTRAL_950_80_TRANSPARENT","PRIMARY_300","PRIMARY_400","PRIMARY_500","PRIMARY_600","PRIMARY_700","PRIMARY_800","PRIMARY_850","PRIMARY_900","PRIMARY_AQUA_200","PRIMARY_AQUA_500","PRIMARY_AQUA_600","PRIMARY_AQUA_800","PRIMARY_AQUA_900","PRIMARY_TEAL_200","PRIMARY_TEAL_500","PRIMARY_TEAL_600","PRIMARY_TEAL_800","PRIMARY_TEAL_900","PRIMARY_YELLOW_200","PRIMARY_YELLOW_500","PRIMARY_YELLOW_600","PRIMARY_YELLOW_700","PRIMARY_YELLOW_800","PRIMARY_YELLOW_850","PRIMARY_YELLOW_900","PRIMARY_PINK_200","PRIMARY_PINK_500","PRIMARY_PINK_600","PRIMARY_PINK_800","PRIMARY_PINK_900","PRIMARY_PURPLE_200","PRIMARY_PURPLE_500","PRIMARY_PURPLE_600","PRIMARY_PURPLE_800","PRIMARY_PURPLE_900","PRIMARY_VIOLET_200","PRIMARY_VIOLET_400","PRIMARY_VIOLET_500","PRIMARY_VIOLET_600","PRIMARY_VIOLET_800","PRIMARY_VIOLET_900","SEMANTIC_ERROR_200","SEMANTIC_ERROR_300","SEMANTIC_ERROR_400","SEMANTIC_ERROR_500","SEMANTIC_ERROR_600","SEMANTIC_ERROR_700","SEMANTIC_ERROR_800","SEMANTIC_ERROR_850","SEMANTIC_ERROR_900","SEMANTIC_WARNING_200","SEMANTIC_WARNING_400","SEMANTIC_WARNING_500","SEMANTIC_WARNING_600","SEMANTIC_WARNING_800","SEMANTIC_WARNING_900","SEMANTIC_SUCCESS_200","SEMANTIC_SUCCESS_400","SEMANTIC_SUCCESS_500","SEMANTIC_SUCCESS_600","SEMANTIC_SUCCESS_800","SEMANTIC_SUCCESS_900","PRIMARY_COLOR_DARK_BLUE","PRIMARY_COLOR_HIGHLIGHT_BLUE","PRIMARY_COLOR_LIGHTBLUE","PRIMARY_COLOR_VDW_PINK","PRIMARY_COLOR_GREY","PRIMARY_COLOR_WHITE","PRIMARY_COLOR_BLACK","PRIMARY_COLOR_JUTE","PRIMARY_COLOR_JUTE_NEW","FUNCTIONAL_COLOR_ORANGE","FUNCTIONAL_COLOR_SAT_PURPLE","FUNCTIONAL_COLOR_SAT_PINK","FUNCTIONAL_COLOR_SAT_TURQUOISE","FUNCTIONAL_COLOR_SAT_BROWN","PRIMARY_COLOR_VDW_GRADIENT","TINT_DARKBLUE_70","TINT_DARKBLUE_70_TRANSPARENT","TINT_DARKBLUE_60","TINT_DARKBLUE_50","TINT_DARKBLUE_50_TRANSPARENT","TINT_DARKBLUE_30","TINT_DARKBLUE_30_TRANSPARENT","TINT_DARKBLUE_20","TINT_DARKBLUE_20_TRANSPARENT","TINT_DARKBLUE_13_TRANSPARENT","TINT_DARKBLUE_10_TRANSPARENT","TINT_DARKBLUE_10","TINT_DARKBLUE_6","TINT_DARKBLUE_6_TRANSPARENT","TINT_DARKBLUE_2","TINT_DARKBLUE_2_TRANSPARENT","TINT_VDW_BLUE_HOVER","TINT_VDW_BLUE_70","TINT_VDW_BLUE_70_TRANSPARENT","TINT_VDW_BLUE_60","TINT_VDW_BLUE_50","TINT_VDW_BLUE_40_TRANSPARENT","TINT_VDW_BLUE_30","TINT_VDW_BLUE_30_TRANSPARENT","TINT_VDW_BLUE_20","TINT_VDW_BLUE_20_TRANSPARENT","TINT_VDW_BLUE_10","TINT_VDW_BLUE_10_TRANSPARENT","TINT_VDW_BLUE_6","TINT_VDW_BLUE_6_TRANSPARENT","TINT_BLACK_50","TINT_BLACK_50_TRANSPARENT","TINT_BLACK_40_TRANSPARENT","TINT_BLACK_30_TRANSPARENT","TINT_BLACK_20","TINT_BLACK_20_TRANSPARENT","TINT_BLACK_10_TRANSPARENT","TINT_LIGHTBLUE_70","TINT_LIGHTBLUE_40_TRANSPARENT","TINT_LIGHTBLUE_30","TINT_LIGHTBLUE_30_TRANSPARENT","TINT_LIGHTBLUE_20","TINT_LIGHTBLUE_20_TRANSPARENT","TINT_LIGHTBLUE_10","TINT_LIGHTBLUE_10_TRANSPARENT","TINT_LIGHTBLUE_6","TINT_RED_70","TINT_RED_70_TRANSPARENT","TINT_RED_50","TINT_RED_50_TRANSPARENT","TINT_RED_30","TINT_RED_30_TRANSPARENT","TINT_RED_20","TINT_RED_20_TRANSPARENT","TINT_RED_10","TINT_RED_10_TRANSPARENT","TINT_RED_6","TINT_RED_6_TRANSPARENT","TINT_ORANGE_70","TINT_ORANGE_50","TINT_ORANGE_20","TINT_ORANGE_20_TRANSPARENT","TINT_ORANGE_10","TINT_ORANGE_10_TRANSPARENT","TINT_ORANGE_6","TINT_GREEN_70","TINT_GREEN_50","TINT_GREEN_20","TINT_GREEN_20_TRANSPARENT","TINT_GREEN_10","TINT_GREEN_6","TINT_PINK_70","TINT_PINK_50","TINT_PINK_20","TINT_PINK_10","TINT_PINK_6","TINT_WHITE_90_TRANSPARENT","TINT_WHITE_7_TRANSPARENT","TINT_JUTE_20_TRANSPARENT","shade","hex","hue","saturation","luminance","convertHSLToRGB","hslRepresentation","temporaryValue1","temporaryValue2","hslHueToRGB","convertHSVToRGB","hsvRepresentation","possibleValue1","possibleValue2","possibleValue3","rgbRepresentation","decimalToHexadecimal","convertRGBToHSL","maxMinDifference","convertRGBToHue","convertRGBToHSV","exec","rgbHex","alpha","rgba","convertRGBToRGBA","convertRGBAToHexadecimalColorCode","rgbaRepresentation","convertRGBToShadeName","colorRGBRepresentation","hsl","rgbDistance","hslDistance","totalDistance","smallIndex","smallestDistance","decimal","hueWithOffset","unitConversionParameters","DECIMETER","convertToCommercialUnitDecimeter","convertToCommercialUnitMeter","convertToCommercialUnitSquareMillimeter","unitValue","SQUARE_METER","CommercialUnitConversionError","convertToCommercialUnitSquareCentimeter","convertToCommercialUnitSquareMeter","convertDensityUnit","convertToDensityUnitDentsPerMeter","DENTS_PER_CENTIMETER","DensityUnitConversionError","convertToDensityUnitDentsPerCentimeter","convertToDensityUnitDentsPerMillimeter","convertToDensityUnitPicksPerMeter","PICKS_PER_DECIMETER","convertToDensityUnitPicksPerDecimeter","convertToDensityUnitPicksPerCentimeter","convertToDensityUnitPicksPerMillimeter","convertToDensityUnitWeftsPerMeter","WEFTS_PER_DECIMETER","convertToDensityUnitWeftsPerDecimeter","WEFTS_PER_CENTIMETER","convertToDensityUnitWeftsPerCentimeter","convertToDensityUnitWeftsPerMillimeter","minValueForTexUnit","minValueForOtherTextileUnits","convertTextileUnit","isToUnitTex","TEX","convertToTextileUnitNumberMetric","DENIER","convertToTextileUnitDenier","DECITEX","convertToTextileUnitDecitex","convertToTextileUnitTex","LINENCOUNT","convertToTextileUnitLinencount","LIBRA_POUNDS","convertToTextileUnitLibraPounds","ENGLISH_COTTON_COUNT","convertToTextileUnitEnglishCottonCount","TextileUnitConversionError","isConvertibleToCommercialUnit","isConvertibleToDensityUnit","isConvertibleToTextileUnit","isConvertibleToFileSizeUnit","convertFileSizeUnit","KILOBYTE","convertFileSizeUnitKilobyte","BYTE","convertFileSizeUnitByte","_shade","inRangeRGBComponent","CONFIRMATION","TIME_WITH_SECONDS","DATETIME_SHORT_WITH_SECONDS","DAY_WEEKDAY","DATETIME_MED_WITH_WEEKDAY","MONTH_YEAR","DAY_MONTH_SHORT_TIME_WITH_SECONDS","UnitConversionError","setPrototypeOf","MimeType","PLAIN_TEXT","PDF","XML","MP4","ZIP","BINARY","extendMoment","Moment","_BreakpointResponsivenessViewModeService","breakpointObserver","deviceChangeSubject","observeDefaultBreakpointChanges","currentDevice","DESKTOP","TABLET","observeBreakpointChanges","mediaQuery","matchesBreakpoint","isMatched","getInitialDevice","Breakpoints","XSmall","breakpointState","matches","Tablet","WebLandscape","mediaQueries","ResponsiveClassDirective","_ResponsiveClassDirective","classGtXs","classGtSm","classGtMd","classGtLg","classLtSm","classLtMd","classLtLg","classLtXl","reevaluateSubject","classMap","evaluateClassMap","applyResponsiveClass","removeClasses","breakpoints","applyClass","classNames","cn","createClasses","PER_METER","PER_INCH","PIXEL","GRAMS_PER_METER","PATHS_PER_CENTIMETER","PATHS_PER_DENTS","LENGTH_PER_METER","LENGTH_PER_PICKS","convertible","datesAreEqual","resizeObserver","ResizeObserver","observeMutations","mutationObserver","MutationObserver","mutations","observeWindowEvents","enumObject","isFunction","getDecimalSeparator","decimalPlacesLength","getDecimalCasesNumber","nonDecimalValue","trunc","decimalValue","decimalFormat","digits","s","slugifyString","stringEndingWithNumberComparator","endsWithNumber","numberA","numberB","upperValueA","upperValueB","truncateString","truncate","hasStringExceededGivenMaxSize","isEqualIgnoreCase","text1","text2","toLocaleLowerCase","string","htmlToText","html","_htmlText","htmlText","tempElement","innerText","textToHtml","_string$match","section","dotLargeNumber","crypto","randomUUID","_ApplicationLayoutService","HORIZONTAL_DIALOG_OFFSET","_menuItems","_this$matDrawer","_this$matDrawer$opene","_this$matDrawer2","hoveredElement","otherElements","hoverDialogOpened","getBuilderWithHoverElements","flattenMenuItems","itemToFind","findMenuItemPath","_this$_menuItems","groupEntry","getParentOfChildEntry","parentMenuItem","startGroup","_startGroup$childEntr","_startGroup$childEntr2","navigateTo","BreadcrumbComponent_ng_container_1_p_5_Template","last_r5","BreadcrumbComponent","_BreadcrumbComponent","itemsChanged","_this$items$index","BreadcrumbComponent_ng_container_1_Template","ColorPresetPickerMenuComponent_Conditional_0_ng_container_1_Template","colorItems_r1","ColorPresetPickerMenuComponent_Conditional_1_ng_container_1_Template","ColorPresetPickerMenuComponent_Conditional_1_ng_container_2_Template","ColorPresetPickerMenuComponent_Conditional_1_ng_container_3_Template","ColorPresetPickerMenuComponent_Conditional_1_ng_container_4_Template","color_r3","isColorSelected","ColorPresetPickerMenuComponent_ng_template_2_For_2_Template","getPresetColorsWithTone","tone_r5","ColorPresetPickerMenuComponent","_ColorPresetPickerMenuComponent","selectedColorChanges","presetColors","limited","tone","presetColor","ColorPresetPickerMenuComponent_Conditional_0_Template","ColorPresetPickerMenuComponent_Conditional_1_Template","ColorPresetPickerMenuComponent_ng_template_2_Template","selectedColorChange","onSelectedColorChanged","colorPicker_r4","COLOR_PRESET_PICKER_MENU_COMPONENT","ColorPickerFormInputComponent","_ColorPickerFormInputComponent","NATIVE","COLOR_PICKER_MODE","ColorPickerFormInputComponent_Conditional_1_Template","ColorPickerFormInputComponent_Conditional_2_Template","FULL","GREEN","ORANGE","RED","PINK","PURPLE","SliderTrackBackgroundDirective","_SliderTrackBackgroundDirective","QUERY_NAME_FOR_SLIDER_TRACK","elementReference","sliderTrackBackgroundElement","updateSliderTrackBackground","background","sliderTrackBackground","applySuggestionForColorName","suggestedColorName","onLoadClick","AddColorComponent","_AddColorComponent","colorToSave","nameChanged","loadClicked","getSuggestedColorName","previewHSLChange","calculateHSLForPositionInRectangle","colorPickerWidthInPx","colorPickerHeightInPx","calculatePositionInRectangleForHSL","hsv","getHSLWithLuminance","getHSLWithSaturation","getRoundedHSL","getRoundedRGB","getInRangeHSL","getInRangeValue","getInRangeRGB","addColorForm","setFormFieldValues","canShowSuggestedColorName","_this$suggestedColorN","getStyleForColorPickerContainer","colorPickerIndicatorSizeInPx","getStyleForColorPicker","previewHSL","onColorPickerClick","canEditColor","getStyleForColorPickerIndicator","translateX","translateY","getTrackBackgroundForHueSlider","onHueChange","getTrackBackgroundForSaturationSlider","getColorCodeForPreviewHSLWithSaturation","onSaturationChange","getTrackBackgroundForLuminanceSlider","getColorCodeForPreviewHSLWithLuminance","onLuminanceChange","getCurrentColor","_this$loadLink","loadLink","getFormRGB","subscribeToPreviewHSL","rgbFormGroup","hslFormGroup","getFormHSL","colorHSLRepresentation","AddColorComponent_mat_hint_18_Template","AddColorComponent_mat_error_19_Template","AddColorComponent_mat_error_20_Template","ContentSwitcherDialogPrototypeComponent","_ContentSwitcherDialogPrototypeComponent","matDialogData","nextComponentRefAndInfo","contentComponentInput","destroyPrevious","contentSwitcherContainer","detach","hostView","ContentSwitcherDialogPrototypeService","_ContentSwitcherDialogPrototypeService","environmentInjector","contentSwitcherHistory","componentData","currentEntry","navigateBackData","getInjector","assign","closeContentSwitcherDialog","resetContentSwitcher","dialogHistorySize","contentEntry","closeDialogButMaintainHistory","_this$currentEntry","NgModuleRef","createNgModule","ContentSwitcherDialogService","_ContentSwitcherDialogService","getActiveEntryData","getCachedPreviousEntry","cachedPreviousEntry","getEntry","_this$cachedPreviousE","foundEntry","newInputs","_CrudGridContextService","getNewButtonText","CrudGridWithActionsComponent_Conditional_1_Conditional_5_Template","CrudGridWithActionsComponent_Conditional_1_Conditional_6_Template","showCustomSettingsButton","CrudGridWithActionsComponent","_CrudGridWithActionsComponent","canShowActions","setGrid","newText","gridContainer","CrudGridWithActionsComponent_Conditional_1_Template","extraAction_r2","evaluateCloseDialog","isActionAvailable","GridSelectionExtraActionsDialogComponent","_GridSelectionExtraActionsDialogComponent","extraAction","_this$config$grid","GridSelectionExtraActionsDialogComponent_For_2_Template","button_r2","shouldHideButton","extraOptionsButton_r5","extraOptionsComponent","GridSelectionOptionsComponent","_GridSelectionOptionsComponent","hideButtons","selectedNodes","_this$data$grid$api$g","_this$data$grid","cachedSelectedNodes","hasCustomActions","hasClickEvent","_this$data$grid2","_this$data$grid3","deselect","_this$data$grid4","GridSelectionOptionsComponent_button_7_Template","GridSelectionOptionsComponent_vdw_dialog_button_8_Template","_CrudOverviewDataPageComponent","changeDetector","selectOptionsOpen","DIALOG_VERTICAL_OFFSET","handleSelectionDialog","_this$context$grid","_this$context$grid$ap","_this$context$grid$ap2","gridRect","setOnlyShowSelectedToggle","withAutoWidth","withRefData","openAtPosition","hasSelectedItems","_this$context$grid2","formControlNameValue","DatepickerFormInputComponent_mat_error_10_span_1_Template","DatepickerFormInputComponent_mat_error_10_vdw_invalid_form_message_2_Template","canShowBMSTheme","DatepickerFormInputComponent_mat_error_11_span_1_Template","DatepickerFormInputComponent_mat_error_11_vdw_invalid_form_message_2_Template","DatepickerFormInputComponent_mat_error_12_span_1_Template","DatepickerFormInputComponent_mat_error_12_vdw_invalid_form_message_2_Template","maxValue","DatepickerFormInputComponent_mat_error_13_span_1_Template","DatepickerFormInputComponent_mat_error_13_vdw_invalid_form_message_2_Template","DatepickerFormInputComponent","_DatepickerFormInputComponent","showHint","dateChange","dayClickListeners","monthNavClickListeners","_this$datePicker","datePicker","openedStream","addDayClickedEvents","addMonthNavigationEvents","onMonthSelected","onDateChange","removeDayClickListeners","removeMonthNavClickListeners","today","cell","listener","onDateCellClick","applyButton","monthNavigationButtons","onMonthNavigationClick","removeListener","DatepickerFormInputComponent_span_4_Template","DatepickerFormInputComponent_button_6_Template","DatepickerFormInputComponent_mat_hint_7_Template","DatepickerFormInputComponent_mat_error_10_Template","DatepickerFormInputComponent_mat_error_11_Template","DatepickerFormInputComponent_mat_error_12_Template","DatepickerFormInputComponent_mat_error_13_Template","inputLabel","datePicker_r4","DateRangePickerComponent","_DateRangePickerComponent","DATE_PICKER_HEADER","standardRange","dateSelectForm","closedStream","startDateForm","endDateForm","goForwards","moveRangeByDays","goBackwards","datePicker_r2","_DatepickerHeaderComponent","MatCalendarHeader","intl","dateFormats","periodButtonText","currentView","activeDate","MAT_DATE_FORMATS","currentPeriodClicked","previousClicked","nextClicked","previousEnabled","nextEnabled","DialogButtonComponent","_DialogButtonComponent","iconName","verticaloffset","align","dialogAutoHeight","dialogDataChanged","dialogClass","withOnDialogOpened","subscribeToAfterOpened","componentType","dialogData","afterOpened","ngContentSelectors","_DialogHeaderComponent","backEvent","changeDetection","DistanceSpecifierOrientation","HORIZONTAL","VERTICAL","DistanceSpecifierComponent","_DistanceSpecifierComponent","containerWidthInPx","commercialDistanceInMM","technicalDistance","orientation","MIN_WIDTH_TO_SHOW_LABEL_NAMES","MIN_WIDTH_TO_SHOW_LABEL","MIN_WIDTH_TO_SHOW","getDistanceSpecifierLabel","isHorizontalOrientation","picksTranslation","dentsTranslation","distanceInTechnicalUnit","distanceInCommercialUnit","convertValueToCommercialUnit","getDistanceSpecifierTooltip","canShowLabel","hasVerticalOrientation","canShow","_CdkDragDropHelperService","maxNestedDepth","DEFAULT_MAX_NESTED_DEPTH","generalDropLists","dropListById","_cachedDropList","dropListsChangedSubject","cachedDropList","dropList","registerGeneralList","getNestedChildEntries","nestedEntries","nestedEntry","DraggableDropListComparator","ID","_this$cachedEntries","cachedEntries","moveEntryToRoot","parentGroup","getLinkedDropLists","_this$maxNestedDepth","rootEntries","rootEntry","levelOrderFlattenEntries","flattenedEntries","flattenedEntry","getNestedDepth","depthStep","currentEntries","_currentEntries$lengt","_currentEntries","_childEntries$flatMap","foundMatch","childEntry","levelOrderGroups","queue","getPredicate","CdkDragPreviewContentDirective","_CdkDragPreviewContentDirective","dragPreviewContent","childEntryDropped","childEntry_r3","dropListContent","linkedDropLists","CdkDraggableDropListComponent_mat_expansion_panel_3_ng_template_1_vdw_cdk_draggable_drop_list_1_Template","dropListEntry","CdkDraggableDropListComponent_mat_expansion_panel_3_ng_template_1_Template","CdkDraggableDropListComponent","_CdkDraggableDropListComponent","_this$dropListEntry","dragDropHelperService","entryDropped","_this$dragDropHelperS","nestedChildDepth","nestedDepth","calculatedDropAllowed","dropped","_this$dragDropHelperS2","droppedEntry","draggedElement","draggedEntry","oldGroup","newGroup","dragStarted","nestedChildren","relativeNestedDepth","dragEntered","_this$dragDropHelperS3","CdkDraggableDropListComponent_mat_expansion_panel_3_Template","CdkDraggableDropListComponent_div_4_Template","CdkDropListContentDirective","_CdkDropListContentDirective","_DndDragDropHelperService","dragEnded","dragDrop","entryRemoved","dataByKey","assignData","getChildren","isExpandedChildren","isDragDisabled","getDataByKey","getAllData","findKeyForData","findDraggableDropListEntryByKey","findParentOfItemWithKey","_parent2","foundParent","fromDraggableDropListEntry","setChildren","SelectColorsComponent","_SelectColorsComponent","controlType","compareColors","colorOption","MatSelect","SelectColorsComponent_mat_option_6_Template","pattern_r2","SelectPatternsComponent_mat_option_7_vdw_pattern_2_Template","patternEnum","SelectPatternsComponent","_SelectPatternsComponent","LINE","STRIPED","DOTTED","DIAGONAL","SelectPatternsComponent_vdw_pattern_3_Template","SelectPatternsComponent_mat_option_7_Template","extraAction_r7","EditorHeaderComponent_Conditional_1_Conditional_3_For_1_Template","customExtraActions","settingsEvent","EditorHeaderComponent_Conditional_1_Conditional_1_Template","EditorHeaderComponent_Conditional_1_Conditional_2_Template","EditorHeaderComponent_Conditional_1_Conditional_3_Template","canShowSettings","isCreateNewPage","cancelEvent","_r10","actionText","_r11","defaultSaveType","EditorHeaderComponent_vdw_split_button_3_button_3_Template","EditorHeaderComponent_vdw_split_button_3_button_4_Template","EditorHeaderComponent_vdw_split_button_3_button_5_Template","getSaveButtonTranslationKey","disableSaveButton","canShowSaveMenuButton","canShowSaveAndCloseMenuButton","canShowSaveAndCreateNewMenuButton","_r13","EditorHeaderComponent_ng_template_4_button_0_Template","EditorHeaderComponent","_EditorHeaderComponent","canShowCancel","canShowSaveAndClose","canShowSaveAndCreateNew","extraPadding","selectedMenuItemChange","saveEvent","saveAndCloseEvent","saveAndCreateNewEvent","canShowExtraActions","setDefaultSaveType","getShowExtraActions","canShowSplitButton","_this$customExtraActi","isSaveTypeButtonAvailable","EditorHeaderComponent_Conditional_1_Template","EditorHeaderComponent_button_2_Template","EditorHeaderComponent_vdw_split_button_3_Template","EditorHeaderComponent_ng_template_4_Template","singleAction_r14","EllipsisLabelComponent","_EllipsisLabelComponent","tooltipClasses","matTooltipPosition","hasContent","tooltipClass","observeMutation","ngAfterContentInit","_this$resizeObserver","_this$mutationObserve","box","characterData","childList","subtree","labelElement","EllipsisLabelComponent_ng_container_4_Template","EllipsisLabelComponent_ng_container_5_Template","startDrag","allowDrop","endDrag","MultiLineDragComponent_div_0_ng_container_1_Template","customTemplateRef","MultiLineDragComponent","_MultiLineDragComponent","itemsChange","_draggedElement","targetIndex","removed","contentQueries","dirIndex","TemplateRef","MultiLineDragComponent_div_0_Template","chip_r3","compact","labelGetter","errorPredicate","canDeleteChips","canMoveChips","overflowGap","canShowErrorQuantity","overflowChipTrigger_r5","menuOpen","overflowChips_r6","overflowAmount","chip_r8","FilterChipsComponent","_FilterChipsComponent","INPUT_FIELD_GAP_WIDTH","INPUT_FIELD_OVERFLOW_BUTTON_WIDTH","INPUT_CHIP_OVERFLOW_MIN_WIDTH","deletedEvent","droppedEvent","chip","resizeObservable","resizeSubscription","evt","setVisibleChips","ngDoCheck","_this$chips","_this$previousChips","previousChips","deletedObject","out","getDragPreview","over","availableWidthChips","chipsContainer","overFlowChipLabels","usedWidthByInputChips","visibleChipComponents","htmlComponent","chipWidth","availableWidth","elementLabel","FilterChipsComponent_ng_template_2_Template","FilterChipsComponent_div_3_Template","FilterChipsComponent_div_7_Template","iconClicked","FilterComponent","_FilterComponent","filteredTextChanged","filterIconClicked","iconDisabled","filterWidth","filteredText","isIconDisabled","FilterComponent_button_4_Template","MobileFilterComponent","_MobileFilterComponent","MobileFilterComponent_button_5_Template","cancelEventName","cancelButtonClicked","FooterComponent_ng_container_3_button_1_Template","FooterComponent_ng_container_3_button_2_Template","hasDefaultCancelDialogButton","saveAndCloseButtonClicked","saveAndCreateNewButtonClicked","FooterComponent_ng_container_5_vdw_split_button_1_button_2_Template","FooterComponent_ng_container_5_vdw_split_button_1_button_3_Template","hasSaveAndCloseButton","hasSaveAndCreateNewButton","FooterComponent_ng_container_5_vdw_split_button_1_Template","FooterComponent_ng_container_5_ng_template_2_Template","hasSaveMenu","singleAction_r7","chooseDialogCloseValue","chooseEventName","chooseButtonClicked","chooseEventInProgress","FooterComponent_ng_container_6_button_1_Template","FooterComponent_ng_container_6_vdw_progress_button_2_Template","hasDefaultChooseDialogButton","FooterComponent","_FooterComponent","withChooseButton","withCancelButton","withSaveButton","observed","hasHintsElement","FooterComponent_ng_container_3_Template","FooterComponent_ng_container_5_Template","FooterComponent_ng_container_6_Template","backButtonClicked","svgIcon","extraInformationTitle","customErrorMessage","settingsButtonClicked","headerTabIndex","tabIndexCustomSettings","settingsTooltip","mouseEnterOptionButton","mouseLeaveOptionButton","optionsMenu_r6","duplicateButtonClicked","deleteButtonClicked","isInUse","headerAction_r10","headerActionClicked","tabIndexCancel","mouseEnterSaveButton","mouseLeaveSaveButton","showSaveMenu","HeaderComponent_Conditional_26_Conditional_1_Conditional_3_Template","tabIndexSave","inUseButtonClicked","HeaderComponent_Conditional_26_Conditional_1_Template","HeaderComponent_Conditional_26_Conditional_2_Template","canShowSaveButton","canShowInUseButton","_r15","_r17","_r18","closeClicked","HeaderComponent_div_33_button_1_Template","HeaderComponent_div_33_button_2_Template","closeEvent","HeaderComponent","_HeaderComponent","hasPermissionToEdit","showCustomErrorMessage","canShowClose","inUseEvent","headerAction","hasDeleteButton","headerButtons","hasDuplicateButton","isDefaultSaveType","hasSaveMenuButton","hasSaveButton","hasSaveAndCloseMenuButton","hasSaveAndCreateNewMenuButton","hasSettingsButton","hasInUseButton","inUse","hasBackButton","canShowMoreButton","hasOptionMenu","hasCancelButton","canShowSettingsButton","canShowDivider","hasActionButtons","canShowAmount","optionMenuTimer","optionMenuTrigger","openMenu","saveMenuTimer","saveMenuTrigger","restoreFocus","closeMenu","saveMenu","_this$headerActions","saveAndClose","saveAndCreateNew","_this$headerActions2","MatMenuTrigger","HeaderComponent_Conditional_2_Template","HeaderComponent_Conditional_3_Template","HeaderComponent_Conditional_6_Template","HeaderComponent_Conditional_8_Template","HeaderComponent_Conditional_9_Template","HeaderComponent_Conditional_12_Template","HeaderComponent_Conditional_13_Template","HeaderComponent_Conditional_14_Template","HeaderComponent_Conditional_16_Template","HeaderComponent_Conditional_17_Template","HeaderComponent_Conditional_21_Template","HeaderComponent_Conditional_22_Template","HeaderComponent_For_24_Template","HeaderComponent_Conditional_25_Template","HeaderComponent_Conditional_26_Template","HeaderComponent_button_30_Template","HeaderComponent_button_31_Template","HeaderComponent_button_32_Template","HeaderComponent_div_33_Template","invalidFormMessageError","ControlValueAccessorHelper","stateChanges","v","writeValue","onTouched","deleteValue","registerOnChange","fn","registerOnTouched","setDisabledState","_placeholder","shouldLabelFloat","userAriaDescribedBy","valueAccessor","setDescribedByIds","onContainerClick","_this$ngControl","_this$ngControl$statu","_this$stateChanges","hasValidator","check","InputChipComponent_a_3_ng_container_1_Template","getTabIndex","chipValue_r3","onRemoveClick","InputChipComponent","_InputChipComponent","multiSelect","removeClick","canShowCloseIcon","canShowCloseIconForBMSTheme","InputChipComponent_mat_icon_1_Template","InputChipComponent_span_2_Template","InputChipComponent_a_3_Template","InputChipComponent_ng_template_4_Template","InputChipComponent_mat_icon_6_Template","InputChipComponent_button_7_Template","ElementPressedDirective","_ElementPressedDirective","isPressed","onMouseDown","onMouseUp","iconWidthInPx","MenuItemComponent_Conditional_0_Conditional_2_mat_icon_0_Template","hasIcon","favoriteClicked","menuItemClicked","MenuItemComponent_Conditional_0_Conditional_2_Template","MenuItemComponent_Conditional_0_Conditional_5_Template","MenuItemComponent_Conditional_0_Conditional_6_Template","hasChildEntries","hasLink","MenuItemComponent","_MenuItemComponent","applicationLayout","isFavorites","isItemActive","activeEntryUpdated","isActiveEntry","MenuItemComponent_Conditional_0_Template","_MenuTreeViewContextService","_this$activeEntry","_this$activeEntry2","isExternalLink","navigateRouter","MenuTreeViewComponent_div_0_div_4_Template","childEntry_r4","MenuTreeViewComponent_div_2_vdw_menu_tree_view_1_Template","isRoot","MenuTreeViewComponent","_MenuTreeViewComponent","isLinkActive","fragment","matrixParams","MenuTreeViewComponent_div_0_Template","MenuTreeViewComponent_vdw_menu_item_1_Template","MenuTreeViewComponent_div_2_Template","MessageContainerComponent_Conditional_3_Conditional_2_Template","MessageContainerComponent_Conditional_3_Conditional_3_Template","MessageContainerComponent_Conditional_3_Conditional_4_Template","showTimestamp","message_r2","MessageContainerComponent_Conditional_4_Conditional_0_For_2_Conditional_4_Template","canShowTimestampForEachMessage","MessageContainerComponent_Conditional_4_Conditional_0_For_2_Template","MessageContainerComponent_Conditional_4_Conditional_1_Conditional_3_Template","MessageContainerComponent_Conditional_4_Conditional_0_Template","MessageContainerComponent_Conditional_4_Conditional_1_Template","canShowMessageList","MessageContainerComponent","_MessageContainerComponent","isErrorMessage","isWarningMessage","isInfoMessage","showTitle","onlyShowTitle","timestampWithOffset","currentSubscriptionTimezoneOffset","MessageContainerComponent_Conditional_3_Template","MessageContainerComponent_Conditional_4_Template","MobileBottomSelectorComponent","_MobileBottomSelectorComponent","optionChange","currentPositionIndex","selectedOption","totalPositions","selectorChange","newOption","previousOption","nextOption","dialogTitleKey","option_r2","MobileSelectorComponent","_MobileSelectorComponent","MobileSelectorComponent_mat_button_toggle_8_Template","MobileDropdownComponent","_MobileDropdownComponent","backClicked","previousRouterLink","tagValue","tagSize","MobilePageHeaderComponent","_MobilePageHeaderComponent","showBackButton","showTag","MobilePageHeaderComponent_button_3_Template","MobilePageHeaderComponent_vdw_tag_7_Template","MobilePageHeaderComponent_button_9_Template","NavigationHelperPrototypeService","_NavigationHelperPrototypeService","routingInfo","setCurrentEntry","contentSwitcherInfo","_this$currentEntry2","previousEntry","headerPrefix","resetNavigationHistory","amountOfHistoryReset","_this$currentEntry3","_this$currentEntry4","removeChip","hidden","colorInHex","overflowChips_r5","ObjectSelectionComponent_ng_container_0_div_1_div_3_vdw_input_chip_2_Template","ObjectSelectionComponent_ng_container_0_div_1_div_3_div_3_Template","inputChips","getPlaceholderText","deleteSelection","onSelectClicked","getButtonValue","onInputClicked","ObjectSelectionComponent_ng_container_0_div_1_div_3_Template","ObjectSelectionComponent_ng_container_0_div_1_ng_template_4_Template","ObjectSelectionComponent_ng_container_0_div_1_button_6_Template","ObjectSelectionComponent_ng_container_0_div_1_button_7_Template","canClickInput","noItemsSelected_r8","disabledDropdownTrigger_r12","panelOpen","selectAll","canShowIndeterminate","canShowChecked","option_r16","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_mat_option_13_span_2_Template","openDetails","isFiltered","getTranslation","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_vdw_input_chip_4_Template","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_div_5_Template","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_button_9_Template","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_ng_container_10_Template","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_mat_checkbox_12_Template","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_mat_option_13_Template","noResults_r17","canShowNoResult","listOfOptions","item_r20","_r19","onInputClickedWithDialogObjectSelection","ObjectSelectionComponent_ng_container_0_div_2_div_4_vdw_ellipsis_label_2_Template","ObjectSelectionComponent_ng_container_0_div_2_div_4_vdw_input_chip_3_Template","ObjectSelectionComponent_ng_container_0_div_2_div_4_div_4_Template","_r21","deleteAllSelection","ObjectSelectionComponent_ng_container_0_div_2_mat_select_3_Template","ObjectSelectionComponent_ng_container_0_div_2_div_4_Template","ObjectSelectionComponent_ng_container_0_div_2_button_5_Template","disabledDropdownMenu","withDialogObjectSelection","ObjectSelectionComponent_ng_container_0_div_1_Template","ObjectSelectionComponent_ng_container_0_div_2_Template","ObjectSelectionComponent_ng_template_1_mat_spinner_1_Template","item_r23","_r22","_r25","resetFilterText","option_r27","_r26","ObjectSelectionComponent_mat_menu_6_mat_option_8_span_2_Template","_r24","ObjectSelectionComponent_mat_menu_6_button_5_Template","ObjectSelectionComponent_mat_menu_6_ng_container_6_Template","ObjectSelectionComponent_mat_menu_6_mat_option_8_Template","ObjectSelectionComponent_ng_template_7_p_0_Template","ObjectSelectionComponent","_ObjectSelectionComponent","placeHolderText","canShowMultiSelectPlaceHolder","selectClicked","clearClicked","inputFieldGapWidth","inputFieldEditButtonWidth","inputFieldCloseIconWidth","inputFieldOverflowButtonWidth","SELECT_TRANSLATION_KEY","EDIT_TRANSLATION_KEY","hasUniqueId","reservedWidthInsideInputField","setInputChips","setVisibleInputChips","DISABLED_DROPDOWN_WIDTH","DISABLED_DROPDOWN_PARENT_ELEMENT","_this$listOfOptions","_option$name","_this$inputChips","_this$overflowChipTri","_this$formControl","overflowChipTrigger","removedOption","_this$overflowChipTri2","_this$ngControl2","_this$ngControl3","_this$ngControl4","getOverflowChips","_this$visibleInputChi","_overflowChips$map$fi","overflowChips","visibleInputChipComponents","_component$elementRef","objectName","_this$ngControl$value","selectedOptionsLength","_this$ngControl$value2","matCheckboxChange","getInputChipUrl","setInputChipArray","_this$listOfOptions2","_option$name2","_this$ngControl5","chipValueKey","conditionalChipValueKey","setInputChipsForChipValueKey","setInputChipsForTranslationKey","setInputChipsForValue","setInputChipsForName","uniqueInputChips","getUniqueInputChips","replacementKey","_this$inputFieldEleme","availableWidthInputChips","inputFieldElement","_component$elementRef2","baseRouterLink","ObjectSelectionComponent_ng_container_0_Template","ObjectSelectionComponent_ng_template_1_Template","ObjectSelectionComponent_vdw_input_chip_5_Template","ObjectSelectionComponent_mat_menu_6_Template","ObjectSelectionComponent_ng_template_7_Template","loading_r28","PatternComponent","_PatternComponent","getPatternImage","ButtonSize","startProgress","ProgressButtonComponent_button_0_ng_container_1_Template","getButtonWidth","buttonSize","tabIndex","btnContent_r3","ProgressButtonComponent_button_1_ng_container_1_Template","getSpinnerDiameter","ProgressButtonComponent_ng_template_2_mat_icon_1_Template","ProgressButtonComponent_ng_template_2_mat_spinner_2_Template","isInProgress","labelReplaceableValues","ProgressButtonComponent","_ProgressButtonComponent","raisedButton","fullWidth","progressClick","isRaisedButton","ProgressButtonComponent_button_0_Template","ProgressButtonComponent_button_1_Template","ProgressButtonComponent_ng_template_2_Template","ProgressSpinnerComponent","_ProgressSpinnerComponent","stroked","SelectionListContainerComponent","_SelectionListContainerComponent","selectListOptionsChanged","selectOptionsChanges","onSelectOptionChanged","tmp_0_0","tmp_5_0","SelectionListComponent","_SelectionListComponent","optionsChanged","something","optionKey","SelectionListComponent_li_1_Template","customSettingsButtonClicked","toggleSettingsDialog","SettingsIconButtonComponent_Conditional_2_Conditional_4_Template","alignRight","_SettingsIconButtonComponent","showSettingsDialog","SettingsIconButtonComponent_Conditional_2_Template","SlideToggleComponent","_SlideToggleComponent","isInteractable","checkedChange","afterCheckedChange","toggleButtonClicked","hasLabel","onButonClicked","SplitButtonComponent_ng_container_1_vdw_progress_spinner_6_Template","otherOptionsTrigger_r3","otherOptionsMenu_r4","SplitButtonComponent_ng_template_2_vdw_progress_spinner_5_Template","otherOptionsTrigger_r6","SplitButtonComponent","_SplitButtonComponent","withOpenDropdown","otherOptionsTrigger","SplitButtonComponent_ng_container_1_Template","SplitButtonComponent_ng_template_2_Template","strokedButton_r7","StatusBarSize","COMPACT","statusBar","showSelectedRows","initialToggleSelected","deleteAllFilters","StatusBarComponent_section_0_div_2_Template","StatusBarComponent_section_0_div_3_Template","StatusBarComponent_section_0_div_23_Template","deleteFilter","StatusBarComponent_section_0_ng_container_27_Template","totalGroupedRowsIsDefined","canShowOnlySelected","tmp_10_0","getLabelForFilter","hasMultipleChips","StatusBarComponent","_StatusBarComponent","toggleSelected","getAdvancedSearchFiltersFromGridModel","detailGridOptions","_this$statusBar","columnsDefs","_colDef$","_value$filterModels$","_value$filterModels$2","symbol","StatusBarComponent_section_0_Template","StatusBarComponent_section_1_Template","StringInputComponent","_StringInputComponent","StringInputComponent_Conditional_1_Template","StringInputComponent_Conditional_3_Template","StringInputComponent_Conditional_6_Template","_TabsAndActionsHeaderComponent","showMenuItems","HeaderButtons","choose","selectMenuItem","TabsMenuCardComponent","_TabsMenuCardComponent","canShowBackButton","TabsMenuCardComponent_mat_card_content_3_Template","menuItem_r2","canShowTabError","isMenuItemSelected","TabsMenuComponent_Conditional_0_a_1_Template","tabPanel_r4","TabsMenuComponent","_TabsMenuComponent","_this$selectedMenuIte","markAllAsTouched","isEveryFormControlInFormGroupTouched","TabsMenuComponent_Conditional_0_Template","_TabsMenuModule","SECONDARY","TagComponent","_TagComponent","timeControl","menuFocused","getSelectedTime","defaultTime","TimePickerFormInputComponent","_TimePickerFormInputComponent","inputBlur","fieldFocused","updateCanShowMenu","onKeyUp","timeValidator","invalidTimeFormat","TimePickerFormInputComponent_Conditional_1_Template","TimePickerFormInputComponent_Conditional_3_Template","TimePickerFormInputComponent_vdw_invalid_form_message_5_Template","TimePickerFormInputComponent_Conditional_10_Template","TimePickerConstants","_TimePickerConstants","MIN_HOURS_FOR_12","MAX_HOURS_FOR_12","MIN_HOURS_FOR_24","MAX_HOURS_FOR_24","MIN_MINUTES","MAX_MINUTES","AM","PM","togglePeriod","_TimePickerMenuComponent","selectedTimeChange","selectedTime","increase","timeForm","getMaxValue","getMinValue","decrease","period","setTime","getTimeValues","TimePickerMenuComponent_Conditional_17_Template","ZoneInputType","FREEZONE","RESTZONE","ZoneInputHelperService","_ZoneInputHelperService","popupStates","focusStates","isPopupVisible","setPopupVisible","visible","isInputFocused","setInputFocused","focused","onPopupClick","technicalValue","onChangeTechnicalValue","closePopup","ZoneInputComponent","_ZoneInputComponent","zoneInputHelperService","commercialValueInMM","zoneType","zoneInputType","isErrorState","technicalValueSubject","debounceTimeMs","setFocus","validateTechnicalValue","previousTechnicalValue","zoneKey","getZoneInputLabel","getZoneInputErrorLabel","maximumTechnicalValue","togglePopup","onDocumentClick","inputField","ZoneInputComponent_div_8_Template","AutoFocusDirective","_AutoFocusDirective","CanShowErrorForFormControlDirective","_CanShowErrorForFormControlDirective","isHidden","InputL10nDecimalDirective","_InputL10nDecimalDirective","negativeNumbers","canShowArrows","onNgModelChange","getNormalizedText","getCurrentTextInput","shouldSkipFormatting","formattedValue","getMaximumFractionDigits","emitViewToModelChange","keyboardEvent","isNumericKeyCode","isCommand","allowNegativeNumbers","onPaste","pastedInput","clipboardData","getProcessedText","Event","droppedInput","matFormFieldFlexElement","closest","arrowsElement","decrementButtonElement","createElementForButton","incrementButtonElement","validate","validity","isControlCommand","isStandardCommand","ctrlKey","isDecimalSeparator","rawText","decimalSeparator","forbiddenCharacters","processedText","decimalSeparators","textSections","lastChar","isIncrement","buttonElement","stepUp","stepDown","NG_VALIDATORS","_ResizeElementDirective","_isResizing","resizeElementEnd","resizeElement","onResizerMouseDown","mouseUpListener","cancelListeners","mouseMoveListener","mouseMoveEvent","calculatedWidth","minWidthCheck","minResizeWidth","maxWidthCheck","maxResizeWidth","_this$elementRef","_this$elementRef2","CapitalFirstLetterPipe","_CapitalFirstLetterPipe","str","_DateTimePipe","toLocaleString","weekday","year","month","hour","minute","HexValuePipe","_HexValuePipe","hexValue","binToHex","addLeadingZeros","numberOfZeros","_HtmlWithVariablesToTextPipe","listOfVariables","_html$split","splitedHtml","textWithVariables","getVariableNameByValue","_listOfVariables$find","variable","MinutesFromNowPipe","_MinutesFromNowPipe","dateToTransform","fromNow","LOCALSTORAGE_CONFIG","_LocalStorageModule","ngModule","LocalStorageService","_LocalStorageService","getItem","setItem","_AlertDialogData","confirmationTypes","confirmButtonText","informationUrl","saveButton","_titleIcon","_titleText","_messageText","_extraInformationText","_cancelButtonText","_confirmationTypes","_confirmButtonText","_informationUrl","_entities","_saveButton","createConfirmationData","confirmationType","AlertDialogConfirmationType","exclamationWarning","cancelText","createReportData","exclamationInfo","REPORT","exclamationError","createInformativeData","createConfirmData","createDiscardData","createDiscardAndSaveData","createConfirmationDeleteData","createOverrideData","exclamationWarningFull","OVERRIDE","AlertDialogUtils","getButtonTextForConfirmationType","CONFIRMATION_TYPE_TEXTS","getIconClass","entity_r3","navigateToUrl","AlertDialogComponent_ul_8_li_1_a_1_Template","AlertDialogComponent_ul_8_li_1_ng_template_2_Template","noRoute_r4","AlertDialogComponent_ul_8_li_1_Template","discard","getConfirmButtonText","_AlertDialogComponent","hasDiscardButton","hasReportButton","getReportButtonText","hasConfirmButton","report","canShowChooseButton","hasCancelText","hasConfirmationTypeReport","hasConfirmationTypeDiscard","hasConfirmationTypeConfirmDelete","hasOverrideButton","hasConfirmationTypeOverride","hasConfirmButtonText","hasMessageText","hasExtraInformationText","canShowReportIssueText","hasConfirmationTypeConfirm","hasConfirmationTypeDelete","_this$dialogData$conf","_this$dialogData$conf2","hasInformationUrl","urlToOpen","AlertDialogComponent_mat_icon_2_Template","AlertDialogComponent_p_5_Template","AlertDialogComponent_p_6_Template","AlertDialogComponent_p_7_Template","AlertDialogComponent_ul_8_Template","AlertDialogComponent_button_10_Template","AlertDialogComponent_button_11_Template","AlertDialogComponent_button_12_Template","_DialogBuilderFactoryService","repositionDialogWatchFactoryService","dialogOpener","DialogBuilder","getService","repositionWatchDialog","withId","autoWidth","minHeight","hasBackdrop","backdropClass","refData","onDialogOpened","passDataAsReference","buildWithData","arrowPosition","margin","initWithElement","afterClosed","skip","initWithPosition","_DialogOpenerService","_this$dialog$open","resultSubject","_dialogRef$componentI","withExistingGridRowSelectionAndButtonFocusOnSelection","_this$dialog$getDialo","dialogId","RepositionWatchDialogService","applicationRef","MARGIN_IN_PX","ARROW_WIDTH_IN_PX","ARROW_OFFSET_IN_PX","unSubscribeOnDestroy","DIALOG_SURFACE_CLASS","actualMargin","getEventsToUpdatePosition","getPositionAndSize","addArrow","getArrowPosition","setArrowStyling","getPositionAndSizeWithElement","detachView","arrowComponentRef","getComponent","rect","_this$document$getEle","_rect$width","_rect$height","overflow","dialogPosition","arrowWidthInPx","arrowOffsetInPx","fitTop","fitLeft","MAX_VALUE","_this$changeDetectorR","MatIcon","attachView","_dialogContainer$getE","dialogContainer","firstChild","_RepositionWatchDialogFactoryService","_HoverDialogBuilderService","hoveredElements","mouseEnter","mouseLeave","createdBuilder","_event$relatedTarget","isHovered","timeout","addEventListeners","_containerInstance","foundElement","cleanup","removeEventListeners","forms","skipDisabled","checkDocumentFormControls","scrollToFirstInvalidAndTouchedFormField","invalidAndTouchedElements","findInvalidControlsInForms","scrollToFirstInvalidFormElement","invalidElements","isFormValid","elementsFromMatDialogContainer","elementsNotFromMatDialogContainer","isChildOfOrMatDialogContainer","matDialogs","nodeName","findFirstFormElement","elements","matchingElement","elementName","allowedElements","openParentExtensionPanel","firstElement","isExpansionHeader","selectParentTab","checkIfElementIsContainedInTabBody","tabName","getAttribute","selectMatTabGroup","selectMatTabHeader","tabHeadersElements","tabElement","tab","linkTranslationKey","InvalidFormMessageComponent","_InvalidFormMessageComponent","loadEntry","InvalidFormMessageComponent_Conditional_2_Template","InvalidFormMessageComponent_Conditional_3_Template","InvalidFormMessageComponent_Conditional_4_Template","InvalidFormMessageComponent_Conditional_5_Template","showOverlay","button_r6","cancelClose","closeOverlay","CellButtonComponent_ng_template_2_For_2_Template","CellButtonComponent","_CellButtonComponent","vcr","menuWidth","offsetXWidthPerButton","isOverlayOpen","flexibleConnectedTo","hoverButton","withPositions","originX","originY","overlayX","overlayY","portal","TemplatePortal","overlayTemplate","closeOverlayTimeout","canShowSingleIcon","CellButtonComponent_Conditional_0_Template","CellButtonComponent_Conditional_1_Template","CellButtonComponent_ng_template_2_Template","_GridOptionsBuilderFactoryService","saveGridSettings","getGridSettings","GridOptionsBuilder","getDefaultGridOptions","getDefaultCrudGridOptions","fromExistingGridApi","gridThemeParameters","spacing","wrapperBorder","wrapperBorderRadius","cellHorizontalPadding","accentColor","rowBorder","fontSize","pinnedColumnBorder","pinnedRowBorder","rowHoverColor","popupShadow","selectedRowBackgroundColor","focusShadow","rowGroupIndentSize","headerTextColor","headerBackgroundColor","headerFontWeight","headerVerticalPaddingScale","headerColumnBorder","headerColumnResizeHandleHeight","iconButtonHoverBackgroundColor","iconButtonHoverColor","menuBackgroundColor","menuSeparatorColor","menuTextColor","menuBorder","widgetContainerHorizontalPadding","widgetContainerVerticalPadding","listItemHeight","dialogBorder","panelBackgroundColor","panelTitleBarBackgroundColor","panelTitleBarBorder","theme","createTheme","withParams","headerHeight","defaultColDef","tooltipComponent","GridTooltipComponent","suppressMovableColumns","suppressDragLeaveHidesColumns","addPlaceholderToFloatingFilter","onDisplayedColumnsChanged","onFirstDataRendered","onGridPreDestroyed","getMainMenuItems","defaultItems","assignParamsToGetTheClass","animateRows","loadingOverlayComponent","LoadingOverlayComponent","checkboxes","enableClickSelection","rowClass","stopEditingWhenCellsLoseFocus","suppressCellFocus","tooltipShowDelay","multiSortKey","suppressContextMenu","columnMenu","gridColumnSettings","SHOW_HIDE_SEARCH_TRANSLATION_KEY","EXPAND_ALL_TRANSLATION_KEY","COLLAPSE_ALL_TRANSLATION_KEY","unSubscribeOnGridDestroy","withInitialGroupOrderComparator","initialGroupOrderComparator","maintainColumnOrder","groupColDefIndex","extendOption","withOnBodyScroll","addCompactClassToFloatingFilter","withGridIdentifier","withMainMenuItems","setOption","serverSideDatasource","isServerSideGroup","getServerSideGroupKey","treeData","loadingCellRenderer","floatingFiltersHeight","withRowClass","rowClassRules","_this$gridOptions$row","_this$gridOptions$aut","HeaderClass","_colDef$headerClass","getRowIdFunction","allowMultipleSelection","headerWithCheckbox","groupSelectsChildren","defaultOptions","selectionColumnDef","enableSelectionWithoutKeys","multiOptions","headerCheckbox","groupSelects","applyClassToGroupLastRow","applyClassToOpenedRowGroup","allChildren","getDragHandleColDef","dragHandleText","dndOnRowDrag","withRowDraggingToExternalDropZones","externalDropZones","draggingInsideGrid","rowDragManaged","onRowDragEnter","rowDragStartParams","externalDropZone","dropTarget","dropZoneParams","getContainer","clearData","onDragStop","removeRowDropZone","addRowDropZone","withRowDraggingOutsideGrid","columnIndex","NoDataOverlayComponent","onRowDataUpdated","loadingOverlayComponentParams","withOverlayLoadingTemplate","overlayLoadingTemplate","withDefaultColDef","withGroupDisplayType","groupDisplayType","suppressRowClickSelection","withoutEnableClickSelection","pinAndLockColumn","withEditType","editType","withStopEditingWhenCellsLoseFocus","withGroupRowRendererParams","groupRowRendererParams","withRowDragManaged","withPinnedBottomRowData","pinnedBottomRowData","withSuppressNoRowsOverlay","withGroupEdit","withMasterDetailGrid","detailCellRenderer","getDetailCellRendererParams","masterDetail","detailCellRendererParams","withDetailRowHeight","withMasterDetail","withExpandAndCollapseButton","detailAutoRowHeight","withSuppressRowHoverHighlight","suppressRowHoverHighlight","withTooltipHideDelay","tooltipHideDelay","withIsRowMaster","isRowMaster","withIsRowSelectable","isRowSelectable","getRowStyle","selectable","withIsExternalFilterPresent","isExternalFilterPresent","cellButtonParams","suppressMenu","withDoesExternalFilterPass","doesExternalFilterPass","withTabToNextCell","tabToNextCell","nextCellPosition","getRowHeightFunction","withPopupParent","htmlElement","withContext","updateGridContext","getNavigationHelperGridState","quickFilter","getQuickFilter","automaticFilterChangedSelection","automaticFirstDataRenderedSelection","buttonSelector","useDefaultMenuItems","customItems","isSortable","autoSizeColumns","getColDef","defaultColdef","getOption","hidePopupMenu","withOnColumnPinned","onColumnPinnedFunction","withOnColumnMoved","onColumnMovedFunction","withOnSortChanged","onSortChangedFunction","onRowSelectedFunction","onFilterChangedFunction","onFirstDataRenderedFunction","onBodyScrollFunction","gridReadyFunction","withOnColumnVisible","columnVisibleFunction","rowDataUpdatedFunction","withOnColumnResized","columnResizedFunction","onRowDoubleClickedFunction","onCellDoubleClickedFunction","gridSizeChangedFunction","onGridSizeChanged","rowClickedFunction","withOnCellMouseOver","cellMouseOverFunction","onCellMouseOver","withOnRowValueChanged","rowValueChangedFunction","onRowValueChanged","withOnRowEditingStopped","rowEditingStoppedFunction","onRowEditingStopped","cellValueChangedFunction","withOnCellEditingStopped","cellEditingStoppedFunction","onCellEditingStopped","withOnCellEditingStarted","cellEditingStartedFunction","onCellEditingStarted","withOnNewColumnsLoaded","onNewColumnsLoaded","rowGroupOpened","onRowGroupOpened","withOnDisplayedColumnsChanged","onDisplayedColumnsChangedFunction","selectionChanged","onRowDragEnd","onRowDragLeave","withSuppressMoveWhenRowDragging","suppressMoveWhenRowDragging","debouncedSaveColumnStateFn","throttle","isDestroyed","getGridColumnSettings","sizeColumnsToMoreSuitedWidth","translateGridText","onEventFunction","getColumnState","hideColumnChooser","gridSettings","_event$api2","_event$api","forceColumnAutosizeOnFirstDataRenderedEvent","applyColumnState","applyDefaultColDef","scrollToSavedPosition","actualDefaultColDef","applyOrder","expandAll","collapseAll","getTotalColumnsWidth","_gridApi$getColumnSta","totalWidth","widthToFitGrid","columnLimits","floatingFilterElement","savedScrollState","_document","gridBodyElement","isMultipleSelectionAllowed","renderedNodes","getRenderedNodes","displayed","childrenAfterFilter","_api$getGridOption","existingFunction","combinedFunction","arg1","arg2","_GridTooltipComponent","TEXT_ALIGN_RIGHT","CAPITALIZE","AMOUNT_FULL_WEIGHT","withUnit","buildAgGridCellListWithoutUnit","convertedUnit","buildAgGridCellProductionOrderStatus","buildAgGridCellColorRGB","showColorName","createColumnString","headerNameKey","textAlign","getSkeletonView","unsubSubject","BaseOverlayComponent","_BaseOverlayComponent","heightImage","titleFontSize","descriptionFontSize","shouldDisplaySpinner","minimumFontSize","shouldDisplayTitle","shouldDisplayDescription","shouldDisplayImage","shouldDisplayIcon","shouldDisplayActions","getActionClass","onActionClicked","notifyActionTriggered","scaled","isActionDisabled","objectParam","replaceableValues","createParamsObject","getActions","actionsParam","initializeOverlayComponent","action_r3","LoadingOverlayComponent_div_7_div_1_button_1_Template","LoadingOverlayComponent_div_7_div_1_button_2_Template","LoadingOverlayComponent_div_7_div_1_Template","_LoadingOverlayComponent","overlayComponentParams","_this$description","LoadingOverlayComponent_Conditional_1_Template","LoadingOverlayComponent_Conditional_2_Template","LoadingOverlayComponent_Conditional_3_Template","LoadingOverlayComponent_Conditional_5_Template","LoadingOverlayComponent_Conditional_6_Template","LoadingOverlayComponent_div_7_Template","NoDataOverlayComponent_div_7_div_1_button_1_Template","NoDataOverlayComponent_div_7_div_1_button_2_Template","NoDataOverlayComponent_div_7_div_1_Template","_NoDataOverlayComponent","actionsService","shouldShowFilterNoResult","machineDisconnectedOverlay","hasAgInitBeenCalled","initializeNoDataOverlayComponent","noDataOverlayComponentParams","getIsAnyFilterPresentFunction","setDescription","setActions","NoDataOverlayComponent_Conditional_1_Template","NoDataOverlayComponent_Conditional_2_Template","NoDataOverlayComponent_Conditional_3_Template","NoDataOverlayComponent_Conditional_5_Template","NoDataOverlayComponent_Conditional_6_Template","NoDataOverlayComponent_div_7_Template","_OverlayActionsService","OverlayComponent_div_7_div_1_button_1_Template","OverlayComponent_div_7_div_1_button_2_Template","OverlayComponent_div_7_div_1_Template","OverlayComponent","_OverlayComponent","OverlayComponent_Conditional_1_Template","OverlayComponent_Conditional_2_Template","OverlayComponent_Conditional_3_Template","OverlayComponent_Conditional_5_Template","OverlayComponent_Conditional_6_Template","OverlayComponent_div_7_Template","PlanningDisplayComponent","_PlanningDisplayComponent","planningHeight","getPlanningHeight","PLANNING_GRID_TOKEN","shift_r1","durationInMinutes","alternate","RegimesIndicatorComponent","_RegimesIndicatorComponent","shiftSchedules","onChanges","getShiftsForSchedule","_schedule$getShiftsFo","getShiftsForPeriod","RegimesIndicatorComponent_div_0_Template","dayCell_r1","DateHeaderRowComponent","_DateHeaderRowComponent","DateHeaderRowComponent_div_1_Template","dayCellData","PlanningDisplayHelper","timeView","dateRanges","TimeViewMode","DAY","hourOffset","getHourOffset","getHoursForDate","setHours","getNextDate","isSameDate","firstDate","secondDate","hourForDate_r2","onHourClicked","isHourSelected","HourHeaderRowComponent_div_0_div_1_Template","hoursForDate","HourHeaderRowComponent","_HourHeaderRowComponent","selectedHourChanged","_this$hoursForDate$fi","updateHoursToRender","_selectedHour","currentTime","setTimeToHour","isDifferentDate","_selectedDate","HOUR","HourHeaderRowComponent_div_0_Template","CurrentTimeIndicatorComponent","_CurrentTimeIndicatorComponent","shouldIndicatorBeRendered","_shouldIndicatorBeRendered","MILLISECONDS_IN_MINUTE","updateCurrentDate","CurrentTimeIndicatorComponent_div_0_Template","PlanningItemDisplayComponent","_PlanningItemDisplayComponent","applyCustomBorder","_this$planningItem","applyBackground","_this$planningItem2","clickable","_this$planningItem3","_this$planningItem4","displayElement","PlanningItemDisplayComponent_div_0_Template","onSelectedHourChanged","timeCell_r4","PlanningGridComponent_div_19_div_1_Template","dayCell_r5","PlanningGridComponent_div_24_div_1_Template","dayCell_r7","planningItem_r10","PlanningGridComponent_div_25_div_2_Template","rowIndex_r9","onGridSelected","PlanningGridComponent_div_25_vdw_planning_item_display_4_Template","rowIndicator_r11","rowBackgroundColor","_PlanningGridComponent","minCellWidth","gridSelected","rowIndicators","MAX_CELLS_PER_DAY","ROW_HEIGHT","DEFAULT_CELLS_PER_DAY","MAX_CELLS_PER_DAY_FOR_HOUR_VIEW","_rowWidth","_cellsPerDay","_cellsPerHour","cellsPerDay","newCellsPerDay","updatePlanningVariables","cellsPerHour","newCellsPerHour","timeViewMode","newTimeViewMode","_currentTime","_rowIndicators","toArray","_shiftSchedules","_resizeObserver","_this$_resizeObserver","_cachedScrollTop","onMouseWheelInput","deltaY","asMinutes","totalTime","getDateForHorizontalPosition","minutesForPosition","_this$bodyContainer","selectedHour","generateCells","gridChange","SimpleChange","normalCellDuration","timeInterval","currentCells","dayCell","cellIndex","dateForCell","PlanningRowComponent","ShiftScheduleComponent","PlanningGridComponent_vdw_date_header_row_13_Template","PlanningGridComponent_vdw_hour_header_row_14_Template","PlanningGridComponent_div_19_Template","PlanningGridComponent_div_24_Template","PlanningGridComponent_div_25_Template","rowTitle","TimelinePositionDirective","_TimelinePositionDirective","parentStartDate","_parentStartDate","calculatePosition","parentEndDate","_parentEndDate","_this$_data","_data","_this$_data2","_this$_data2$displayE","widthPercent","maxWidthPercent","leftPercent","isClippedRight","isClippedLeft","_this$_data3","periodChanged","_this$_data4","_parentDuration","PlanningDragDropDirective","_PlanningDragDropDirective","isItemDraggable","isDraggable","_this$planningItem$da","_this$planningGroup","dragDropService","planningRow","isNestedItem","dragMove","_this$planningItem$da2","_this$planningGroup2","_this$planningItem$da3","_this$planningGroup3","_this$planningGroup4","indicatorWidthPx","currentDisplayElement","startMousePositionInContainer","offsetTop","dragData","newGroupText","_this$planningItem$da4","_this$planningGroup5","displayElementChanges","previousDisplayElement","removeItemListeners","addItemListeners","_this$planningItem$da5","_this$planningItem5","_this$planningGroup6","DragDropData","PlanningDragIndicatorComponent_div_0_ng_container_7_Template","groupClass","itemClass","templateContext","PlanningDragIndicatorComponent","_PlanningDragIndicatorComponent","reference","groupTimelabelRef","setPosition","_data$draggedItem","_data$draggedItem2","updateIndicator","hoveredOverPlanningGroup","dragIndicatorPositionOnScreen","setHeight","setReactiveIndicatorStyling","newGroupHeader","PlanningDragIndicatorComponent_div_0_Template","PlanningHourIndicatorComponent","_PlanningHourIndicatorComponent","showDropIndicator","calculateNewPosition","_data$targetTime","topOffset","targetGrid","mousePositionInContainer","mouseOffsetFromDragIndicator","collideWithDropTarget","collideWithCurrentTime","targetStart","targetEnd","currentTimeLeft","indicator","dateText","_PlanningDragDropService","dragIndicatorRef","DRAGGING_INSIDE_GRID","isInsideGrid","mouseIsRightOfCurrentTime","changeHourHeaderRow","dragIndicator","onGridDragEnter","targets","composedPath","currentRow","targetRowIndex","itemInGroup","onGridDragOver","removeGridEventListeners","_this$hourIndicator","_this$emptyDragImage","_event$dataTransfer","effectAllowed","dragContainer","emptyDragImage","addGridEventListeners","PlanningGroupComponent_ng_template_0_div_4_div_1_Template","getStartDateForPositioning","getEndDateForPositioning","PlanningGroupComponent_ng_template_0_div_4_Template","register_r3","PlanningGroupComponent","_PlanningGroupComponent","hostElement","addItem","sortItems","ngAfterContentChecked","PlanningGroupComponent_ng_template_0_Template","itemIndex","_a$startDate","_b$startDate","_applyCustomBorder","_applyBackground","_displayElement","onPeriodChanged","_duration","PlanningItemDirective","_PlanningItemDirective","registerSelf","unRegisterSelf","PlanningRowData","indicatorText","_PlanningRowComponent","PlanningRowComponent_ng_template_0_Template","ShiftInstance","_start","_end","_durationInMinutes","fit","_ShiftScheduleComponent","shiftsQuery","sortShifts","refDate","addShiftInstancesForDate","addEmptySpace","getShiftsForDay","getStartOnDate","getEndOnDate","previousIterEnd","emptySpaceDuration","shiftA","shiftB","hoursA","minutesA","getTimeAsNumeric","hoursB","minutesB","ShiftComponent","_ShiftComponent","startHours","startMinutes","getDateWithTime","endHours","endMinutes","BmsTranslateAsyncPipe","_BmsTranslateAsyncPipe","mergedArgs","arg","BmsTranslatePipe","_BmsTranslatePipe","_TranslateService","l10nTranslationService","compile","useMessage","translatedParams","l10nLocale","_TranslationModule","WindowRef","nativeWindow","BrowserWindowRef","_BrowserWindowRef","windowFactory","browserWindowRef","platformId","isPlatformBrowser","PLATFORM_ID","webpackContext","req","webpackContextResolve","o","exports"],"ignoreList":[],"sourceRoot":"webpack:///","sources":["./apps/texconnect/src/app/application/helper/routing/routing-guards/dynamic-path.guard.ts","./apps/texconnect/src/app/application/security/can-activate-default-path.guard.ts","./apps/texconnect/src/app/application/security/can-activate-unauthorized-path.guard.ts","./apps/texconnect/src/app/application/security/can-activate-via-auth-guard.ts","./apps/texconnect/src/app/application/security/can-load-via-auth-guard.ts","./apps/texconnect/src/app/presentation/components/loading-file/loading-file.component.ts","./apps/texconnect/src/app/presentation/components/loading-file/loading-file.component.html","./apps/texconnect/src/app/presentation/components/logger/logger.component.html","./apps/texconnect/src/app/presentation/components/logger/logger.component.ts","./apps/texconnect/src/app/presentation/pages/status-codes/401/unauthorized-page.component.ts","./apps/texconnect/src/app/presentation/pages/status-codes/401/unauthorized-page.component.html","./apps/texconnect/src/app/app.routing.ts","./apps/texconnect/src/app/application/command/get-possible-property-values-of-list.ts","./apps/texconnect/src/app/application/command/print-document.ts","./apps/texconnect/src/app/application/configuration/backend-configuration.ts","./apps/texconnect/src/app/application/configuration/runtime-application-environment.ts","./apps/texconnect/src/app/application/directives/breadcrumb-form-linker.directive.ts","./apps/texconnect/src/app/application/directives/data-cy.directive.ts","./apps/texconnect/src/app/application/directives/has-permission.directive.ts","./apps/texconnect/src/app/application/directives/load-image.directive.ts","./apps/texconnect/src/app/application/directives/run-events-outside-angular.directive.ts","./apps/texconnect/src/app/application/grids/grid-identifier.enum.ts","./apps/texconnect/src/app/application/headers/header-identifier.enum.ts","./apps/texconnect/src/app/application/helper/advanced-search-utils.ts","./apps/texconnect/src/app/application/helper/backend-error-code.enum.ts","./apps/texconnect/src/app/application/helper/drawing/convert-json-to-drawing.ts","./apps/texconnect/src/app/application/helper/drawing/drawing-image-upload-helper.ts","./apps/texconnect/src/app/application/helper/error-handlers.ts","./apps/texconnect/src/app/application/helper/error-message-helper.ts","./apps/texconnect/src/app/application/helper/get-display-value-for-placeholder-separator.ts","./apps/texconnect/src/app/application/helper/grid-action-buttons-helper/grid-action-buttons-helper.ts","./apps/texconnect/src/app/application/helper/bitmap-metadata/bitmap-metadata.model.ts","./apps/texconnect/src/app/application/helper/bitmap-metadata/bitmap-metadata.reader.ts","./apps/texconnect/src/app/application/helper/image-upload-helper.ts","./apps/texconnect/src/app/application/helper/int-comparator.ts","./apps/texconnect/src/app/application/helper/is-click-outside-given-elements.ts","./apps/texconnect/src/app/application/helper/last-modified-card-utils.ts","./apps/texconnect/src/app/domain/machine/carpet-loom-machine.ts","./apps/texconnect/src/app/domain/machine/carpet-loom-no-jacquard-machine.ts","./apps/texconnect/src/app/domain/machine/colortec-machine.ts","./apps/texconnect/src/app/domain/machine/colorteclplus-machine.ts","./apps/texconnect/src/app/domain/machine/extrusion-machine.ts","./apps/texconnect/src/app/domain/machine/finishing-machine.ts","./apps/texconnect/src/app/domain/machine/jacquard-machine.ts","./apps/texconnect/src/app/domain/machine/myriad-machine.ts","./apps/texconnect/src/app/domain/machine/superbadye-machine.ts","./apps/texconnect/src/app/domain/machine/superbaheat-machine.ts","./apps/texconnect/src/app/domain/machine/superbawinder-machine.ts","./apps/texconnect/src/app/domain/machine/velvet-no-jacquard-machine.ts","./apps/texconnect/src/app/application/helper/machine/get-machine-class-from-machine-type.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-action-item.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-external-link-item.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-item-size.enum.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-item.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-route-link-item.ts","./apps/texconnect/src/app/application/helper/routing/linked-route-utils.ts","./apps/texconnect/src/app/application/helper/navigation-helper/navigation-helper.service.ts","./apps/texconnect/src/app/application/helper/navigation-helper/page-type.enum.ts","./apps/texconnect/src/app/application/helper/orderbook/order-lines-grid.service.ts","./apps/texconnect/src/app/application/helper/planning-prototype/planning-item-helper.ts","./apps/texconnect/src/app/application/helper/planning/get-items-for-date-range.ts","./apps/texconnect/src/app/application/helper/planning/get-total-running-time-in-milliseconds-for-date-range.ts","./apps/texconnect/src/app/application/helper/production-schedule-builder/calculate-drawing-width-in-dents.ts","./apps/texconnect/src/app/application/helper/production-schedule/get-list-drawing-from-production-schedule-item.ts","./apps/texconnect/src/app/application/helper/remove-confirmation/remove-confirmation.service.ts","./apps/texconnect/src/app/application/security/can-activate-permission-prototype.guard.ts","./apps/texconnect/src/app/application/helper/routing/authorized-route-factory.ts","./apps/texconnect/src/app/application/helper/routing/navigation-id.enum.ts","./apps/texconnect/src/app/application/helper/routing/navigation-utils.ts","./apps/texconnect/src/app/application/helper/routing/route-node.ts","./apps/texconnect/src/app/application/helper/routing/route-branch.ts","./apps/texconnect/src/app/application/helper/routing/article-route.ts","./apps/texconnect/src/app/application/helper/routing/color-route.ts","./apps/texconnect/src/app/application/helper/routing/color-set-route.ts","./apps/texconnect/src/app/application/helper/routing/colored-yarn-set-route.ts","./apps/texconnect/src/app/application/helper/routing/creel-route.ts","./apps/texconnect/src/app/application/helper/routing/finishing-template-route.ts","./apps/texconnect/src/app/application/helper/routing/machine-quality-route.ts","./apps/texconnect/src/app/application/helper/routing/root-route.ts","./apps/texconnect/src/app/application/helper/routing/route-leaf.ts","./apps/texconnect/src/app/application/helper/routing/sales-order-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-bi-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-bot-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-edit-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-fab-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-state-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-style-route.ts","./apps/texconnect/src/app/application/helper/routing/yarn-route.ts","./apps/texconnect/src/app/application/helper/routing/yarn-set-route.ts","./apps/texconnect/src/app/application/helper/routing/alert-route.ts","./apps/texconnect/src/app/application/helper/routing/buggy-route.ts","./apps/texconnect/src/app/application/helper/routing/calendar-route.ts","./apps/texconnect/src/app/application/helper/routing/colored-yarn-route.ts","./apps/texconnect/src/app/application/helper/routing/company-weave-structure-route.ts","./apps/texconnect/src/app/application/helper/routing/customer-route.ts","./apps/texconnect/src/app/application/helper/routing/data-unit-setup-catalog-route.ts","./apps/texconnect/src/app/application/helper/routing/data-unit-setup-route.ts","./apps/texconnect/src/app/application/helper/routing/declaration-route.ts","./apps/texconnect/src/app/application/helper/routing/device-template-catalog-route.ts","./apps/texconnect/src/app/application/helper/routing/device-template-route.ts","./apps/texconnect/src/app/application/helper/routing/event-route.ts","./apps/texconnect/src/app/application/helper/routing/fixed-schedule-route.ts","./apps/texconnect/src/app/application/helper/routing/grouped-weave-structure-route.ts","./apps/texconnect/src/app/application/helper/routing/machine-data-sources.route.ts","./apps/texconnect/src/app/application/helper/routing/operator-route.ts","./apps/texconnect/src/app/application/helper/routing/orderbook-route.ts","./apps/texconnect/src/app/application/helper/routing/path-layout-template.route.ts","./apps/texconnect/src/app/application/helper/routing/physical-quantity-route.ts","./apps/texconnect/src/app/application/helper/routing/planning-prototype-route.ts","./apps/texconnect/src/app/application/helper/routing/planning-route.ts","./apps/texconnect/src/app/application/helper/routing/plastic-product-route.ts","./apps/texconnect/src/app/application/helper/routing/plastic-route.ts","./apps/texconnect/src/app/application/helper/routing/production-order.route.ts","./apps/texconnect/src/app/application/helper/routing/profile-route.ts","./apps/texconnect/src/app/application/helper/routing/reject-reason-route.ts","./apps/texconnect/src/app/application/helper/routing/report-item-route.ts","./apps/texconnect/src/app/application/helper/routing/resource-type-route.ts","./apps/texconnect/src/app/application/helper/routing/settings-route.ts","./apps/texconnect/src/app/application/helper/routing/shift-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-bot-machine-documentation-route.ts","./apps/texconnect/src/app/application/helper/routing/tex-bot-training-route.ts","./apps/texconnect/src/app/application/helper/routing/tool-route.ts","./apps/texconnect/src/app/application/helper/routing/tuft-product-route.ts","./apps/texconnect/src/app/application/helper/routing/tufting-route.ts","./apps/texconnect/src/app/application/helper/routing/utilities-route.ts","./apps/texconnect/src/app/application/helper/routing/weave-product-route.ts","./apps/texconnect/src/app/application/helper/routing/weave-structure-route.ts","./apps/texconnect/src/app/application/helper/routing/weaving.route.ts","./apps/texconnect/src/app/application/helper/routing/weft-colored-yarn-set-route.ts","./apps/texconnect/src/app/application/helper/routing/route-utils.ts","./apps/texconnect/src/app/application/helper/source-element-utils.ts","./apps/texconnect/src/app/application/helper/string-utils.ts","./apps/texconnect/src/app/application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set-with-start-dent.ts","./apps/texconnect/src/app/application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set.ts","./apps/texconnect/src/app/application/helper/textile-data/colored-yarn-set/least-common-multiple.ts","./apps/texconnect/src/app/application/helper/textile-data/color-set/overview-list-color-set-stub-factory.ts","./apps/texconnect/src/app/application/helper/textile-data/yarn-set/overview-list-yarn-set-stub-factory.ts","./apps/texconnect/src/app/application/helper/textile-data/colored-yarn-set/overview-list-colored-yarn-set-stub-factory.ts","./apps/texconnect/src/app/application/helper/textile-data/yarn-type/overview-list-yarn-type-stub-factory.ts","./apps/texconnect/src/app/application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service.ts","./apps/texconnect/src/app/application/navigation-history/navigation-history.service.ts","./apps/texconnect/src/app/application/pipes/duration-format.pipe.ts","./apps/texconnect/src/app/application/pipes/highlight-search.pipe.ts","./apps/texconnect/src/app/application/pipes/report-item-format.pipe.ts","./apps/texconnect/src/app/application/pipes/weave-structure-column.pipe.ts","./apps/texconnect/src/app/application/security/can-activate-permission.guard.ts","./apps/texconnect/src/app/application/security/can-deactivate-unsaved-changes-notifier.guard.ts","./apps/texconnect/src/app/application/services/navigation-breadcrumbs/navigation-breadcrumbs.service.ts","./apps/texconnect/src/app/presentation/components/onboarding-dialog/onboarding-navigation-step.enum.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/commands/open-mobile-navigation-bar-command.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-item-mobile-position.enum.ts","./apps/texconnect/src/app/application/helper/mobile-navigation/mobile-navigation-bar-item-position.enum.ts","./apps/texconnect/src/app/application/services/navigation/mobile-navigation.service.ts","./apps/texconnect/src/app/application/services/navigation/navigation.service.ts","./apps/texconnect/src/app/application/sidebar/sidebar-size.enum.ts","./apps/texconnect/src/app/application/validators/async-unique-validator.ts","./apps/texconnect/src/app/application/validators/is-multiple-of-validator.ts","./apps/texconnect/src/app/domain/article/article.ts","./apps/texconnect/src/app/domain/article/creel-position-for-article.ts","./apps/texconnect/src/app/domain/article/drawing-for-article.ts","./apps/texconnect/src/app/domain/article/finishing-for-article.ts","./apps/texconnect/src/app/domain/article/machine-quality-for-article.ts","./apps/texconnect/src/app/domain/background-jobs/background-job-type.ts","./apps/texconnect/src/app/domain/background-jobs/background-status.ts","./apps/texconnect/src/app/domain/background-jobs/background-task-action.ts","./apps/texconnect/src/app/domain/calendar/shift/shift.ts","./apps/texconnect/src/app/domain/color-pattern-visualisation.ts","./apps/texconnect/src/app/domain/conflicts/conflict-type.ts","./apps/texconnect/src/app/domain/custom-settings/custom-settings.ts","./apps/texconnect/src/app/domain/custom-settings/name-generation-property.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-part-type.enum.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-part.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-parts/calculated-value-part.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-parts/custom-text-part.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-parts/entity-property-part.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-parts/serial-number-part.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-property-translate.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator.ts","./apps/texconnect/src/app/domain/custom-settings/name-generator-parts/part-from-json.ts","./apps/texconnect/src/app/domain/customer/customer-address-details.ts","./apps/texconnect/src/app/domain/customer/customer-contact-details.ts","./apps/texconnect/src/app/domain/customer/customer.ts","./apps/texconnect/src/app/domain/drawing-library/fixed-shape.enum.ts","./apps/texconnect/src/app/domain/drawing-pattern-visualisation.ts","./apps/texconnect/src/app/domain/event/priority-level.enum.ts","./apps/texconnect/src/app/domain/fonts/font-family.enum.ts","./apps/texconnect/src/app/domain/fonts/font-style.enum.ts","./apps/texconnect/src/app/domain/fonts/font-weight.enum.ts","./apps/texconnect/src/app/domain/id-name-description.ts","./apps/texconnect/src/app/domain/id-name-used.ts","./apps/texconnect/src/app/domain/id-name-version.ts","./apps/texconnect/src/app/domain/id-name.ts","./apps/texconnect/src/app/domain/machine/base-machine-type.ts","./apps/texconnect/src/app/domain/machine/builder-type.enum.ts","./apps/texconnect/src/app/domain/machine/controller-type.ts","./apps/texconnect/src/app/domain/machine/dyeing-machine-type.ts","./apps/texconnect/src/app/domain/machine/dyeing-machine.ts","./apps/texconnect/src/app/domain/machine/equipment-manufacturer.ts","./apps/texconnect/src/app/domain/machine/equipment.ts","./apps/texconnect/src/app/domain/machine/gauge.ts","./apps/texconnect/src/app/domain/machine/jacquard-machine-loom-layout-zone-repeat-type.enum.ts","./apps/texconnect/src/app/domain/machine/jacquard-machine-loom-layout-zone-type.enum.ts","./apps/texconnect/src/app/domain/machine/jacquard-machine-loom-layout-zone.ts","./apps/texconnect/src/app/domain/machine/machine-efficiency-level.enum.ts","./apps/texconnect/src/app/domain/machine/machine-group.ts","./apps/texconnect/src/app/domain/machine/machine-manufacturer.ts","./apps/texconnect/src/app/domain/machine/machine-status.enum.ts","./apps/texconnect/src/app/domain/machine/machine-type.enum.ts","./apps/texconnect/src/app/domain/machine/numbering-mode.enum.ts","./apps/texconnect/src/app/domain/machine/plastics-machine-type.ts","./apps/texconnect/src/app/domain/machine/plastics-machine.ts","./apps/texconnect/src/app/domain/machine/standard-speed.enum.ts","./apps/texconnect/src/app/domain/machine/technology.ts","./apps/texconnect/src/app/domain/machine/tool-status.enum.ts","./apps/texconnect/src/app/domain/machine/tuft-machine.ts","./apps/texconnect/src/app/domain/machine/tufting-machine-type.ts","./apps/texconnect/src/app/domain/machine/unconfigured-machine.ts","./apps/texconnect/src/app/domain/machine/velvet-machine-drawing-in-type.enum.ts","./apps/texconnect/src/app/domain/machine/velvet-machine-drawing-in.ts","./apps/texconnect/src/app/domain/machine/velvet-machine-ground-drawing-in.ts","./apps/texconnect/src/app/domain/machine/velvet-machine-pile-drawing-in.ts","./apps/texconnect/src/app/domain/machine/velvet-machine.ts","./apps/texconnect/src/app/domain/machine/weaving-machine-type.ts","./apps/texconnect/src/app/domain/machine/weaving-machine.ts","./apps/texconnect/src/app/domain/machine/winder-machine-type.ts","./apps/texconnect/src/app/domain/machine/winder-machine.ts","./apps/texconnect/src/app/domain/name-generator/enums/cut-from.enum.ts","./apps/texconnect/src/app/domain/name-generator/enums/name-generator-separator.enum.ts","./apps/texconnect/src/app/domain/navigation/navigation-state.enum.ts","./apps/texconnect/src/app/domain/notifications/highest-severity-notification.ts","./apps/texconnect/src/app/domain/notifications/notification.ts","./apps/texconnect/src/app/domain/order-lines-target.enum.ts","./apps/texconnect/src/app/domain/orderbook/order-line-additional-info.ts","./apps/texconnect/src/app/domain/orderbook/order-line-status.ts","./apps/texconnect/src/app/domain/article/colored-yarn-set-for-article.ts","./apps/texconnect/src/app/domain/orderbook/design-for-order-line.ts","./apps/texconnect/src/app/domain/orderbook/article-for-order-line.ts","./apps/texconnect/src/app/domain/orderbook/production-schedule-for-order-line.ts","./apps/texconnect/src/app/domain/orderbook/order-line.ts","./apps/texconnect/src/app/domain/path-layout-template/path-layout-template-path.ts","./apps/texconnect/src/app/domain/path-layout-template/path-layout-template.ts","./apps/texconnect/src/app/domain/pattern-visualisation-type.enum.ts","./apps/texconnect/src/app/domain/pattern-visualisation.ts","./apps/texconnect/src/app/domain/image-pattern-visualisation.ts","./apps/texconnect/src/app/domain/svg-manchon-visualisation.ts","./apps/texconnect/src/app/domain/pattern.ts","./apps/texconnect/src/app/domain/planning-prototype/carpet/fixed-schedule-placeholder.ts","./apps/texconnect/src/app/domain/planning-prototype/carpet/fixed-schedule.ts","./apps/texconnect/src/app/domain/planning-prototype/carpet/order-carpet.ts","./apps/texconnect/src/app/domain/planning-prototype/carpet/production-order.ts","./apps/texconnect/src/app/domain/planning-prototype/carpet/run-carpet.ts","./apps/texconnect/src/app/domain/planning-prototype/custom-settings/planning-filter.ts","./apps/texconnect/src/app/domain/planning-prototype/maintenance-type.ts","./apps/texconnect/src/app/domain/planning-prototype/maintenance.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-equipment.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-item-factory.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-item-forecast.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-item-type.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-item.ts","./apps/texconnect/src/app/domain/planning-prototype/plastic/order-plastic.ts","./apps/texconnect/src/app/domain/planning-prototype/plastic/plastic-product.ts","./apps/texconnect/src/app/domain/planning-prototype/plastic/production-order-plastic.ts","./apps/texconnect/src/app/domain/planning-prototype/plastic/run-plastic.ts","./apps/texconnect/src/app/domain/planning-prototype/plastic/tool.ts","./apps/texconnect/src/app/domain/planning-prototype/to-plan/compatible-machine.ts","./apps/texconnect/src/app/domain/planning-prototype/to-plan/production-order-to-plan.ts","./apps/texconnect/src/app/domain/planning-prototype/to-plan/production-order-type.ts","./apps/texconnect/src/app/domain/planning-prototype/tufting/order-tufting.ts","./apps/texconnect/src/app/domain/planning-prototype/tufting/production-order-tuft.ts","./apps/texconnect/src/app/domain/planning-prototype/tufting/run-tufting.ts","./apps/texconnect/src/app/domain/planning-prototype/tufting/tuft-product.ts","./apps/texconnect/src/app/domain/planning-prototype/weaving/order-weaving.ts","./apps/texconnect/src/app/domain/planning-prototype/weaving/production-order-weaving.ts","./apps/texconnect/src/app/domain/planning-prototype/weaving/run-weaving.ts","./apps/texconnect/src/app/domain/planning-prototype/weaving/weave-product.ts","./apps/texconnect/src/app/domain/planning/planning-machine-run-factory.ts","./apps/texconnect/src/app/presentation/pages/texbi/machine-event-board/machine-event.ts","./apps/texconnect/src/app/presentation/pages/texbi/machine-event-board/machine-event-declaration.ts","./apps/texconnect/src/app/presentation/pages/texbi/machine-event-board/machine-event-group.ts","./apps/texconnect/src/app/domain/planning/calendar-item-group.ts","./apps/texconnect/src/app/domain/planning/calendar-item.ts","./apps/texconnect/src/app/domain/planning/carpet/planning-creel.ts","./apps/texconnect/src/app/domain/planning/carpet/planning-machine-carpet-run.ts","./apps/texconnect/src/app/domain/planning/carpet/planning-machine-creel-change.ts","./apps/texconnect/src/app/domain/planning/carpet/planning-machine-quality.ts","./apps/texconnect/src/app/domain/planning/carpet/production-order-carpet-for-planning-order.ts","./apps/texconnect/src/app/domain/planning/planning-item-type.enum.ts","./apps/texconnect/src/app/domain/planning/planning-item.ts","./apps/texconnect/src/app/domain/planning/planning-machine-maintenance.ts","./apps/texconnect/src/app/domain/planning/planning-machine-run.ts","./apps/texconnect/src/app/domain/planning/planning-machine-unavailability.ts","./apps/texconnect/src/app/domain/planning/planning-machine.ts","./apps/texconnect/src/app/domain/planning/planning-order-data.ts","./apps/texconnect/src/app/domain/planning/planning-order.ts","./apps/texconnect/src/app/domain/planning/tufting/planning-machine-tufting-run.ts","./apps/texconnect/src/app/domain/planning/tufting/planning-tuft-product.ts","./apps/texconnect/src/app/domain/planning/tufting/production-order-tufting-for-planning-order.ts","./apps/texconnect/src/app/domain/planning/weaving/planning-machine-warp-change.ts","./apps/texconnect/src/app/domain/planning/weaving/planning-machine-weaving-run.ts","./apps/texconnect/src/app/domain/planning/weaving/planning-weave-product.ts","./apps/texconnect/src/app/domain/planning/weaving/production-order-weaving-for-planning-order.ts","./apps/texconnect/src/app/domain/position-of-dialog.ts","./apps/texconnect/src/app/domain/production-order-lite/production-order-lite.ts","./apps/texconnect/src/app/domain/production-order-lite/production-order-weaving/production-order-weaving.ts","./apps/texconnect/src/app/domain/production-schedule/bmp-drawing.ts","./apps/texconnect/src/app/domain/production-schedule/bmp-production-schedule-item-in-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/buggy-for-production-schedule.ts","./apps/texconnect/src/app/domain/production-schedule/creel-for-production-schedule.ts","./apps/texconnect/src/app/domain/production-schedule/custom-settings/free-zone-settings.ts","./apps/texconnect/src/app/domain/production-schedule/custom-settings/loom-schedule-settings.ts","./apps/texconnect/src/app/domain/production-schedule/custom-settings/path-label-settings.ts","./apps/texconnect/src/app/domain/production-schedule/custom-settings/production-order-custom-settings.ts","./apps/texconnect/src/app/domain/production-schedule/custom-settings/rest-zone-settings.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-configuration-weave-quality.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-configuration-with-color-and-yarn-set.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-configuration-with-colored-yarn-set.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-configuration.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-shape-abbreviation.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-type.enum.ts","./apps/texconnect/src/app/domain/production-schedule/drawing.ts","./apps/texconnect/src/app/domain/production-schedule/ep-drawing.ts","./apps/texconnect/src/app/domain/production-schedule/ep-production-schedule-item-in-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/finishing-for-production-schedule.ts","./apps/texconnect/src/app/domain/production-schedule/free-zone/free-zone.ts","./apps/texconnect/src/app/domain/production-schedule/free-zone/initial-free-zone.ts","./apps/texconnect/src/app/domain/production-schedule/jute-information-for-part.ts","./apps/texconnect/src/app/domain/production-schedule/jute-information.ts","./apps/texconnect/src/app/domain/production-schedule/jute-production-schedule-item-in-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/loom-delete-policy/loom-delete-policy.enum.ts","./apps/texconnect/src/app/domain/production-schedule/weave-structure-for-production-schedule.ts","./apps/texconnect/src/app/domain/production-schedule/machine-quality-for-production-schedule.ts","./apps/texconnect/src/app/domain/machine/machine-role-code.ts","./apps/texconnect/src/app/domain/production-schedule/machine-summary-jacquard.ts","./apps/texconnect/src/app/domain/production-schedule/machine-summary.ts","./apps/texconnect/src/app/domain/production-schedule/manual-non-production-item-drawing.ts","./apps/texconnect/src/app/domain/production-schedule/mapping-for-design.ts","./apps/texconnect/src/app/domain/production-schedule/non-production-item-drawing.ts","./apps/texconnect/src/app/domain/production-schedule/non-production-item-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/path-label-information-for-part.ts","./apps/texconnect/src/app/domain/production-schedule/path-label-information.ts","./apps/texconnect/src/app/domain/production-schedule/path-label-drawing.ts","./apps/texconnect/src/app/domain/production-schedule/path-label-production-schedule-item-in-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/path-label-type.enum.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-item-in-path-group-status.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-item-in-path-group.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-order-line.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-path.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-phase.enum.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-product-configuration.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-status.enum.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-paths-of-colored-yarn-set.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule.ts","./apps/texconnect/src/app/domain/production-schedule/rest-zone/initial-rest-zone.ts","./apps/texconnect/src/app/domain/production-schedule/rest-zone/rest-zone-position.enum.ts","./apps/texconnect/src/app/domain/production-schedule/rest-zone/rest-zone.ts","./apps/texconnect/src/app/domain/production-schedule/tft-drawing.ts","./apps/texconnect/src/app/domain/profile/permission.enum.ts","./apps/texconnect/src/app/domain/profile/role-info.ts","./apps/texconnect/src/app/domain/profile/user-identity.ts","./apps/texconnect/src/app/domain/profile/subscription.ts","./apps/texconnect/src/app/domain/profile/versionable-type.ts","./apps/texconnect/src/app/domain/property-value.ts","./apps/texconnect/src/app/domain/report-data-set/report-item-template-field.enum.ts","./apps/texconnect/src/app/domain/sales-order/article-for-sales-order-line.ts","./apps/texconnect/src/app/domain/sales-order/customer-for-sales-order.ts","./apps/texconnect/src/app/domain/sales-order/order-line-for-sales-order.ts","./apps/texconnect/src/app/domain/sales-order/payment-status.ts","./apps/texconnect/src/app/domain/sales-order/sales-order.ts","./apps/texconnect/src/app/domain/svg-pattern-visualisation.ts","./apps/texconnect/src/app/domain/target-for-list-of-drawings.enum.ts","./apps/texconnect/src/app/domain/texfab/plastic-production-order/id-name-unit-of-measurement.ts","./apps/texconnect/src/app/domain/texfab/plastic-production-order/plastic-production-order.ts","./apps/texconnect/src/app/domain/texfab/tuft-production-order/tuft-production-order.ts","./apps/texconnect/src/app/domain/textile-data/color-set/color-set.ts","./apps/texconnect/src/app/domain/textile-data/color-set/horizontal-position-of-color-creel-position.ts","./apps/texconnect/src/app/domain/textile-data/colored-yarn-set/colored-yarn-set.ts","./apps/texconnect/src/app/domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position.ts","./apps/texconnect/src/app/domain/textile-data/colored-yarn-set/material-set.ts","./apps/texconnect/src/app/domain/textile-data/creel/colored-yarn-set-position.ts","./apps/texconnect/src/app/domain/textile-data/creel/creel-position.ts","./apps/texconnect/src/app/domain/textile-data/creel/horizontal-position-of-creel-position-type.enum.ts","./apps/texconnect/src/app/domain/textile-data/creel/horizontal-position-of-creel-position.ts","./apps/texconnect/src/app/domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent.ts","./apps/texconnect/src/app/domain/textile-data/creel/overview-list-creel-position.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/abstract-finishing.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/cutting-line-properties.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-cutbar-properties.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-cutbars-information.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-image-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-position-in-carpet.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-text-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/backcoating-information.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/cutbar-pattern.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-cutbar-properties.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-cutbars-information.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-image-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-label-type.enum.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-position-in-carpet.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing-text-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/machine-quality-for-finishing.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/finishing.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/finishing/font-settings.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/folding-correction-properties.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/image-for-finishing-image-label.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/label-position-in-label-place.enum.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/placeholder-category.ts","./apps/texconnect/src/app/domain/textile-data/finishing-and-finishing-template/placeholder-component.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/carpet-weave-quality.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/commercial-machine-quality.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/general-jute-settings.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/incorporation-factor-exception.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/jute.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/label.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/long-float-correction-rule.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/long-float-stitching-method.enum.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/long-float-thread-type.enum.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/path-width.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/post-processing.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/selvedge.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/selvedges.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/tuft-Length-exception.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/velvet-weave-quality.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/weave-quality.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/weft-selection-type.enum.ts","./apps/texconnect/src/app/domain/textile-data/machine-quality/weft-selection.ts","./apps/texconnect/src/app/domain/textile-data/multi-delete-reponse.ts","./apps/texconnect/src/app/domain/textile-data/plastic-product/plastic-product.ts","./apps/texconnect/src/app/domain/textile-data/plastic-product/unit-of-measurement.enum.ts","./apps/texconnect/src/app/domain/textile-data/tuft-product/tuft-product.ts","./apps/texconnect/src/app/domain/textile-data/weave-product/weave-product.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/double-width-weave-structure.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/overview-list-double-width-weave-structure.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/id-name-version-position.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/overview-list-single-width-weave-structure.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/single-width-weave-structure.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/weave-pattern/weave-pattern.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/weave-structure-details.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/weave-structure-for-machine-quality.ts","./apps/texconnect/src/app/domain/textile-data/weave-structure/weave-structure.ts","./apps/texconnect/src/app/domain/textile-data/weft-colored-yarn-set/weft-colored-yarn-set.ts","./apps/texconnect/src/app/domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position.ts","./apps/texconnect/src/app/domain/textile-data/yarn-set/yarn-set.ts","./apps/texconnect/src/app/domain/textile-data/yarn-type/thread.ts","./apps/texconnect/src/app/domain/textile-data/yarn-type/yarn-type.ts","./apps/texconnect/src/app/domain/utilities/tool/matching-criteria.ts","./apps/texconnect/src/app/domain/utilities/tool/tool.ts","./apps/texconnect/src/app/infrastructure/http/article/articles.ts","./apps/texconnect/src/app/infrastructure/http/authentication/authentication.ts","./apps/texconnect/src/app/infrastructure/http/authentication/authentication-token.ts","./apps/texconnect/src/app/infrastructure/http/authentication/http-authentication.service.ts","./apps/texconnect/src/app/infrastructure/http/background-jobs/background-jobs.ts","./apps/texconnect/src/app/infrastructure/http/buggy/http-buggy-custom-settings.service.ts","./apps/texconnect/src/app/infrastructure/http/buggy/http-buggy.service.ts","./apps/texconnect/src/app/infrastructure/http/calendar/schedule/http-schedules.service.ts","./apps/texconnect/src/app/infrastructure/http/calendar/shift/http-shifts.service.ts","./apps/texconnect/src/app/infrastructure/http/cancel-request-context.ts","./apps/texconnect/src/app/infrastructure/http/color-set/color-sets.ts","./apps/texconnect/src/app/infrastructure/http/color-set/http-color-sets.service.ts","./apps/texconnect/src/app/infrastructure/http/color/colors.ts","./apps/texconnect/src/app/infrastructure/http/color/http-colors.service.ts","./apps/texconnect/src/app/infrastructure/http/colored-yarn-set/colored-yarn-sets.ts","./apps/texconnect/src/app/infrastructure/http/colored-yarn-set/http-colored-yarn-sets.service.ts","./apps/texconnect/src/app/infrastructure/http/creel/creels.ts","./apps/texconnect/src/app/infrastructure/http/customer/customers.ts","./apps/texconnect/src/app/infrastructure/http/customer/http-customers.service.ts","./apps/texconnect/src/app/infrastructure/http/default-custom-settings-repository.ts","./apps/texconnect/src/app/infrastructure/http/drawing/drawings.ts","./apps/texconnect/src/app/infrastructure/http/extended-http-params.ts","./apps/texconnect/src/app/infrastructure/http/finishing-template/finishing-templates.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing-template/overview/overview-list-finishing-template.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/cutbar-properties-for-machine-quality.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/cutbars-information-for-machine-quality.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/finishing-template-for-machine-quality.ts","./apps/texconnect/src/app/infrastructure/http/finishing-template/http-finishing-templates.service.ts","./apps/texconnect/src/app/infrastructure/http/finishing/finishings.ts","./apps/texconnect/src/app/infrastructure/http/finishing/http-finishings.service.ts","./apps/texconnect/src/app/infrastructure/http/machine-overview/machine-overview.ts","./apps/texconnect/src/app/application/helper/textile-data/machine-quality/get-weave-quality-class-from-quality-type.ts","./apps/texconnect/src/app/infrastructure/http/machine-quality/http-machine-qualities.service.ts","./apps/texconnect/src/app/infrastructure/http/machine-quality/machine-qualities.ts","./apps/texconnect/src/app/application/helper/machine/get-machine-type-class-from-machine-type.ts","./apps/texconnect/src/app/infrastructure/http/machine-type/http-machine-types.service.ts","./apps/texconnect/src/app/application/helper/textile-data/color-set/color-set-stub-factory.ts","./apps/texconnect/src/app/application/helper/textile-data/yarn-set/yarn-set-stub-factory.ts","./apps/texconnect/src/app/application/helper/textile-data/colored-yarn-set/colored-yarn-set-stub-factory.ts","./apps/texconnect/src/app/presentation/pages/textile-data/company-weave-structure/overview/overview-list-machine-company.ts","./apps/texconnect/src/app/infrastructure/http/machine/http-machines.service.ts","./apps/texconnect/src/app/infrastructure/http/machine/machines.interface.ts","./apps/texconnect/src/app/infrastructure/http/notifications/http-notifications.service.ts","./apps/texconnect/src/app/infrastructure/http/orderbook/orderbook.ts","./apps/texconnect/src/app/infrastructure/http/path-layout-template/http-path-layout-templates.service.ts","./apps/texconnect/src/app/infrastructure/http/patterns/get-pattern-visualisation-by-pattern-id.ts","./apps/texconnect/src/app/infrastructure/http/patterns/http-patterns.service.ts","./apps/texconnect/src/app/infrastructure/http/patterns/patterns.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-line.ts","./apps/texconnect/src/app/domain/planning-prototype/planning-forecast.ts","./apps/texconnect/src/app/domain/planning-prototype/to-plan/fixed-schedule-compatibility.ts","./apps/texconnect/src/app/domain/planning-prototype/to-plan/fixed-schedule-to-plan.ts","./apps/texconnect/src/app/infrastructure/http/planning-prototype/http-planning-prototype.service.ts","./apps/texconnect/src/app/infrastructure/http/planning/planning.ts","./apps/texconnect/src/app/infrastructure/http/plastic-product/http-plastic-products-custom-settings.service.ts","./apps/texconnect/src/app/infrastructure/http/plastic-product/http-plastic-products.service.ts","./apps/texconnect/src/app/infrastructure/http/plastic-production-order/http-plastic-production-orders.service.ts","./apps/texconnect/src/app/infrastructure/http/product-configuration/product-configuration.interface.ts","./apps/texconnect/src/app/infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service.ts","./apps/texconnect/src/app/infrastructure/http/production-order-weaving/production-orders-weaving.ts","./apps/texconnect/src/app/infrastructure/http/production-order/production-orders.ts","./apps/texconnect/src/app/infrastructure/http/production-schedule/production-schedules.ts","./apps/texconnect/src/app/domain/profile/user-info.ts","./apps/texconnect/src/app/domain/profile/profile-info.ts","./apps/texconnect/src/app/domain/profile/company.ts","./apps/texconnect/src/app/infrastructure/http/profile/company-subscriptions.ts","./apps/texconnect/src/app/infrastructure/http/profile/http-profile.service.ts","./apps/texconnect/src/app/infrastructure/http/profile/profile.ts","./apps/texconnect/src/app/infrastructure/http/raw-materials/http-raw-materials.service.ts","./apps/texconnect/src/app/infrastructure/http/sales-order/sales-orders.ts","./apps/texconnect/src/app/infrastructure/http/stock-location/http-stock-location.service.ts","./apps/texconnect/src/app/infrastructure/http/tool/http-tools-custom-settings.service.ts","./apps/texconnect/src/app/infrastructure/http/tool/http-tools.service.ts","./apps/texconnect/src/app/infrastructure/http/tuft-product/http-tuft-products.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/overview/overview-list-tuft-production-order.ts","./apps/texconnect/src/app/infrastructure/http/tuft-production-order/http-tuft-production-orders.service.ts","./apps/texconnect/src/app/infrastructure/http/weave-product/http-weave-products.service.ts","./apps/texconnect/src/app/infrastructure/http/weave-product/weave-products.interface.ts","./apps/texconnect/src/app/infrastructure/http/weave-structure/http-weave-structures.service.ts","./apps/texconnect/src/app/infrastructure/http/weave-structure/weave-structures.ts","./apps/texconnect/src/app/infrastructure/http/weft-colored-yarn-set/http-weft-colored-yarn-sets.service.ts","./apps/texconnect/src/app/infrastructure/http/weft-colored-yarn-set/weft-colored-yarn-sets.ts","./apps/texconnect/src/app/infrastructure/http/yarn-consumption/yarn-consumption.ts","./apps/texconnect/src/app/infrastructure/http/yarn-set/http-yarn-sets.service.ts","./apps/texconnect/src/app/infrastructure/http/yarn-set/yarn-sets.ts","./apps/texconnect/src/app/infrastructure/http/yarn-type/http-yarn-types.service.ts","./apps/texconnect/src/app/presentation/components/onboarding-dialog/onboarding-dialog.component.html","./apps/texconnect/src/app/presentation/components/onboarding-dialog/onboarding-dialog.component.ts","./apps/texconnect/src/app/infrastructure/onboarding/onboarding.service.ts","./apps/texconnect/src/app/infrastructure/onboarding/onboarding.ts","./apps/texconnect/src/app/infrastructure/signalr/events/signalr-event.interface.ts","./apps/texconnect/src/app/infrastructure/signalr/jobs/realtime-background-jobs.ts","./apps/texconnect/src/app/infrastructure/signalr/machine/signalr-machine.service.ts","./apps/texconnect/src/app/infrastructure/signalr/notifications/signalr-notifications.service.ts","./apps/texconnect/src/app/domain/planning-prototype/real-time/report-item-group-type.enum.ts","./apps/texconnect/src/app/infrastructure/signalr/planning-prototype/signalr-planning-prototype.service.ts","./apps/texconnect/src/app/infrastructure/signalr/planning/realtime-planning.ts","./apps/texconnect/src/app/infrastructure/signalr/production-order-lite/realtime-production-order-lite.ts","./apps/texconnect/src/app/infrastructure/signalr/production-order/realtime-production-order.ts","./apps/texconnect/src/app/infrastructure/signalr/yarn-consumption/realtime-yarn-consumption.ts","./apps/texconnect/src/app/infrastructure/signalr/yarn-consumption/signalr-yarn-consumption.service.ts","./apps/texconnect/src/app/material.module.ts","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-overview-status/background-jobs-overview-status.component.html","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-overview-status/background-jobs-overview-status.component.ts","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-grid/background-jobs-grid.component.ts","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-grid/background-jobs-grid.component.html","./apps/texconnect/src/app/presentation/components/background-jobs/base-background-jobs.component.ts","./apps/texconnect/src/app/presentation/components/card-info/card-info.component.html","./apps/texconnect/src/app/presentation/components/card-info/card-info.component.ts","./apps/texconnect/src/app/presentation/components/color-list-preview/color-list-preview.component.html","./apps/texconnect/src/app/presentation/components/color-list-preview/color-list-preview.component.ts","./apps/texconnect/src/app/presentation/components/colored-yarn-set-preview/colored-yarn-set-preview.component.ts","./apps/texconnect/src/app/presentation/components/colored-yarn-set-preview/colored-yarn-set-preview.component.html","./apps/texconnect/src/app/presentation/components/connect-baseline/connect-baseline.component.ts","./apps/texconnect/src/app/presentation/components/connect-baseline/connect-baseline.component.html","./apps/texconnect/src/app/presentation/components/creel-preview/creel-preview.component.html","./apps/texconnect/src/app/presentation/components/creel-preview/creel-preview.component.ts","./apps/texconnect/src/app/presentation/components/creel-tables/base-creel-table/base-creel-table.component.ts","./apps/texconnect/src/app/presentation/components/creel-tables/creel-mapping-table/creel-mapping-table-base.component.ts","./apps/texconnect/src/app/presentation/components/creel-tables/creel-mapping-table/creel-mapping-table.component.html","./apps/texconnect/src/app/presentation/components/creel-tables/creel-mapping-table/creel-mapping-table.component.ts","./apps/texconnect/src/app/presentation/components/custom-settings-dialog/custom-settings-dialog-header.component.html","./apps/texconnect/src/app/presentation/components/custom-settings-dialog/custom-settings-dialog-header.component.ts","./apps/texconnect/src/app/presentation/components/disabled-form-input/disabled-form-input.component.html","./apps/texconnect/src/app/presentation/components/disabled-form-input/disabled-form-input.component.ts","./apps/texconnect/src/app/presentation/components/drawing-list/list-drawing-configuration.ts","./apps/texconnect/src/app/presentation/components/drawing-list/list-drawing-jute.ts","./apps/texconnect/src/app/presentation/components/drawing-list/list-drawing-order-line.ts","./apps/texconnect/src/app/presentation/components/finishing-and-finishing-template/carpet-view.enum.ts","./apps/texconnect/src/app/application/helper/finishing-template-deficit-length-comparator.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/grid-compatible-with-machine-quality/grid-compatible-with-machine-quality.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/grid-compatible-with-machine-quality/grid-compatible-with-machine-quality.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-overview/grid-cutting-line/grid-cutting-line.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-overview/grid-cutting-line/grid-cutting-line.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-overview/grid-labels/grid-labels.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-overview/grid-labels/grid-labels.component.html","./apps/texconnect/src/app/presentation/components/finishing-and-finishing-template/overview/overview-list-finishing-and-finishing-template.service.ts","./apps/texconnect/src/app/presentation/pages/texedit/product-configuration/add/design-pattern-preview-dialog/design-pattern-preview-dialog.component.ts","./apps/texconnect/src/app/presentation/pages/texedit/product-configuration/add/design-pattern-preview-dialog/design-pattern-preview-dialog.component.html","./apps/texconnect/src/app/presentation/components/grid/design-preview/design-preview.component.ts","./apps/texconnect/src/app/presentation/components/grid/design-preview/design-preview.component.html","./apps/texconnect/src/app/presentation/components/more-items-available/more-items-available.component.ts","./apps/texconnect/src/app/presentation/components/more-items-available/more-items-available.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/name-generation-pattern-new.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/name-generation-pattern-new.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/name-generation-pattern-preview.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/name-suggestion-hint/name-suggestion-hint.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/name-suggestion-hint/name-suggestion-hint.component.ts","./apps/texconnect/src/app/application/helper/reactive-form-utils.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/part-values-cell-renderer.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/part-values-cell-renderer.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/property-select-cell-renderer.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/property-select-cell-renderer.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/pattern-builder.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/pattern-builder.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern-new/pattern-builder/serial-not-in-middle-validator.ts","./apps/texconnect/src/app/domain/name-generator/name-generation-property.ts","./apps/texconnect/src/app/domain/name-generator/enums/name-generator-part-type.enum.ts","./apps/texconnect/src/app/domain/name-generator/name-generator-part.ts","./apps/texconnect/src/app/application/helper/name-generator/name-generator-part.service.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern/select-name-generation-pattern/select-name-generation-pattern.component.html","./apps/texconnect/src/app/presentation/components/name-generation-pattern/select-name-generation-pattern/select-name-generation-pattern.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern/name-generation-pattern.component.ts","./apps/texconnect/src/app/presentation/components/name-generation-pattern/name-generation-pattern.component.html","./apps/texconnect/src/app/presentation/components/onboarding-dialog/onboarding-planning-step.enum.ts","./apps/texconnect/src/app/presentation/components/onboarding-dialog/onboarding-type.ts","./apps/texconnect/src/app/presentation/components/order-lines-grid/grid-order-line-status/grid-order-line-status.component.html","./apps/texconnect/src/app/presentation/components/order-lines-grid/grid-order-line-status/grid-order-line-status.component.ts","./apps/texconnect/src/app/presentation/components/pattern-preview/pannable-and-zoomable-pattern-preview/pannable-and-zoomable-pattern-preview.component.ts","./apps/texconnect/src/app/presentation/components/pattern-preview/pannable-and-zoomable-pattern-preview/pannable-and-zoomable-pattern-preview.component.html","./apps/texconnect/src/app/presentation/components/pattern-preview/thumbnail-svg-loader.directive.ts","./apps/texconnect/src/app/presentation/components/pattern-preview/pattern-preview.component.html","./apps/texconnect/src/app/presentation/components/pattern-preview/pattern-preview.component.ts","./apps/texconnect/src/app/presentation/components/pattern-preview/svg-loader.directive.ts","./apps/texconnect/src/app/presentation/components/reposition-dialog/reposition-dialog.component.html","./apps/texconnect/src/app/presentation/components/reposition-dialog/reposition-dialog.component.ts","./apps/texconnect/src/app/presentation/components/reposition-tooltip/reposition-tooltip.component.ts","./apps/texconnect/src/app/presentation/components/reposition-tooltip/reposition-tooltip.component.html","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-bool-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-date-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-enum-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-number-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-object-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-string-input.enum.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/base-advanced-search.component.html","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search.component.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/base-advanced-search.component.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/dialog/advanced-search-dialog.component.ts","./apps/texconnect/src/app/presentation/components/search-filters/search-filters.component.html","./apps/texconnect/src/app/presentation/components/search-filters/search-filters.component.ts","./apps/texconnect/src/app/presentation/components/select-creel/get-row-height-for-creel-preview/get-row-height-for-creel-preview.ts","./apps/texconnect/src/app/presentation/components/select-finishing/select-finishing.component.ts","./apps/texconnect/src/app/presentation/components/select-finishing/select-finishing.component.html","./apps/texconnect/src/app/presentation/navigation/navigation-search.service.ts","./apps/texconnect/src/app/presentation/navigation/side-navigation-state.service.ts","./apps/texconnect/src/app/presentation/pages/calendar/calendar.routing.ts","./apps/texconnect/src/app/presentation/pages/calendar/pattern/overview/pattern-overview.service.ts","./apps/texconnect/src/app/domain/calendar/pattern/pattern-shift.ts","./apps/texconnect/src/app/domain/calendar/pattern/pattern.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/shift-selection.service.ts","./apps/texconnect/src/app/presentation/components/calendar/add-pattern-shift-dialog/add-pattern-shift-dialog.component.html","./apps/texconnect/src/app/presentation/components/calendar/add-pattern-shift-dialog/add-pattern-shift-dialog.component.ts","./apps/texconnect/src/app/presentation/components/calendar/add-pattern-shift-dialog/add-pattern-shift-dialog.service.ts","./apps/texconnect/src/app/infrastructure/http/calendar/pattern/http-patterns.service.ts","./apps/texconnect/src/app/presentation/pages/calendar/pattern/add/add-pattern-page.component.html","./apps/texconnect/src/app/presentation/pages/calendar/pattern/add/add-pattern-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/pattern/pattern.routing.ts","./apps/texconnect/src/app/presentation/pages/calendar/pattern/overview/pattern-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/pattern/overview/pattern-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/calendar/schedule/add/add-schedule-view-mode.enum.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/add/add-schedule-page.component.html","./apps/texconnect/src/app/presentation/pages/calendar/schedule/add/add-schedule-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/overview/schedule-overview.service.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/schedule.routing.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/overview/schedule-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/overview/schedule-overview-page.component.html","./apps/texconnect/src/app/domain/calendar/schedule/custom-settings/calendar-format.enum.ts","./apps/texconnect/src/app/domain/calendar/schedule/custom-settings/start-of-day.enum.ts","./apps/texconnect/src/app/domain/calendar/schedule/custom-settings/start-of-week.enum.ts","./apps/texconnect/src/app/presentation/pages/calendar/schedule/settings/schedule-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/calendar/schedule/settings/schedule-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/overview/shift-overview.service.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/add/add-shift-page.component.html","./apps/texconnect/src/app/presentation/pages/calendar/shift/add/add-shift-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/shift.routing.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/overview/shift-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/calendar/shift/overview/shift-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/machine-overview/add-equipment-kind/generic-equipment-kind-form/select-machine-type/select-machine-type.service.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/plastic-machine-overview-list.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/tufting-machine-overview-list.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/weaving-machine-overview-lists.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/machine-overview-list-helper.ts","./apps/texconnect/src/app/domain/machine/jacquard-machine-manufacturer-type.enum.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/machine-overview-list.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/machine-overview-view-mode.enum.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/overview-machines-views/overview-machines-list/overview-machine-efficiency/overview-machine-efficiency.component.html","./apps/texconnect/src/app/presentation/pages/machine-overview/overview-machines-views/overview-machines-list/overview-machine-efficiency/overview-machine-efficiency.component.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/overview-machines-views/overview-machines-list/overview-machine-type/overview-machine-type.component.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/overview-machines-views/overview-machines-list/overview-machine-type/overview-machine-type.component.html","./apps/texconnect/src/app/presentation/pages/machine-overview/overview-machines-views/overview-machines-list/machine-overview.service.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/report-data-set-template/report-data-set-template.service.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/report-item.ts","./apps/texconnect/src/app/presentation/pages/machine-overview/sidebar/group-editor/machine-group-utils.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-list/notification-list.component.html","./apps/texconnect/src/app/presentation/pages/notifications/notification-list/notification-list.component.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-list/notification-list-settings.component.html","./apps/texconnect/src/app/presentation/pages/notifications/notification-list/notification-list-settings.component.ts","./apps/texconnect/src/app/presentation/pages/notifications/notifications.component.html","./apps/texconnect/src/app/presentation/pages/notifications/notifications.component.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-list-filter/notification-mobile-list-filter.component.html","./apps/texconnect/src/app/presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-list-filter/notification-mobile-list-filter.component.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-header.pipe.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/notifications/notifications.routing.ts","./apps/texconnect/src/app/presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/notifications/notifications.module.ts","./apps/texconnect/src/app/presentation/pages/notifications/notifications.service.ts","./apps/texconnect/src/app/domain/notifications/web-notification-subscription.ts","./apps/texconnect/src/app/presentation/pages/notifications/push-notifications.service.ts","./apps/texconnect/src/app/presentation/pages/status-codes/404/not-found-page.component.ts","./apps/texconnect/src/app/presentation/pages/status-codes/404/not-found-page.component.html","./apps/texconnect/src/app/presentation/pages/texbi/machine-event-board/machine-event-info.ts","./apps/texconnect/src/app/presentation/pages/texbi/machine-event-board/running-machine-event-info.ts","./apps/texconnect/src/app/presentation/components/drawing-list/load-drawing-image.directive.ts","./apps/texconnect/src/app/presentation/pages/texedit/drawing-library/drawing-library-image-preview/drawing-library-image-preview.component.html","./apps/texconnect/src/app/presentation/pages/texedit/drawing-library/drawing-library-image-preview/drawing-library-image-preview.component.ts","./apps/texconnect/src/app/presentation/pages/texedit/drawing-library/drawing-library-new-listview/drawing-library-helper.ts","./apps/texconnect/src/app/presentation/pages/texfab/article/add/add-article-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/article/add/add-article-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/article/add/select-design/select-design.component.html","./apps/texconnect/src/app/presentation/pages/texfab/article/add/select-design/select-design.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/article/article.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/article/overview/article-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/article/overview/article-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/article/overview/overview-list-article.ts","./apps/texconnect/src/app/presentation/pages/texfab/customer/customer-selection.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/customer/add/add-customer.component.html","./apps/texconnect/src/app/presentation/pages/texfab/customer/add/add-customer.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/customer/customer.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/customer/overview/customer-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/customer/overview/customer-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/customer/overview/customer-overview.service.ts","./apps/texconnect/src/app/presentation/components/order-lines-grid/order-lines-grid.component.html","./apps/texconnect/src/app/presentation/components/order-lines-grid/order-lines-grid.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/orderline-details-sidebar/orderline-details-sidebar.component.html","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/orderline-details-sidebar/orderline-details-sidebar.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/orderbook-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/orderbook-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/settings/orderbook-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/settings/orderbook-custom-settings.component.ts","./apps/texconnect/src/app/application/validators/orderbook-settings-unique-fields-validator.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/orderbook.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/overview-list-article-for-order-line.ts","./apps/texconnect/src/app/presentation/pages/texfab/orderbook/overview/overview-list-order-line.ts","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/overview/path-layout-template-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/overview/path-layout-template-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/add/add-path-layout-template.component.html","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/add/add-path-layout-template.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/settings/path-layout-template-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/settings/path-layout-template-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/path-layout-template/path-layout-template.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/fixed-schedule-placeholder/fixed-schedule-placeholder.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/fixed-schedule-placeholder/fixed-schedule-placeholder.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/tooltips/planning-order-tooltip.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/tooltips/planning-order-tooltip.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/planning-order/planning-order.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/planning-order/planning-order.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/machine-group-filter/machine-group-filter.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/machine-group-filter/machine-group-filter.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/maintenance/maintenance.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-items/maintenance/maintenance.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-prototype.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-prototype.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/planning-prototype.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/sidebars/planning-prototype-sidebar.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/sidebars/planning-prototype-sidebar.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/utilities/planning-filter.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/utilities/planning-item-drag-drop.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning-prototype/utilities/planning-prototype-context.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/confirm-production-order-deletion/confirm-production-order-deletion-command.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/machine-filter-settings/machine-filter-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/machine-filter-settings/machine-filter-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-scheduler/planning-scheduler.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-scheduler/remove-planning-order/remove-planning-order-command.ts","./apps/texconnect/src/app/application/helper/planning/production-order-carpet-for-planning-order-stub-factory.ts","./apps/texconnect/src/app/application/helper/planning/production-order-tufting-for-planning-order-stub-factory.ts","./apps/texconnect/src/app/application/helper/planning/production-order-weaving-for-planning-order-stub-factory.ts","./apps/texconnect/src/app/application/helper/planning/planning-order-stub-factory.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-services/planning-context.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-services/planning-drag-drop-changes.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-services/planning-onboarding.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning-services/planning-realtime-changes.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/planning-sidebar-manager.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/planning.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/order-info/order-info.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/order-info/order-info.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/planned-order-card/planned-order-card.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/planned-order-card/planned-order-card.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/unplanned-order-card/unplanned-order-card.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/unplanned-order-card/unplanned-order-card.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/needs-attention-sidebar.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/needs-attention-sidebar/needs-attention-sidebar.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/planning-sidebar-type.enum.ts","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/planning-sidebars.component.html","./apps/texconnect/src/app/presentation/pages/texfab/planning/sidebars/planning-sidebars.component.ts","./apps/texconnect/src/app/infrastructure/http/plastic-production-order/http-plastic-production-orders-custom-settings.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/custom-settings/plastic-production-order-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/custom-settings/plastic-production-order-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/add/add-plastic-production-order-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/add/add-plastic-production-order-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/plastic-production-order.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/overview/plastic-production-order-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/plastic-production-order/overview/plastic-production-order-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/add/select-weave-product/select-weave-product.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/add/select-weave-product/select-weave-product.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/overview/overview-list-weaving-machine.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/overview/production-order-weaving-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/overview/production-order-weaving-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/add/add-production-order-weaving-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/add/add-production-order-weaving-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/settings/production-order-weaving-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/settings/production-order-weaving-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-order-lite/production-order-weaving.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/add-production-schedule-new-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/add-production-schedule-new-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/add-production-schedule-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/add-production-schedule-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/add-production-schedule.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/base-add-production-schedule-new-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/base-add-production-schedule-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/drawing-library/views/order-lines-helper.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/drawing-library/views/order-lines-view/production-schedule-item-in-path-group-with-identification.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/drawing-library/views/order-lines-view/production-schedule-order-line-with-quantity.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/initial-preparations-new/select-machine/select-machine.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/initial-preparations-new/select-machine/select-machine.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/menu-items-new/production-schedule-click-event.enum.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/path-length/path-length.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/path-length/path-length.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/path-width/path-width.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/path-width/path-width.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/production-schedule-builder-summary.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/builder-summary/production-schedule-builder-summary.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-base.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-desktop/warnings-for-production-schedule-plan/warnings-for-production-schedule-plan.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-desktop/warnings-for-production-schedule-plan/warnings-for-production-schedule-plan.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-desktop/confirm-production-schedule-desktop.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-desktop/confirm-production-schedule-desktop.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflict-with-orderlines-dialog-result.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/amount/conflicts-with-order-lines-amount.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/amount/conflicts-with-order-lines-amount.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflicts-with-order-lines.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflicts-with-order-lines.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-command.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/actions/list-overview-action.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/actions/list-overview-actions.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/actions/show-reason-for-failure-dialog-command.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-state.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/machine-quality-for-overview-list-production-schedule.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/machine-for-overview-list-production-schedule.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/overview-list-production-schedule.ts","./apps/texconnect/src/app/application/helper/filter-models-utils.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/production-schedule-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/production-schedule-overview-page.component.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-combined-states.enum.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/column-units-id-enum.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/creel-preview/production-schedule-overview-creel-preview.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/creel-preview/production-schedule-overview-creel-preview.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/machine/production-schedule-overview-machine.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/machine/production-schedule-overview-machine.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/production-schedule-overview.service.ts","./apps/texconnect/src/app/domain/production-schedule/production-schedule-global-status.enum.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/status/production-schedule-overview-status.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/overview/status/production-schedule-overview-status.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/custom-settings/production-schedule-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/custom-settings/production-schedule-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/security/can-deactivate-production-schedule-initial-preparations-guard.service.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/security/can-deactivate-production-schedule.guard.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/security/can-deactivate-production-schedule-new.guard.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/production-schedule.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/overview/overview-list-sales-order.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/overview/sales-order-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/overview/sales-order-overview-page.component.html","./apps/texconnect/src/app/application/helper/articles/overview-list-article-stub-factory.ts","./apps/texconnect/src/app/application/helper/sales-order/order-line-for-sales-order-stub-factory.ts","./apps/texconnect/src/app/domain/sales-order/sales-order-status.ts","./apps/texconnect/src/app/application/helper/sales-order/sales-order-stub-factory.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/select-article/select-article.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/select-article/select-article.component.html","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/select-customer/select-customer.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/select-customer/select-customer.component.html","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/add-sales-order-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/add/add-sales-order-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/sales-order/sales-order.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/security/can-activate-production-schedule.guard.ts","./apps/texconnect/src/app/presentation/pages/texfab/texfab.routing.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/add/select-tuft-product/select-tuft-product.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/add/select-tuft-product/select-tuft-product.component.html","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/overview/tuft-production-order-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/overview/tuft-production-order-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/overview/overview-list-tufting-machine.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/add/add-tuft-production-order-page.component.html","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/add/add-tuft-production-order-page.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/settings/tuft-production-order-settings.component.html","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/settings/tuft-production-order-settings.component.ts","./apps/texconnect/src/app/presentation/pages/texfab/tuft-production-order/tuft-production-order.routing.ts","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/custom-settings/buggy-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/custom-settings/buggy-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/add/add-buggy.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/add/add-buggy.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/buggy.routing.ts","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/overview/buggy-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/overview/buggy-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/buggy/overview/buggy-overview.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/add/add-color-set-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/add/add-color-set-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/overview/grid-color-set-preview/grid-color-set-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/overview/grid-color-set-preview/grid-color-set-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/overview/overview-list-color-set.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color/color-selection.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color/overview/color-overview.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/color-grid-preview/color-grid-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/color-grid-preview/color-grid-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/grid-colors-of-creel-position.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/grid-colors-of-creel-position.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/grid-yarn-types-of-creel-position.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/grid-yarn-types-of-creel-position.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/yarn-type-grid-preview/yarn-type-grid-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/yarn-type-grid-preview/yarn-type-grid-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set.ts","./apps/texconnect/src/app/presentation/pages/textile-data/creel/add/preview-type.ts","./apps/texconnect/src/app/presentation/pages/textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/creel/overview/overview-list-creel.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing-template/overview/finishing-and-finishing-template-label-overview-list.ts","./apps/texconnect/src/app/presentation/pages/textile-data/finishing/overview/overview-list-finishing.ts","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/add/machine-quality-general/weave-structure-width.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/add/machine-quality-selvedges/label-type.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/overview-weave-quality-type/overview-weave-quality-type.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/overview-weave-quality-type/overview-weave-quality-type.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality.ts","./apps/texconnect/src/app/presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/color-set/add/add-color-set-view-mode.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/add-material-set-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/add-material-set-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/plastic-product-view-mode.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/add-plastic-product-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/add-plastic-product-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/plastic-product-group-overview.service.ts","./apps/texconnect/src/app/infrastructure/http/plastic-product-group/http-plastic-product-groups.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/plastic-product-group-selection.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/overview/plastic-product-grid-type.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/overview/plastic-product-overview.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/plastic-product-selection.module.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/plastic-product-selection.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/plastic-product-setup/plastic-product-setup.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/add/plastic-product-setup/plastic-product-setup.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/plastic-product.module.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/plastic-product.routing.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/overview/plastic-product-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/overview/plastic-product-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/settings/plastic-product-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/plastic-product/settings/plastic-product-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/raw-material/material-overview.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/raw-material/add/add-raw-material.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/raw-material/add/add-raw-material.component.ts","./apps/texconnect/src/app/application/helper/textile-data/raw-material/add-raw-material-entry.ts","./apps/texconnect/src/app/application/helper/utilities/stock-location/add-stock-location-entry.ts","./apps/texconnect/src/app/application/helper/utilities/content-switcher/content-switcher-utils.ts","./apps/texconnect/src/app/presentation/pages/textile-data/raw-material/material-selection.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-detail/grid-yarn-consumption/grid-yarn-consumption.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-detail/grid-yarn-consumption/grid-yarn-consumption.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-detail/textile-data-detail.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-detail/textile-data-detail.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-overview/textile.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/creel-positions.helper.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/creel-position-details.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/creel-position-details.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/material-type/material-type.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/material-type/material-type.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/group/material-type-group.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-position-details/group/material-type-group.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-position/preview-for-creel-position/preview-for-creel-position.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-position/preview-for-creel-position/preview-for-creel-position.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-position/creel-position.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-position/creel-position.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-positions.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/creel-positions/creel-positions.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/select-color/select-color.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/select-color/select-color.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/select-yarn-type/select-yarn-type.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/material-set/add/select-yarn-type/select-yarn-type.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-shared.module.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data-type.enum.ts","./apps/texconnect/src/app/presentation/pages/textile-data/textile-data.routing.ts","./apps/texconnect/src/app/presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product.ts","./apps/texconnect/src/app/presentation/pages/textile-data/weave-product/overview/overview-list-weave-product.ts","./apps/texconnect/src/app/presentation/pages/textile-data/weave-structure/overview/grid-owner-label/grid-owner-label.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/weave-structure/overview/grid-owner-label/grid-owner-label.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/weave-structure/overview/overview-list-weave-structure.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/weave-structure/overview/overview-list-weave-structure.ts","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/add/add-yarn-set-page.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/add/add-yarn-set-page.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/overview/grid-yarn-set-preview/grid-yarn-set-preview.component.ts","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/overview/grid-yarn-set-preview/grid-yarn-set-preview.component.html","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set.service.ts","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set.ts","./apps/texconnect/src/app/presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type.ts","./apps/texconnect/src/app/domain/utilities/tool/tool-type.enum.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/add-tool-view-mode.enum.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/add-tool-page.component.html","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/add-tool-page.component.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/matching-criteria/matching-criteria-overview.service.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/matching-criteria/matching-criteria.component.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/matching-criteria/matching-criteria.component.html","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/matching-criteria/matching-criteria.module.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/tool-status/add-stock-location/add-stock-location.component.html","./apps/texconnect/src/app/presentation/pages/utilities/tool/add/tool-status/add-stock-location/add-stock-location.component.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/overview/tool-overview.service.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/settings/tool-custom-settings.component.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/settings/tool-custom-settings.component.html","./apps/texconnect/src/app/presentation/pages/utilities/tool/tool-selection.service.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/tool.routing.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/overview/tool-overview-page.component.ts","./apps/texconnect/src/app/presentation/pages/utilities/tool/overview/tool-overview-page.component.html","./apps/texconnect/src/app/presentation/pages/utilities/utilities.routing.ts","./apps/texconnect/src/app/shared/constants/backend-limits.constants.ts","./apps/texconnect/src/app/infrastructure/http/yarn-consumption/http-yarn-consumption.service.ts","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-select-object/advanced-search-select-object.component.html","./apps/texconnect/src/app/presentation/components/search-filters/advanced-search/advanced-search-select-object/advanced-search-select-object.component.ts","./apps/texconnect/src/app/shared/shared.module.ts","./apps/texconnect/src/environments/environment.staging.ts","./apps/texconnect/src/environments/version.ts","./apps/texconnect/src/app/application/configuration/load-runtime-application-environment-error.ts","./apps/texconnect/src/app/application/configuration/http-runtime-application-environment.service.ts","./apps/texconnect/src/app/infrastructure/signalr/custom-signalr-http-client.ts","./apps/texconnect/src/app/application/configuration/initialize-application.ts","./apps/texconnect/src/app/application/helper/routing/custom-route-reuse-strategy.ts","./apps/texconnect/src/app/domain/background-jobs/background-task.ts","./apps/texconnect/src/app/domain/background-jobs/background-job.ts","./apps/texconnect/src/app/domain/background-jobs/background-job-global-status-update.ts","./apps/texconnect/src/app/infrastructure/http/background-jobs/http-background-jobs.service.ts","./apps/texconnect/src/app/domain/production-schedule/drawing-recolor-information.ts","./apps/texconnect/src/app/domain/textile-data/drawing/upload-drawing-info.ts","./apps/texconnect/src/app/presentation/pages/texfab/production-schedule/add/drawing-library/views/drawings-grouped-view/grouped-drawing.ts","./apps/texconnect/src/app/infrastructure/http/drawing/http-drawings.service.ts","./apps/texconnect/src/app/infrastructure/http/grid-settings/http-grid-settings.service.ts","./apps/texconnect/src/app/domain/media-type.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast.ts","./apps/texconnect/src/app/infrastructure/http/http-request-manager.service.ts","./apps/texconnect/src/app/infrastructure/http/intercepted.http.ts","./apps/texconnect/src/app/application/helper/get-file-extension.ts","./apps/texconnect/src/app/infrastructure/signalr/events/signalr-event.service.ts","./apps/texconnect/src/app/infrastructure/signalr/jobs/signalr-background-job.service.ts","./apps/texconnect/src/app/infrastructure/signalr/subscription/realtime-subscriptions.ts","./apps/texconnect/src/app/infrastructure/signalr/subscription/signalr-subscription.service.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast-ref.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/animations/connectivty-toast.animation.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast.component.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast.component.html","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast.service.ts","./apps/texconnect/src/app/presentation/components/connectivity-toast/connectivity-toast.module.ts","./apps/texconnect/src/app/presentation/navigation/navigation-context-service/navigation-context.service.ts","./libs/angular-component-library/src/lib/custom-components/account-switch/account-switch.component.html","./libs/angular-component-library/src/lib/custom-components/account-switch/account-switch.component.ts","./apps/texconnect/src/app/presentation/navigation/account-switcher-dialog/account-switcher-dialog.component.html","./apps/texconnect/src/app/presentation/navigation/account-switcher-dialog/account-switcher-dialog.component.ts","./apps/texconnect/src/app/presentation/navigation/mobile-navigation/mobile-navigation-component.service.ts","./apps/texconnect/src/app/presentation/navigation/mobile-navigation/mobile-navigation-sidebar.component.html","./apps/texconnect/src/app/presentation/navigation/mobile-navigation/mobile-navigation-sidebar.component.ts","./apps/texconnect/src/app/application/pipes/badge-label.pipe.ts","./apps/texconnect/src/app/presentation/navigation/mobile-navigation/navigation-mobile.component.html","./apps/texconnect/src/app/presentation/navigation/mobile-navigation/navigation-mobile.component.ts","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-dialog.component.ts","./apps/texconnect/src/app/presentation/components/background-jobs/background-jobs-dialog.component.html","./apps/texconnect/src/app/presentation/navigation/navigation-component/navigation.component.html","./apps/texconnect/src/app/presentation/navigation/navigation-component/navigation.component.ts","./apps/texconnect/src/app/presentation/navigation/navigation-hover-area/navigation-hover-area.component.ts","./apps/texconnect/src/app/presentation/navigation/navigation-hover-area/navigation-hover-area.component.html","./apps/texconnect/src/app/presentation/components/new-update-available/new-update-available.component.html","./apps/texconnect/src/app/presentation/components/new-update-available/new-update-available.component.ts","./apps/texconnect/src/app/infrastructure/update/update.service.ts","./apps/texconnect/src/app/presentation/navigation/navigation-breadcrumbs/navigation-breadcrumbs.component.ts","./apps/texconnect/src/app/presentation/navigation/navigation-breadcrumbs/navigation-breadcrumbs.component.html","./apps/texconnect/src/app/presentation/navigation/navigation-header/navigation-header.component.html","./apps/texconnect/src/app/presentation/navigation/navigation-header/navigation-header.component.ts","./apps/texconnect/src/app/presentation/navigation/application-layout-register-service/application-layout-register.service.ts","./apps/texconnect/src/app/app.component.html","./apps/texconnect/src/app/app.component.ts","./apps/texconnect/src/app/presentation/navigation/navigation-resizer/navigation-resizer.component.ts","./apps/texconnect/src/app/presentation/navigation/navigation-resizer/navigation-resizer.component.html","./apps/texconnect/src/app/app.module.ts","./apps/texconnect/src/main.ts","./apps/texconnect/src/app/application/configuration/license-keys.ts","./libs/angular-component-library/src/lib/translation/language/language.enum.ts","./libs/angular-component-library/src/lib/translation/language/language.service.ts","./libs/angular-component-library/src/lib/translation/translation-handler.ts","./libs/angular-component-library/src/lib/translation/translation-loader.ts","./libs/angular-component-library/src/lib/dialogs/conflicts-dialog/conflicts-dialog-data.ts","./libs/angular-component-library/src/lib/dialogs/conflicts-dialog/conflicts-dialog.component.html","./libs/angular-component-library/src/lib/dialogs/conflicts-dialog/conflicts-dialog.component.ts","./libs/angular-component-library/src/lib/forms/common-forms.module.ts","./libs/angular-component-library/src/lib/custom-components/progress-button/progress-button.module.ts","./libs/angular-component-library/src/lib/custom-components/progress-spinner/progress-spinner.module.ts","./libs/angular-component-library/src/lib/custom-components/split-button/split-button.module.ts","./libs/angular-component-library/src/lib/custom-components/footer/footer.module.ts","./libs/angular-component-library/src/lib/custom-components/ellipsis-label/label.module.ts","./libs/angular-component-library/src/lib/custom-components/header/header.module.ts","./libs/angular-component-library/src/lib/custom-components/message-container/message-container.module.ts","./libs/angular-component-library/src/lib/custom-directives/can-show-error-for-context/can-show-error-for-form-control.module.ts","./libs/angular-component-library/src/lib/dialogs/dialog.module.ts","./libs/angular-component-library/src/lib/common/data/message.ts","./libs/angular-component-library/src/lib/common/object-action-type.enum.ts","./libs/angular-component-library/src/lib/dialogs/select-objects-dialog/visible-content-for-select-add-object.enum.ts","./libs/angular-component-library/src/lib/custom-components/toast/service/toast-service.ts","./libs/angular-component-library/src/lib/custom-components/toast/helper/toast-helper.service.ts","./libs/angular-component-library/src/lib/grids/col-def-builder.ts","./libs/angular-component-library/src/lib/grids/col-def-builder-factory.service.ts","./libs/angular-component-library/src/lib/dialogs/select-objects-dialog/select-objects-dialog.component.html","./libs/angular-component-library/src/lib/dialogs/select-objects-dialog/select-objects-dialog.component.ts","./libs/angular-component-library/src/lib/forms/utils/form-value-helper.ts","./libs/angular-component-library/src/lib/common/data/check-name.ts","./libs/angular-component-library/src/lib/common/validators/async-greater-than-validator.ts","./libs/angular-component-library/src/lib/common/validators/can-show-error-for-error-code-and-button-for-form-group.ts","./libs/angular-component-library/src/lib/common/validators/duplicate-value-validator.ts","./libs/angular-component-library/src/lib/common/validators/ip-address-validator.ts","./libs/angular-component-library/src/lib/common/validators/min-max-limit-validator.ts","./libs/angular-component-library/src/lib/common/validators/no-space-validator.ts","./libs/angular-component-library/src/lib/custom-components/color-picker/popup-component/color-picker-popup.component.ts","./libs/angular-component-library/src/lib/custom-components/color-picker/popup-component/color-picker-popup.component.html","./libs/angular-component-library/src/lib/custom-components/color-picker/color-picker-popup.service.ts","./libs/angular-component-library/src/lib/custom-components/color-picker/color-picker.module.ts","./libs/angular-component-library/src/lib/custom-components/dialog-button/dialog-button.module.ts","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-picker-form-input.module.ts","./libs/angular-component-library/src/lib/custom-directives/resize-element/resize-element.module.ts","./libs/angular-component-library/src/lib/common/icons.generated.ts","./libs/angular-component-library/src/lib/common/solid-icons.generated.ts","./libs/angular-component-library/src/lib/common/data/color-stub-factory.ts","./libs/angular-component-library/src/lib/common/responsiveness/responsiveness.module.ts","./libs/angular-component-library/src/lib/common/bidirectional-map.ts","./libs/angular-component-library/src/lib/common/converters/convert-dents-to-millimeters.ts","./libs/angular-component-library/src/lib/common/converters/convert-dents-to-pixels.ts","./libs/angular-component-library/src/lib/common/converters/calculate-width-in-pixels-for-thread-by-thread.ts","./libs/angular-component-library/src/lib/common/converters/convert-dents-to-width-in-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-height-in-meter-to-picks.ts","./libs/angular-component-library/src/lib/common/converters/convert-legacy-machine-orderid.ts","./libs/angular-component-library/src/lib/common/converters/convert-millimeters-to-pixels.ts","./libs/angular-component-library/src/lib/common/converters/convert-picks-to-height-in-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-picks-to-pixels.ts","./libs/angular-component-library/src/lib/common/converters/convert-pixels-to-height-in-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-pixels-to-millimeters.ts","./libs/angular-component-library/src/lib/common/converters/convert-pixels-to-picks.ts","./libs/angular-component-library/src/lib/common/utils/time-utils.ts","./libs/angular-component-library/src/lib/common/converters/convert-speed-and-cycle-time.ts","./libs/angular-component-library/src/lib/common/converters/convert-width-in-meter-to-dents.ts","./libs/angular-component-library/src/lib/common/data/conflict.ts","./libs/angular-component-library/src/lib/common/design-file-type.enum.ts","./libs/angular-component-library/src/lib/common/priority.enum.ts","./libs/angular-component-library/src/lib/common/temporary-state/temporary-state-key.enum.ts","./libs/angular-component-library/src/lib/common/temporary-state/temporary-state.service.ts","./libs/angular-component-library/src/lib/common/unit-type.enum.ts","./libs/angular-component-library/src/lib/common/utils/array-utils.ts","./libs/angular-component-library/src/lib/common/utils/blob-utils.ts","./libs/angular-component-library/src/lib/common/utils/boolean-utils.ts","./libs/angular-component-library/src/lib/common/utils/fraction-utils.ts","./libs/angular-component-library/src/lib/common/utils/intersection-utils.ts","./libs/angular-component-library/src/lib/common/utils/math-utils.ts","./libs/angular-component-library/src/lib/common/utils/number-utils.ts","./libs/angular-component-library/src/lib/common/utils/object-utils.ts","./libs/angular-component-library/src/lib/common/utils/prototype-route-utils.ts","./libs/angular-component-library/src/lib/common/utils/timezone-utils.ts","./libs/angular-component-library/src/lib/grids/custom-cell-editor-renderer/custom-cell-editor-renderer.component.ts","./libs/angular-component-library/src/lib/grids/custom-cell-editor-renderer/custom-cell-editor-renderer.component.html","./libs/angular-component-library/src/lib/grids/custom-cell-editor/error-details.ts","./libs/angular-component-library/src/lib/grids/custom-cell-editor/custom-cell-editor.component.html","./libs/angular-component-library/src/lib/grids/custom-cell-editor/custom-cell-editor.component.ts","./libs/angular-component-library/src/lib/grids/disabled-row-group-cell-renderer/disabled-row-group-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/disabled-row-group-cell-renderer/disabled-row-group-cell-renderer.component.html","./libs/angular-component-library/src/lib/grids/empty-cell-renderer/empty-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/floating-filters/data/grid-model.ts","./libs/angular-component-library/src/lib/grids/grid-checked-flag/grid-checked-flag.component.html","./libs/angular-component-library/src/lib/grids/grid-checked-flag/grid-checked-flag.component.ts","./libs/angular-component-library/src/lib/custom-pipes/date-time-pipe/date-time-pipe.module.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/datepicker.module.ts","./libs/angular-component-library/src/lib/custom-components/input-chip/input-chip.module.ts","./libs/angular-component-library/src/lib/custom-components/object-selection/object-selection.module.ts","./libs/angular-component-library/src/lib/custom-components/tag/tag.module.ts","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker-form-input.module.ts","./libs/angular-component-library/src/lib/custom-directives/auto-focus/auto-focus.module.ts","./libs/angular-component-library/src/lib/custom-directives/input-l10n-decimal/input-l10n-decimal.module.ts","./libs/angular-component-library/src/lib/grids/grid-utils.module.ts","./libs/angular-component-library/src/lib/grids/input-chip-cell-renderer/input-chip-cell-renderer.component.html","./libs/angular-component-library/src/lib/grids/input-chip-cell-renderer/input-chip-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/input/checkbox-cell-editor/checkbox-cell-editor.component.ts","./libs/angular-component-library/src/lib/grids/input/checkbox-cell-editor/checkbox-cell-editor.component.html","./libs/angular-component-library/src/lib/grids/input/grid-input.component.html","./libs/angular-component-library/src/lib/grids/input/grid-input.component.ts","./libs/angular-component-library/src/lib/grids/input/progress-cell-renderer/progress-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/input/progress-cell-renderer/progress-cell-renderer.component.html","./libs/angular-component-library/src/lib/grids/link-icon-renderer/link-icon-renderer.component.html","./libs/angular-component-library/src/lib/grids/link-icon-renderer/link-icon-renderer.component.ts","./libs/angular-component-library/src/lib/grids/number-cell-editor/number-cell-editor.component.ts","./libs/angular-component-library/src/lib/grids/number-cell-editor/number-cell-editor.component.html","./libs/angular-component-library/src/lib/grids/number-cell-renderer/number-cell-renderer.component.html","./libs/angular-component-library/src/lib/grids/number-cell-renderer/number-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/overlay/loading-cell-overlay/loading-cell-overlay.component.html","./libs/angular-component-library/src/lib/grids/overlay/loading-cell-overlay/loading-cell-overlay.component.ts","./libs/angular-component-library/src/lib/grids/string-cell-editor/string-cell-editor.component.ts","./libs/angular-component-library/src/lib/grids/string-cell-editor/string-cell-editor.component.html","./libs/angular-component-library/src/lib/grids/string-count/string-count-cell-renderer.component.html","./libs/angular-component-library/src/lib/grids/string-count/string-count-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/tag/grid-tag.component.ts","./libs/angular-component-library/src/lib/grids/tag/grid-tag.component.html","./libs/angular-component-library/src/lib/grids/tooltip-cell-renderer/tooltip-cell-renderer.component.ts","./libs/angular-component-library/src/lib/grids/tooltip-cell-renderer/tooltip-cell-renderer.component.html","./libs/angular-component-library/src/lib/custom-components/slide-toggle/slide-toggle.module.ts","./libs/angular-component-library/src/lib/custom-components/zone-input/zone-input.module.ts","./libs/angular-component-library/src/lib/custom-components/filter/filter.module.ts","./libs/angular-component-library/src/lib/custom-components/multi-line-drag/multi-line-drag.module.ts","./libs/angular-component-library/src/lib/custom-components/filter-chips/filter-chips.module.ts","./libs/angular-component-library/src/lib/custom-components/header/save-type-for-production-schedule.enum.ts","./libs/angular-component-library/src/lib/custom-components/tabs-menu-card/tabs-menu-card.module.ts","./libs/angular-component-library/src/lib/custom-components/mobile-page-header/mobile-page-header.module.ts","./libs/angular-component-library/src/lib/custom-components/mobile-dropdown/mobile-dropdown.module.ts","./libs/angular-component-library/src/lib/custom-components/mobile-position-indicator/mobile-position-indicator.module.ts","./libs/angular-component-library/src/lib/custom-components/mobile-bottom-selector/mobile-bottom-selector.module.ts","./libs/angular-component-library/src/lib/custom-components/status-bar/status-bar.ts","./libs/angular-component-library/src/lib/custom-components/status-bar/status-bar.module.ts","./libs/angular-component-library/src/lib/custom-components/dropdown/select-colors/select-colors.module.ts","./libs/angular-component-library/src/lib/custom-components/pattern/pattern.module.ts","./libs/angular-component-library/src/lib/custom-components/dropdown/select-patterns/select-patterns.module.ts","./libs/angular-component-library/src/lib/custom-components/breadcrumb/breadcrumb.module.ts","./libs/angular-component-library/src/lib/custom-components/toast/toast.component.html","./libs/angular-component-library/src/lib/custom-components/toast/toast.component.ts","./libs/angular-component-library/src/lib/custom-components/toast/toast.animation.ts","./libs/angular-component-library/src/lib/custom-components/toast/toast.module.ts","./libs/angular-component-library/src/lib/custom-components/paginator/paginator.module.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/date-picker/date-picker.component.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/date-picker/date-picker.component.html","./libs/angular-component-library/src/lib/custom-components/datepicker-form-input/datepicker-form-input.module.ts","./libs/angular-component-library/src/lib/custom-components/distance-specifier/distance-specifier.module.ts","./libs/angular-component-library/src/lib/custom-pipes/capital-first-letter-pipe/capital-first-letter-pipe.module.ts","./libs/angular-component-library/src/lib/custom-pipes/hex-value-pipe/hex-value-pipe.module.ts","./libs/angular-component-library/src/lib/custom-pipes/html-with-variables-to-text/html-with-variables-to-text-pipe.module.ts","./libs/angular-component-library/src/lib/custom-pipes/minutes-from-now-pipe/minutes-from-now-pipe.module.ts","./libs/angular-component-library/src/lib/custom-pipes/reverse-array-pipe/reverse-array.pipe.module.ts","./libs/angular-component-library/src/lib/actions/radio-toggle-button/radio-toggle-button.module.ts","./libs/angular-component-library/src/lib/actions/swipe/swipe.module.ts","./libs/angular-component-library/src/lib/actions/show-overlay-for-virtual-scroller/show-overlay-for-virtual-scroller.module.ts","./libs/angular-component-library/src/lib/actions/checkbox-toggle-button/checkbox-toggle-button.module.ts","./libs/angular-component-library/src/lib/bms-config/bit-pattern-editor/bit-pattern-editor.module.ts","./libs/angular-component-library/src/lib/custom-components/progress-bar/progress-bar.module.ts","./libs/angular-component-library/src/lib/custom-directives/delayed-class/delayed-class.module.ts","./libs/angular-component-library/src/lib/custom-components/reload-required/reload-required.component.ts","./libs/angular-component-library/src/lib/custom-components/reload-required/reload-required.component.html","./libs/angular-component-library/src/lib/custom-components/reload-required/reload-required.module.ts","./libs/angular-component-library/src/lib/error/authentication-error.ts","./libs/angular-component-library/src/lib/error/backend-error.ts","./libs/angular-component-library/src/lib/error/unhandled-backend-error.ts","./libs/angular-component-library/src/lib/custom-services/app-insights-logging/app-insights-logging.service.ts","./libs/angular-component-library/src/lib/error/global-error-handler.ts","./libs/angular-component-library/src/lib/error/unavailable-archive-error.ts","./libs/angular-component-library/src/lib/signalr/signalr-hub-connection-builder.ts","./libs/angular-component-library/src/lib/signalr/signalr-hub-connection-factory.service.ts","./libs/angular-component-library/src/lib/signalr/signalr-logger.ts","./libs/angular-component-library/src/lib/planning-board/machine-group-color-palette.ts","./libs/angular-component-library/src/lib/planning-board/planning-display.module.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-drop.module.ts","./libs/angular-component-library/src/lib/custom-components/selection-list/selection-list.module.ts","./libs/angular-component-library/src/lib/custom-components/selection-list-container/selection-list-container.module.ts","./libs/angular-component-library/src/lib/custom-components/text-area-with-chips/text-area-with-chips.module.ts","./libs/angular-component-library/src/lib/custom-services/lazy-loading-scroll/lazy-loading-scroll.service.ts","./libs/angular-component-library/src/lib/grids/grid-model-builder/filter-model-type.enum.ts","./libs/angular-component-library/src/lib/grids/grid-model-builder/filter-type.enum.ts","./libs/angular-component-library/src/lib/grids/grid-model-builder/filter-model-builder.ts","./libs/angular-component-library/src/lib/grids/grid-model-builder/grid-model-builder.ts","./libs/angular-component-library/src/lib/grids/grid-model-builder-factory.service.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/dnd-draggable-drop-list/dnd-draggable-drop-list.module.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-draggable-drop-list.module.ts","./libs/angular-component-library/src/lib/custom-directives/element-pressed/element-pressed.module.ts","./libs/angular-component-library/src/lib/custom-components/application-layout/application-layout.module.ts","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-tree-view.module.ts","./libs/angular-component-library/src/lib/custom-components/account-switch/account-switch.module.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-object-selection-dialog-new/crud-object-selection-dialog-new.component.html","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-object-selection-dialog-new/crud-object-selection-dialog-new.component.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-object-selection-dialog/crud-object-selection-dialog.component.html","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-object-selection-dialog/crud-object-selection-dialog.component.ts","./libs/angular-component-library/src/lib/custom-components/grid-selection-options/grid-selection-options.module.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-overview-data.module.ts","./libs/angular-component-library/src/lib/custom-components/content-switcher/content-switcher-dialog.component.html","./libs/angular-component-library/src/lib/custom-components/content-switcher/content-switcher-dialog.component.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-overview-data-builder.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-overview-data-builder-factory-service/crud-overview-data-builder-factory.service.ts","./libs/angular-component-library/src/lib/custom-components/editor-header/editor-header.module.ts","./libs/angular-component-library/src/lib/custom-components/string-input/string-input.module.ts","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/schedule-item/schedule-item.component.ts","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/schedule-item/schedule-item.component.html","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-header/timeline-header.component.html","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-header/timeline-header.component.ts","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-row/timeline-row.service.ts","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-row-button/timeline-row-button.component.ts","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-row-button/timeline-row-button.component.html","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-row/timeline-row.component.html","./libs/angular-component-library/src/lib/custom-components/calendar-timeline/timeline-row/timeline-row.component.ts","./libs/angular-component-library/src/lib/actions/show-overlay-for-virtual-scroller/show-overlay-for-virtual-scroller.directive.ts","./libs/angular-component-library/src/lib/base-component.ts","./libs/angular-component-library/src/lib/bms-config/bit-pattern-editor/bit-pattern-editor-form-field/bit-pattern-editor-form-field.component.ts","./libs/angular-component-library/src/lib/bms-config/bit-pattern-editor/bit-pattern-editor-form-field/bit-pattern-editor-form-field.component.html","./libs/angular-component-library/src/lib/bms-config/bit-pattern-editor/bit-pattern-editor.component.html","./libs/angular-component-library/src/lib/bms-config/bit-pattern-editor/bit-pattern-editor.component.ts","./libs/angular-component-library/src/lib/common/animations/skeleton-view.animation.ts","./libs/angular-component-library/src/lib/common/colors-variables.generated.ts","./libs/angular-component-library/src/lib/common/data/shade.ts","./libs/angular-component-library/src/lib/common/converters/convert-color-representation.ts","./libs/angular-component-library/src/lib/common/converters/convert-commercial-unit.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-square-millimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-square-centimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-square-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-density-unit.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-dents-per-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-dents-per-centimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-textile-unit.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-centimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-decimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-commercial-unit-millimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-dents-per-millimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-picks-per-centimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-picks-per-decimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-picks-per-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-picks-per-millimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-wefts-per-centimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-wefts-per-decimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-wefts-per-meter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-density-unit-wefts-per-millimeter.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-decitex.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-denier.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-english-cotton-count.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-libra-pounds.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-linencount.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-number-metric.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-textile-unit-tex.ts","./libs/angular-component-library/src/lib/common/converters/convert-unit.ts","./libs/angular-component-library/src/lib/common/converters/convert-file-size-unit.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-file-size-unit-kilobyte.ts","./libs/angular-component-library/src/lib/common/converters/convert-to-file-size-unit-byte.ts","./libs/angular-component-library/src/lib/common/data/color.ts","./libs/angular-component-library/src/lib/common/data/message-type.enum.ts","./libs/angular-component-library/src/lib/common/datetime-format.enum.ts","./libs/angular-component-library/src/lib/common/environment-variables.ts","./libs/angular-component-library/src/lib/common/error/commercial-unit-conversion-error.ts","./libs/angular-component-library/src/lib/common/error/density-unit-conversion-error.ts","./libs/angular-component-library/src/lib/common/error/textile-unit-conversion-error.ts","./libs/angular-component-library/src/lib/common/error/base-error.ts","./libs/angular-component-library/src/lib/common/error/unit-conversion-error.ts","./libs/angular-component-library/src/lib/common/mime-type.enum.ts","./libs/angular-component-library/src/lib/common/moment.ts","./libs/angular-component-library/src/lib/common/responsiveness/breakpoint-responsiveness-view-mode.service.ts","./libs/angular-component-library/src/lib/common/responsiveness/device.enum.ts","./libs/angular-component-library/src/lib/common/responsiveness/responsive-class.directive.ts","./libs/angular-component-library/src/lib/common/responsiveness/responsiveness-view.mode.ts","./libs/angular-component-library/src/lib/common/unit.enum.ts","./libs/angular-component-library/src/lib/common/utils/assertion-utils.ts","./libs/angular-component-library/src/lib/common/utils/dom-utils.ts","./libs/angular-component-library/src/lib/common/utils/enum-utils.ts","./libs/angular-component-library/src/lib/common/utils/locale-utils.ts","./libs/angular-component-library/src/lib/common/utils/string-utils.ts","./libs/angular-component-library/src/lib/common/utils/uuid-utils.ts","./libs/angular-component-library/src/lib/common/validators/can-show-error-for-error-code-and-form-control-for-form-group.ts","./libs/angular-component-library/src/lib/custom-components/application-layout/application-layout.service.ts","./libs/angular-component-library/src/lib/custom-components/breadcrumb/breadcrumb.component.html","./libs/angular-component-library/src/lib/custom-components/breadcrumb/breadcrumb.component.ts","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-preset-picker-menu/color-preset-picker-menu.component.html","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-preset-picker-menu/color-preset-picker-menu.component.ts","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-picker-form-input.component.html","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-picker-form-input.component.ts","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-picker-mode.enum.ts","./libs/angular-component-library/src/lib/custom-components/color-picker-form-input/color-preset-picker-menu/preset-colors.enum.ts","./libs/angular-component-library/src/lib/custom-components/color-picker/add-color/slider-track-background.directive.ts","./libs/angular-component-library/src/lib/custom-components/color-picker/add-color/add-color.component.html","./libs/angular-component-library/src/lib/custom-components/color-picker/add-color/add-color.component.ts","./libs/angular-component-library/src/lib/common/validators/not-empty-validator.ts","./libs/angular-component-library/src/lib/custom-components/content-switcher-prototype/content-switcher-dialog-prototype.component.ts","./libs/angular-component-library/src/lib/custom-components/content-switcher-prototype/content-switcher-dialog-prototype.component.html","./libs/angular-component-library/src/lib/custom-components/content-switcher-prototype/content-switcher-dialog-prototype.service.ts","./libs/angular-component-library/src/lib/custom-components/content-switcher/content-switcher-dialog.service.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-grid-context-service/crud-grid.context.service.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-grid-with-actions/crud-grid-with-actions.component.html","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-grid-with-actions/crud-grid-with-actions.component.ts","./libs/angular-component-library/src/lib/custom-components/grid-selection-options/grid-selection-extra-actions-dialog/grid-selection-extra-actions-dialog.component.html","./libs/angular-component-library/src/lib/custom-components/grid-selection-options/grid-selection-extra-actions-dialog/grid-selection-extra-actions-dialog.component.ts","./libs/angular-component-library/src/lib/custom-components/grid-selection-options/grid-selection-options.component.html","./libs/angular-component-library/src/lib/custom-components/grid-selection-options/grid-selection-options.component.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-overview-data-page/crud-overview-data-page.component.ts","./libs/angular-component-library/src/lib/custom-components/crud-overview-data/crud-overview-data-page/crud-overview-data-page.component.html","./libs/angular-component-library/src/lib/custom-components/datepicker-form-input/datepicker-form-input.component.html","./libs/angular-component-library/src/lib/custom-components/datepicker-form-input/datepicker-form-input.component.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/date-range-picker/date-range-picker.component.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/date-range-picker/date-range-picker.component.html","./libs/angular-component-library/src/lib/custom-components/datepicker/datepicker-header/datepicker-header.component.ts","./libs/angular-component-library/src/lib/custom-components/datepicker/datepicker-header/datepicker-header.component.html","./libs/angular-component-library/src/lib/custom-components/dialog-button/dialog-button.component.ts","./libs/angular-component-library/src/lib/custom-components/dialog-button/dialog-button.component.html","./libs/angular-component-library/src/lib/custom-components/dialog-header/dialog-header.component.ts","./libs/angular-component-library/src/lib/custom-components/dialog-header/dialog-header.component.html","./libs/angular-component-library/src/lib/custom-components/distance-specifier/distance-specifier-orientation.enum.ts","./libs/angular-component-library/src/lib/custom-components/distance-specifier/distance-specifier.component.ts","./libs/angular-component-library/src/lib/custom-components/distance-specifier/distance-specifier.component.html","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-drag-drop-helper-service/cdk-drag-drop-helper.service.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-drag-preview-content.directive.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-draggable-drop-list/cdk-draggable-drop-list.component.html","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-draggable-drop-list/cdk-draggable-drop-list.component.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/cdk-draggable-drop-list/cdk-drop-list-content.directive.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/dnd-draggable-drop-list/dnd-drag-drop-helper-service/dnd-drag-drop-helper.service.ts","./libs/angular-component-library/src/lib/custom-components/draggable-drop-list/shared-logic/draggable-drop-list-comparator.enum.ts","./libs/angular-component-library/src/lib/custom-components/dropdown/select-colors/select-colors.component.html","./libs/angular-component-library/src/lib/custom-components/dropdown/select-colors/select-colors.component.ts","./libs/angular-component-library/src/lib/custom-components/dropdown/select-patterns/select-patterns.component.html","./libs/angular-component-library/src/lib/custom-components/dropdown/select-patterns/select-patterns.component.ts","./libs/angular-component-library/src/lib/custom-components/editor-header/editor-header.component.html","./libs/angular-component-library/src/lib/custom-components/editor-header/editor-header.component.ts","./libs/angular-component-library/src/lib/custom-components/ellipsis-label/ellipsis-label.component.html","./libs/angular-component-library/src/lib/custom-components/ellipsis-label/ellipsis-label.component.ts","./libs/angular-component-library/src/lib/custom-components/multi-line-drag/multi-line-drag.component.html","./libs/angular-component-library/src/lib/custom-components/multi-line-drag/multi-line-drag.component.ts","./libs/angular-component-library/src/lib/custom-components/filter-chips/filter-chips.component.html","./libs/angular-component-library/src/lib/custom-components/filter-chips/filter-chips.component.ts","./libs/angular-component-library/src/lib/custom-components/filter/filter.component.html","./libs/angular-component-library/src/lib/custom-components/filter/filter.component.ts","./libs/angular-component-library/src/lib/custom-components/filter/mobile-filter/mobile-filter.component.html","./libs/angular-component-library/src/lib/custom-components/filter/mobile-filter/mobile-filter.component.ts","./libs/angular-component-library/src/lib/custom-components/footer/footer.component.html","./libs/angular-component-library/src/lib/custom-components/footer/footer.component.ts","./libs/angular-component-library/src/lib/custom-components/footer/footer.constants.ts","./libs/angular-component-library/src/lib/custom-components/header/header.component.html","./libs/angular-component-library/src/lib/custom-components/header/header.component.ts","./libs/angular-component-library/src/lib/custom-components/header/save-type.enum.ts","./libs/angular-component-library/src/lib/custom-components/helper/control-value-accessor-helper.ts","./libs/angular-component-library/src/lib/custom-components/helper/form-field-control-helper.ts","./libs/angular-component-library/src/lib/custom-components/input-chip/input-chip.component.html","./libs/angular-component-library/src/lib/custom-components/input-chip/input-chip.component.ts","./libs/angular-component-library/src/lib/custom-directives/element-pressed/element-pressed.directive.ts","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-item/menu-item.component.html","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-item/menu-item.component.ts","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-tree-view-context.service.ts","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-tree-view.component.html","./libs/angular-component-library/src/lib/custom-components/menu-tree-view/menu-tree-view.component.ts","./libs/angular-component-library/src/lib/custom-components/message-container/message-container.component.html","./libs/angular-component-library/src/lib/custom-components/message-container/message-container.component.ts","./libs/angular-component-library/src/lib/custom-components/mobile-bottom-selector/mobile-bottom-selector.component.ts","./libs/angular-component-library/src/lib/custom-components/mobile-bottom-selector/mobile-bottom-selector.component.html","./libs/angular-component-library/src/lib/custom-components/mobile-dropdown/mobile-selector/mobile-selector.component.html","./libs/angular-component-library/src/lib/custom-components/mobile-dropdown/mobile-selector/mobile-selector.component.ts","./libs/angular-component-library/src/lib/custom-components/mobile-dropdown/mobile-dropdown.component.ts","./libs/angular-component-library/src/lib/custom-components/mobile-dropdown/mobile-dropdown.component.html","./libs/angular-component-library/src/lib/custom-components/mobile-page-header/mobile-page-header.component.html","./libs/angular-component-library/src/lib/custom-components/mobile-page-header/mobile-page-header.component.ts","./libs/angular-component-library/src/lib/custom-components/navigation-helper-prototype/navigation-helper-prototype.service.ts","./libs/angular-component-library/src/lib/custom-components/object-selection/object-selection.component.html","./libs/angular-component-library/src/lib/custom-components/object-selection/object-selection.component.ts","./libs/angular-component-library/src/lib/custom-components/pattern/pattern.component.ts","./libs/angular-component-library/src/lib/custom-components/pattern/pattern.component.html","./libs/angular-component-library/src/lib/custom-components/pattern/pattern.enum.ts","./libs/angular-component-library/src/lib/custom-components/progress-button/button-size.enum.ts","./libs/angular-component-library/src/lib/custom-components/progress-button/progress-button.component.html","./libs/angular-component-library/src/lib/custom-components/progress-button/progress-button.component.ts","./libs/angular-component-library/src/lib/custom-components/progress-spinner/progress-spinner.component.ts","./libs/angular-component-library/src/lib/custom-components/progress-spinner/progress-spinner.component.html","./libs/angular-component-library/src/lib/custom-components/selection-list-container/selection-list-container.component.ts","./libs/angular-component-library/src/lib/custom-components/selection-list-container/selection-list-container.component.html","./libs/angular-component-library/src/lib/custom-components/selection-list/selection-list.component.html","./libs/angular-component-library/src/lib/custom-components/selection-list/selection-list.component.ts","./libs/angular-component-library/src/lib/custom-components/settings-icon-button/settings-icon-button.component.html","./libs/angular-component-library/src/lib/custom-components/settings-icon-button/settings-icon-button.component.ts","./libs/angular-component-library/src/lib/custom-components/slide-toggle/slide-toggle.component.ts","./libs/angular-component-library/src/lib/custom-components/slide-toggle/slide-toggle.component.html","./libs/angular-component-library/src/lib/custom-components/split-button/split-button.component.html","./libs/angular-component-library/src/lib/custom-components/split-button/split-button.component.ts","./libs/angular-component-library/src/lib/custom-components/status-bar/status-bar-size.enum.ts","./libs/angular-component-library/src/lib/custom-components/status-bar/status-bar.component.html","./libs/angular-component-library/src/lib/custom-components/status-bar/status-bar.component.ts","./libs/angular-component-library/src/lib/custom-components/string-input/string-input.component.html","./libs/angular-component-library/src/lib/custom-components/string-input/string-input.component.ts","./libs/angular-component-library/src/lib/custom-components/tabs-and-actions-header/tabs-and-actions-header.component.ts","./libs/angular-component-library/src/lib/custom-components/tabs-and-actions-header/tabs-and-actions-header.component.html","./libs/angular-component-library/src/lib/custom-components/header/header-button.ts","./libs/angular-component-library/src/lib/custom-components/tabs-menu-card/tabs-menu-card.component.html","./libs/angular-component-library/src/lib/custom-components/tabs-menu-card/tabs-menu-card.component.ts","./libs/angular-component-library/src/lib/custom-components/tabs-menu/tabs-menu.component.html","./libs/angular-component-library/src/lib/custom-components/tabs-menu/tabs-menu.component.ts","./libs/angular-component-library/src/lib/custom-components/tabs-menu/tabs-menu.module.ts","./libs/angular-component-library/src/lib/custom-components/tag/tag-color.enum.ts","./libs/angular-component-library/src/lib/custom-components/tag/tag-size.enum.ts","./libs/angular-component-library/src/lib/custom-components/tag/tag.component.ts","./libs/angular-component-library/src/lib/custom-components/tag/tag.component.html","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker-form-input.component.html","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker-form-input.component.ts","./libs/angular-component-library/src/lib/common/validators/time-validator.ts","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker.constants.ts","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker-menu/time-picker-menu.component.html","./libs/angular-component-library/src/lib/custom-components/time-picker-form-input/time-picker-menu/time-picker-menu.component.ts","./libs/angular-component-library/src/lib/custom-components/zone-input/zone-input-type.enum.ts","./libs/angular-component-library/src/lib/custom-components/zone-input/helper/zone-input-helper.service.ts","./libs/angular-component-library/src/lib/custom-components/zone-input/zone-input.component.html","./libs/angular-component-library/src/lib/custom-components/zone-input/zone-input.component.ts","./libs/angular-component-library/src/lib/custom-directives/auto-focus/auto-focus.directive.ts","./libs/angular-component-library/src/lib/custom-directives/can-show-error-for-context/can-show-error-for-form-control.directive.ts","./libs/angular-component-library/src/lib/custom-directives/input-l10n-decimal/input-l10n-decimal.directive.ts","./libs/angular-component-library/src/lib/custom-directives/resize-element/resize-element.directive.ts","./libs/angular-component-library/src/lib/custom-pipes/capital-first-letter-pipe/capital-first-letter.pipe.ts","./libs/angular-component-library/src/lib/custom-pipes/date-time-pipe/date-time.pipe.ts","./libs/angular-component-library/src/lib/custom-pipes/hex-value-pipe/hex-value.pipe.ts","./libs/angular-component-library/src/lib/custom-pipes/html-with-variables-to-text/html-with-variables-to-text.pipe.ts","./libs/angular-component-library/src/lib/custom-pipes/minutes-from-now-pipe/minutes-from-now.pipe.ts","./libs/angular-component-library/src/lib/custom-services/local-storage.service/local-storage-config.ts","./libs/angular-component-library/src/lib/custom-services/local-storage.service/local-storage.module.ts","./libs/angular-component-library/src/lib/custom-services/local-storage.service/local-storage.service.ts","./libs/angular-component-library/src/lib/dialogs/alert-dialog/alert-dialog-data.ts","./libs/angular-component-library/src/lib/dialogs/alert-dialog/alert-dialog-utils.ts","./libs/angular-component-library/src/lib/dialogs/alert-dialog/alert-dialog.component.html","./libs/angular-component-library/src/lib/dialogs/alert-dialog/alert-dialog.component.ts","./libs/angular-component-library/src/lib/dialogs/dialog-builder/dialog-builder-factory.service.ts","./libs/angular-component-library/src/lib/dialogs/dialog-builder/dialog-builder.ts","./libs/angular-component-library/src/lib/dialogs/dialog-opener/dialog-opener.service.ts","./libs/angular-component-library/src/lib/dialogs/dialog-reposition/arrow-position.enum.ts","./libs/angular-component-library/src/lib/dialogs/dialog-reposition/reposition-watch-dialog.service.ts","./libs/angular-component-library/src/lib/dialogs/dialog-reposition/reposition-watch-dialog-factory.service.ts","./libs/angular-component-library/src/lib/dialogs/dialog-type.ts","./libs/angular-component-library/src/lib/dialogs/hover-dialog/hover-dialog-builder.service.ts","./libs/angular-component-library/src/lib/error/base-error.ts","./libs/angular-component-library/src/lib/error/not-implemented-error.ts","./libs/angular-component-library/src/lib/forms/form-validation-helper.ts","./libs/angular-component-library/src/lib/forms/invalid-form-message/invalid-form-message.component.html","./libs/angular-component-library/src/lib/forms/invalid-form-message/invalid-form-message.component.ts","./libs/angular-component-library/src/lib/grids/ag-grid-row-selection.enum.ts","./libs/angular-component-library/src/lib/grids/cell-button/cell-button.component.html","./libs/angular-component-library/src/lib/grids/cell-button/cell-button.component.ts","./libs/angular-component-library/src/lib/grids/grid-options-builder-factory.service.ts","./libs/angular-component-library/src/lib/grids/grid-theme-api-parameters.ts","./libs/angular-component-library/src/lib/grids/grid-options-builder.ts","./libs/angular-component-library/src/lib/grids/grid-tooltip/grid-tooltip.component.ts","./libs/angular-component-library/src/lib/grids/grid-tooltip/grid-tooltip.component.html","./libs/angular-component-library/src/lib/grids/header-class.ts","./libs/angular-component-library/src/lib/grids/helper/ag-grid-utils.ts","./libs/angular-component-library/src/lib/grids/overlay/base-overlay.component.ts","./libs/angular-component-library/src/lib/grids/overlay/base-overlay.component.html","./libs/angular-component-library/src/lib/grids/overlay/loading-overlay/loading-overlay.component.ts","./libs/angular-component-library/src/lib/grids/overlay/no-data-overlay/no-data-overlay.component.ts","./libs/angular-component-library/src/lib/grids/overlay/overlay-actions.service.ts","./libs/angular-component-library/src/lib/grids/overlay/overlay/overlay.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-display.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-display.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-grid/planning-grid.token.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/regimes-indicator/regimes-indicator.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/regimes-indicator/regimes-indicator.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/date-header-row/date-header-row.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/date-header-row/date-header-row.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/helpers/planning-display-helper.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/hour-header-row/hour-header-row.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/hour-header-row/hour-header-row.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/current-time-indicator/current-time-indicator.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/current-time-indicator/current-time-indicator.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-item-display/planning-item-display.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-item-display/planning-item-display.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-grid/planning-grid.component.html","./libs/angular-component-library/src/lib/planning-board/planning-display/planning-grid/planning-grid.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-display/timeline-position/timeline-position.directive.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-drop.directive.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-drop-data.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-indicator/planning-drag-indicator.component.html","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-indicator/planning-drag-indicator.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-hour-indicator/planning-hour-indicator.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-hour-indicator/planning-hour-indicator.component.html","./libs/angular-component-library/src/lib/planning-board/planning-drag-drop/planning-drag-drop.service.ts","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-group/planning-group.component.html","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-group/planning-group.component.ts","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-item-base/planning-group-data.ts","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-item-base/planning-item-data.ts","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-item/planning-item.directive.ts","./libs/angular-component-library/src/lib/planning-board/planning-items/planning-item-base/planning-row-data.ts","./libs/angular-component-library/src/lib/planning-board/planning-row/planning-row.component.html","./libs/angular-component-library/src/lib/planning-board/planning-row/planning-row.component.ts","./libs/angular-component-library/src/lib/planning-board/shift-schedule/shift-instance.ts","./libs/angular-component-library/src/lib/planning-board/shift-schedule/shift-schedule.component.ts","./libs/angular-component-library/src/lib/planning-board/shift-schedule/shift.component.ts","./libs/angular-component-library/src/lib/planning-board/time-view-mode.enum.ts","./libs/angular-component-library/src/lib/translation/pipes/bms-translate-async.pipe.ts","./libs/angular-component-library/src/lib/translation/pipes/bms-translate.pipe.ts","./libs/angular-component-library/src/lib/translation/translate.service.ts","./libs/angular-component-library/src/lib/translation/translation.module.ts","./libs/angular-component-library/src/lib/window/window-ref.ts","./libs/angular-component-library/src/lib/window/browser-window-ref.ts","./libs/angular-component-library/src/lib/window/window.service.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {map} from 'lodash-es';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class DynamicPathGuard {\n private router: Router;\n\n public constructor(router: Router) {\n this.router = router;\n }\n\n public canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {\n if (RouteUtils.isKnownPath(map(route.url, 'path'))) {\n setTimeout(() => {\n this.router.navigateByUrl(state.url);\n });\n } else {\n this.router.navigateByUrl(RouteUtils.paths.notFound.absolutePath);\n }\n\n return false;\n }\n}\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MobileNavigationService} from '@application/services/navigation/mobile-navigation.service';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {MsalGuard} from '@azure/msal-angular';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\nimport {firstValueFrom} from 'rxjs';\n\nexport const canActivateDefaultPathGuard = async (activatedRouteSnapshot: ActivatedRouteSnapshot, routerStateSnapshot: RouterStateSnapshot): Promise => {\n const router = inject(Router);\n const authentication = inject(AUTHENTICATION);\n const navigationService = inject(NavigationService);\n const responsivenessViewMode = inject(RESPONSIVENESS_VIEW_MODE);\n const mobileNavigationService = inject(MobileNavigationService);\n const msalGuard = inject(MsalGuard);\n\n let subscription = authentication.getCurrentSubscription();\n\n let result = subscription && (await firstValueFrom(msalGuard.canActivate(activatedRouteSnapshot, routerStateSnapshot)));\n if (!result) {\n router.navigateByUrl(RouteUtils.paths.login.absolutePath);\n } else {\n const path = responsivenessViewMode.isPhone ? mobileNavigationService.getDefaultMobileRoute(subscription) : navigationService.getDefaultRoute(subscription);\n\n if (path) {\n router.navigateByUrl(path);\n } else {\n router.navigateByUrl(RouteUtils.paths.unauthorized.absolutePath);\n }\n }\n return false;\n};\n","import {inject} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MobileNavigationService} from '@application/services/navigation/mobile-navigation.service';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {AssertionUtils, RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\n\nexport const canActivateUnauthorizedPathGuard = (): boolean => {\n const router = inject(Router);\n const authentication = inject(AUTHENTICATION);\n const navigationService = inject(NavigationService);\n const responsivenessViewMode = inject(RESPONSIVENESS_VIEW_MODE);\n const mobileNavigationService = inject(MobileNavigationService);\n\n const subscription = authentication.getCurrentSubscription();\n\n if (AssertionUtils.isNullOrUndefined(subscription)) {\n router.navigateByUrl(RouteUtils.paths.login.absolutePath);\n return false;\n }\n\n const path = responsivenessViewMode.isPhone ? mobileNavigationService.getDefaultMobileRoute(subscription) : navigationService.getDefaultRoute(subscription);\n\n if (path) {\n router.navigateByUrl(path);\n return false;\n }\n\n return true;\n};\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MsalGuard} from '@azure/msal-angular';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {firstValueFrom} from 'rxjs';\n\nexport const canActivateViaAuthGuard = async (activatedRouteSnapshot: ActivatedRouteSnapshot, routerStateSnapshot: RouterStateSnapshot): Promise => {\n const authentication = inject(AUTHENTICATION);\n const router = inject(Router);\n const msalGuard = inject(MsalGuard);\n\n let result = false;\n\n if (authentication.getCurrentSubscription() && (await firstValueFrom(msalGuard.canActivate(activatedRouteSnapshot, routerStateSnapshot)))) {\n result = true;\n } else {\n router.navigate([RouteUtils.paths.login.absolutePath]);\n }\n return result;\n};\n","import {inject} from '@angular/core';\nimport {Navigation, Params, Route, Router, UrlSegment} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MsalGuard} from '@azure/msal-angular';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {firstValueFrom} from 'rxjs';\n\nexport const canLoadViaAuthGuard = async (_: Route, segments: UrlSegment[]): Promise => {\n const router = inject(Router);\n const msalGuard = inject(MsalGuard);\n const authentication = inject(AUTHENTICATION);\n\n let result = false;\n\n if (authentication.getCurrentSubscription() && (await firstValueFrom(msalGuard.canMatch()))) {\n result = true;\n } else {\n let queryParams: Params = [];\n const navigation: Navigation = router.getCurrentNavigation();\n if (!AssertionUtils.isNullOrUndefined(navigation) && !AssertionUtils.isNullOrUndefined(navigation.extractedUrl)) {\n queryParams = navigation.extractedUrl.queryParams;\n }\n router.navigate([RouteUtils.paths.login.absolutePath], {queryParams: {redirect: RouteUtils.buildPathFromSegmentsAndQueryParams(segments, queryParams)}});\n }\n return result;\n};\n","import {Component} from '@angular/core';\nimport {TranslateService} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-loading-file',\n templateUrl: './loading-file.component.html',\n styleUrls: ['./loading-file.component.scss']\n})\nexport class LoadingFileComponent {\n private translate: TranslateService;\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public getTitle(): string {\n return this.translate.instant('MACHINE_DOCUMENTATION.LOADING_FILE', null, this.translate.getLocale().language);\n }\n\n public getText(): string {\n return this.translate.instant('MACHINE_DOCUMENTATION.PLEASE_WAIT', null, this.translate.getLocale().language);\n }\n}\n","
\n
\n \"loading-image\"\n
\n

{{ getTitle() }}

\n

{{ getText() }}

\n
\n","
\n
\n \n {{ 'LOGGER.SELECT_LOGGER_LEVEL' | bmsTranslate }}\n \n \n {{ level }}\n \n \n \n
\n
\n
\n \n
\n","import {Component, OnInit} from '@angular/core';\nimport {EnumUtils, LocalStorageService, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {NGXLogger, NgxLoggerLevel} from 'ngx-logger';\n\n@Component({\n selector: 'app-logger',\n templateUrl: './logger.component.html'\n})\nexport class LoggerComponent implements OnInit {\n public loggerLevels: string[] = EnumUtils.getEnumNames(NgxLoggerLevel);\n public levelSelected: string;\n public inProgress = false;\n\n private logger: NGXLogger;\n\n private readonly translate: TranslateService;\n private readonly localStorage: LocalStorageService;\n\n public constructor(\n private readonly toastService: ToastService,\n translate: TranslateService,\n logger: NGXLogger,\n localStorage: LocalStorageService\n ) {\n this.logger = logger;\n this.localStorage = localStorage;\n this.translate = translate;\n }\n\n public ngOnInit(): void {\n this.setLevelSelected();\n }\n\n public setNewLogLevel(): void {\n this.logger.updateConfig({level: NgxLoggerLevel[`${this.levelSelected}`]});\n this.localStorage.set('loggerLevel', this.levelSelected);\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('LOGGER.LOGGER_SELECTED', {object: this.levelSelected})\n });\n }\n\n private setLevelSelected(): void {\n this.levelSelected = EnumUtils.getKeyFromValue(NgxLoggerLevel, this.logger.level);\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'app-unauthorized-page',\n templateUrl: './unauthorized-page.component.html',\n styleUrls: ['../status-codes-pages.component.scss']\n})\nexport class UnauthorizedPageComponent {}\n","
\n
\n \n

{{ 'GENERAL.ERRORS.STATUSCODE.UNAUTHORIZED.TITLE' | bmsTranslate }}!

\n
\n
\n","import {inject, InjectionToken} from '@angular/core';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot, Routes} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {DynamicPathGuard} from '@application/helper/routing/routing-guards/dynamic-path.guard';\nimport {canActivateDefaultPathGuard} from '@application/security/can-activate-default-path.guard';\nimport {canActivatePermissionGuard} from '@application/security/can-activate-permission.guard';\nimport {canActivateUnauthorizedPathGuard} from '@application/security/can-activate-unauthorized-path.guard';\nimport {canActivateViaAuthGuard} from '@application/security/can-activate-via-auth-guard';\nimport {canLoadViaAuthGuard} from '@application/security/can-load-via-auth-guard';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {LoadingFileComponent} from '@presentation/components/loading-file/loading-file.component';\nimport {LoggerComponent} from '@presentation/components/logger/logger.component';\nimport {UnauthorizedPageComponent} from '@presentation/pages/status-codes/401/unauthorized-page.component';\nimport {NotFoundPageComponent} from '@presentation/pages/status-codes/404/not-found-page.component';\n\nexport const externalUrlProvider = new InjectionToken('ExternalUrlRedirectResolver');\n\nexport const routes: Routes = [\n {path: '', pathMatch: 'full', canActivate: [canActivateDefaultPathGuard], component: UnauthorizedPageComponent},\n {\n path: RouteUtils.paths.login.path,\n loadChildren: (): any => import('@presentation/pages/login/login.module').then((m: any) => m.LoginModule)\n },\n Factory.createPrototypeModuleRoute(\n {route: 'texstyle', requiredPermission: Permission.TEXSTYLE_SHOW_ICON, id: NavigationId.TEXSTYLE},\n import('@presentation/pages/textile-data/textile-data.module'),\n [canActivatePermissionGuard],\n null,\n [canLoadViaAuthGuard]\n ),\n Factory.createPrototypeModuleRoute(\n {route: 'texfab', requiredPermission: Permission.TEXFAB_SHOW_ICON, id: NavigationId.TEXFAB},\n import('@presentation/pages/texfab/texfab.module'),\n [canActivatePermissionGuard],\n null,\n [canLoadViaAuthGuard]\n ),\n {\n path: RouteUtils.paths.texState.path,\n loadChildren: (): any => import('@presentation/pages/machine-overview/machine-overview.module').then((m: any) => m.MachineOverviewModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.texState.requiredPermission,\n permissionToCheckSettings: RouteUtils.paths.texState.editMachine.requiredPermission\n }\n },\n {\n path: RouteUtils.paths.texEdit.path,\n loadChildren: (): any => import('@presentation/pages/texedit/texedit.module').then((m: any) => m.TexeditModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.texEdit.requiredPermission\n }\n },\n {\n path: RouteUtils.paths.texBi.path,\n loadChildren: (): any => import('@presentation/pages/texbi/texbi.module').then((m: any) => m.TexbiModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.texBi.requiredPermission\n }\n },\n {\n path: RouteUtils.paths.profile.path,\n loadChildren: (): any => import('@presentation/pages/profile/profile.module').then((m: any) => m.ProfileModule),\n canLoad: [canLoadViaAuthGuard]\n },\n {path: RouteUtils.paths.unauthorized.path, canActivate: [canActivateUnauthorizedPathGuard], component: UnauthorizedPageComponent},\n {\n path: RouteUtils.paths.notFound.path,\n canActivate: [canActivateViaAuthGuard],\n component: NotFoundPageComponent\n },\n Factory.createPrototypeModuleRoute({route: 'calendar', requiredPermission: Permission.TEXSTYLE_SHOW_ICON, id: NavigationId.CALENDAR}, import('@presentation/pages/calendar/calendar.module')),\n {\n path: RouteUtils.paths.texBot.path,\n loadChildren: (): any => import('@presentation/pages/texbot/texbot.module').then((m: any) => m.TexbotModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.texBot.requiredPermission\n }\n },\n Factory.createPrototypeModuleRoute({route: 'utilities', requiredPermission: Permission.TEXSTYLE_SHOW_ICON, id: NavigationId.UTILITIES}, import('@presentation/pages/utilities/utilities.module')),\n {\n path: RouteUtils.paths.help.path,\n loadChildren: (): any => import('@presentation/pages/help/help.module').then((m: any) => m.HelpModule),\n canLoad: [canLoadViaAuthGuard]\n },\n {path: RouteUtils.paths.loadingFile.path, component: LoadingFileComponent},\n {\n path: RouteUtils.paths.logger.path,\n component: LoggerComponent,\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.logger.requiredPermission\n }\n },\n {\n path: RouteUtils.paths.processes.path,\n loadChildren: (): any => import('@presentation/pages/background-jobs/background-jobs.module').then((m: any) => m.BackgroundJobsModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.processes.requiredPermission\n }\n },\n {\n path: RouteUtils.paths.settings.path,\n loadChildren: (): any => import('@presentation/pages/settings/settings.module').then((m: any) => m.SettingsModule),\n canLoad: [canLoadViaAuthGuard],\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: RouteUtils.paths.settings.requiredPermission\n }\n },\n {path: '**', canActivate: [(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean => inject(DynamicPathGuard).canActivate(route, state)], component: NotFoundPageComponent}\n];\n","import {Injectable} from '@angular/core';\nimport {Command} from '@application/command/command';\nimport {PropertyValue} from '@domain/property-value';\nimport isNil from 'lodash-es/isNil';\n\n@Injectable()\nexport class GetPossiblePropertyValuesOfList implements Command {\n public execute(propertyValue: PropertyValue): any[] {\n return !isNil(propertyValue) ? propertyValue.possiblePropertyValues : [];\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {Inject, Injectable, Renderer2, RendererFactory2} from '@angular/core';\nimport {Command} from '@application/command/command';\nimport {WINDOW} from '@vdw/angular-component-library';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrintDocument implements Command<[string, string], void> {\n private readonly renderer: Renderer2;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(WINDOW) private readonly window: Window,\n rendererFactory: RendererFactory2\n ) {\n this.renderer = rendererFactory.createRenderer(null, null);\n }\n\n public execute([xml, xslt]: [string, string]): void {\n const printableElement: HTMLElement = this.renderer.createElement('div');\n this.renderer.addClass(printableElement, 'printable');\n\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xml, 'text/xml');\n const xsltDoc = parser.parseFromString(xslt, 'text/xml');\n const xsltProcessor = new XSLTProcessor();\n xsltProcessor.importStylesheet(xsltDoc);\n\n const result: DocumentFragment = xsltProcessor.transformToFragment(xmlDoc, this.document);\n this.renderer.appendChild(printableElement, result);\n this.renderer.appendChild(this.document.body, printableElement);\n\n this.window.onafterprint = (): void => this.renderer.removeChild(this.document.body, printableElement);\n\n this.window.print();\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {RUNTIME_APPLICATION_ENVIRONMENT, RuntimeApplicationEnvironment} from '@application/configuration/runtime-application-environment';\nimport {ApplicationMaintenance} from '@domain/profile/application-maintenance';\nimport {AssertionUtils, LocalStorageService, WINDOW} from '@vdw/angular-component-library';\nimport {isEmpty, keys, map, replace} from 'lodash-es';\n\n@Injectable()\nexport class BackendConfiguration {\n private localStorageService: LocalStorageService;\n private browserInstanceId: string;\n\n private readonly storageConstants = {\n SUBSCRIPTION_ID: 'subscription.id',\n COMPANY_ID: 'company.id',\n APPLICATION_MAINTENANCE: 'applicationMaintenance'\n };\n\n public constructor(\n localStorageService: LocalStorageService,\n @Inject(RUNTIME_APPLICATION_ENVIRONMENT) private runtimeEnvironment: RuntimeApplicationEnvironment,\n @Inject(WINDOW) private readonly window: Window\n ) {\n this.localStorageService = localStorageService;\n }\n\n public getEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.endpoint, versionNumber);\n }\n\n public getMachineOverviewEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.machineOverviewEndpoint, versionNumber);\n }\n\n public getProductionScheduleEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.productionScheduleEndpoint, versionNumber);\n }\n\n public getProductionOrderEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.productionOrderEndpoint, versionNumber);\n }\n\n public getAggregatorEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.aggregatorEndpoint, versionNumber);\n }\n\n public getWorkerEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.workerEndpoint, versionNumber);\n }\n\n public getAuthenticationEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.authenticationEndpoint, versionNumber);\n }\n\n public getMachineEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.machineEndpoint, versionNumber);\n }\n\n public getIotConfigEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.iotConfigEndpoint, versionNumber);\n }\n\n public getAlertingEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.alertingEndpoint, versionNumber);\n }\n\n public getImageProcessingEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.imageProcessingEndpoint, versionNumber);\n }\n\n public getSettingsEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.settingsEndpoint, versionNumber);\n }\n\n public getPlanningEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.planningEndpoint, versionNumber);\n }\n\n public getCalendarEndpoint(versionNumber: number = 1): string {\n return this.getEndpointWithVersionNumber(this.runtimeEnvironment.getEnvironment().origin.calendarEndpoint, versionNumber);\n }\n\n public getSubscriptionId(): string {\n const storedSubscriptionId: string = this.localStorageService.get(this.storageConstants.SUBSCRIPTION_ID);\n return AssertionUtils.isNullOrUndefined(storedSubscriptionId) ? '' : storedSubscriptionId;\n }\n\n public setSubscriptionId(id: string): void {\n this.localStorageService.set(this.storageConstants.SUBSCRIPTION_ID, id);\n }\n\n public setApplicationMaintenance(applicationMaintenance: ApplicationMaintenance): void {\n if (!applicationMaintenance) {\n this.localStorageService.remove(this.storageConstants.APPLICATION_MAINTENANCE);\n } else {\n this.localStorageService.set(this.storageConstants.APPLICATION_MAINTENANCE, applicationMaintenance);\n }\n }\n\n public getApplicationMaintenance(): ApplicationMaintenance {\n return this.localStorageService.get(this.storageConstants.APPLICATION_MAINTENANCE);\n }\n\n public getCompanyId(): string {\n const storedCompanyId: string = this.localStorageService.get(this.storageConstants.COMPANY_ID);\n return AssertionUtils.isNullOrUndefined(storedCompanyId) ? '' : storedCompanyId;\n }\n\n public getBrowserInstanceId(): string {\n return AssertionUtils.isNullOrUndefined(this.browserInstanceId) ? '' : this.browserInstanceId;\n }\n\n public setCompanyId(id: string): void {\n this.localStorageService.set(this.storageConstants.COMPANY_ID, id);\n }\n\n public getHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.hubEndPoint;\n }\n\n public getNotificationsHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.notificationsHubEndPoint;\n }\n\n public getReportItemsHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.reportItemsHubEndPoint;\n }\n\n public getPlanningHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.planningHubEndPoint;\n }\n\n public getAlertingHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.alertingHubEndPoint;\n }\n\n public getMachineHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.machineHubEndPoint;\n }\n\n public getMachineOverviewHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.machineOverviewHubEndPoint;\n }\n\n public getProcessingHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.processingHubEndPoint;\n }\n\n public getTexCatalogHubEndPoint(): string {\n return this.runtimeEnvironment.getEnvironment().origin.texCatalogHubEndPoint;\n }\n\n public getAuthenticationAuthority(): string {\n return this.runtimeEnvironment.getEnvironment().authentication.authority;\n }\n\n public getAuthenticationClientId(): string {\n return this.runtimeEnvironment.getEnvironment().authentication.clientId;\n }\n\n public getAuthenticationScopes(): string[] {\n return this.runtimeEnvironment.getEnvironment().authentication.scopes;\n }\n\n public getRedirectURL(): string {\n const redirectUrl = this.runtimeEnvironment.getEnvironment().authentication.redirectUrl;\n return isEmpty(redirectUrl) ? `${this.window.location.origin}/login` : redirectUrl;\n }\n\n public getRetryAttempts503(): number {\n return this.runtimeEnvironment.getEnvironment().retryAttempts503;\n }\n\n public getApplicationInsightsInstrumentationKey(): string {\n return this.runtimeEnvironment.getEnvironment().appInsightsInstrumentationKey;\n }\n\n public clearLocalStorage(): void {\n let activeStorageConstant = {...this.storageConstants};\n delete activeStorageConstant.SUBSCRIPTION_ID;\n this.localStorageService.remove(...map(keys(activeStorageConstant), (storageConstantKey: string) => activeStorageConstant[storageConstantKey]));\n }\n\n private getEndpointWithVersionNumber(baseEndpointUrl: string, versionNumber: number): string {\n return replace(baseEndpointUrl, '{versionNumber}', `${versionNumber}`);\n }\n\n public setBrowserInstanceId(id: string): void {\n this.browserInstanceId = id;\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {ApplicationEnvironment} from '@application/configuration/application-environment';\n\nexport const RUNTIME_APPLICATION_ENVIRONMENT = new InjectionToken('RuntimeApplicationEnvironment');\n\nexport interface RuntimeApplicationEnvironment {\n loadEnvironment(): Promise;\n\n getEnvironment(): ApplicationEnvironment;\n}\n","import {Directive, Input, OnChanges, OnDestroy, OnInit, SimpleChanges} from '@angular/core';\nimport {FormGroupDirective} from '@angular/forms';\nimport {NavigationBreadcrumbsService} from '@application/services/navigation-breadcrumbs/navigation-breadcrumbs.service';\nimport {AssertionUtils, BaseComponent, ContentSwitcherDialogService, NavigationHelperPrototypeService} from '@vdw/angular-component-library';\nimport {startWith, takeUntil} from 'rxjs';\n\n@Directive({\n selector: '[appBreadcrumbFormLinker]'\n})\nexport class BreadcrumbFormLinkerDirective extends BaseComponent implements OnInit, OnChanges, OnDestroy {\n @Input('appBreadcrumbFormLinker') public formControlName: string;\n @Input() public name: string;\n\n public constructor(\n private readonly formGroupDirective: FormGroupDirective,\n private readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly navigationBreadcrumbsService: NavigationBreadcrumbsService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const formGroup = this.formGroupDirective.form;\n\n if (formGroup) {\n this.navigationBreadcrumbsService.updateBreadcrumbFormLinkerUsed(true);\n const formControl = formGroup.get(AssertionUtils.isEmpty(this.formControlName) ? 'name' : this.formControlName);\n\n formControl.valueChanges.pipe(startWith(formControl.value), takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: string | number) => {\n if (typeof value === 'number') {\n value = value.toString();\n }\n\n if (this.isDialog()) {\n this.contentSwitcher.setCreatingObjectName(value ?? '');\n } else {\n this.navigationBreadcrumbsService.onNameChanged(value);\n }\n });\n return;\n }\n\n if (this.isDialog()) {\n this.contentSwitcher.setCreatingObjectName(this.name);\n } else {\n this.navigationBreadcrumbsService.updateBreadcrumbFormLinkerUsed(true);\n this.navigationBreadcrumbsService.onNameChanged(this.name ?? '');\n }\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (this.isDialog()) {\n return;\n }\n\n if ('name' in changes && !changes.name.isFirstChange()) {\n this.navigationBreadcrumbsService.onNameChanged(this.name);\n }\n }\n\n public ngOnDestroy(): void {\n if (this.isDialog()) {\n return;\n }\n\n this.navigationBreadcrumbsService.updateBreadcrumbFormLinkerUsed(false);\n }\n\n private isDialog(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog) || this.navigationHelper.contentSwitcherDialogActive();\n }\n}\n","import {Directive, ElementRef, Inject, Input, Renderer2} from '@angular/core';\nimport {RuntimeApplicationEnvironment, RUNTIME_APPLICATION_ENVIRONMENT} from '@application/configuration/runtime-application-environment';\n\n@Directive({\n selector: '[appDataCy]'\n})\nexport class DataCyDirective {\n private static readonly selectorName = 'appDataCy';\n\n private readonly elementRef: ElementRef;\n private readonly renderer: Renderer2;\n\n public constructor(\n elementRef: ElementRef,\n renderer: Renderer2,\n @Inject(RUNTIME_APPLICATION_ENVIRONMENT) private runtimeEnvironment: RuntimeApplicationEnvironment\n ) {\n this.elementRef = elementRef;\n this.renderer = renderer;\n }\n\n @Input('appDataCy')\n public set dataCy(dataCy: string) {\n if (this.runtimeEnvironment.getEnvironment().removeTestingAttributes) {\n this.renderer.removeAttribute(this.elementRef.nativeElement, DataCyDirective.selectorName);\n } else if (!this.elementRef.nativeElement.hasAttribute(DataCyDirective.selectorName)) {\n this.renderer.setAttribute(this.elementRef.nativeElement, DataCyDirective.selectorName, dataCy);\n }\n }\n}\n","import {Directive, Inject, Input, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\n@Directive({\n selector: '[appHasPermission],[appHasNotPermission]'\n})\nexport class HasPermissionDirective {\n @Input() public appHasPermissionElse?: TemplateRef;\n @Input() public appHasNotPermissionElse?: TemplateRef;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly templateRef: TemplateRef,\n private readonly viewContainer: ViewContainerRef\n ) {}\n\n @Input()\n public set appHasPermission(permission: Permission) {\n const currentSubscription = this.authentication.getCurrentSubscription();\n\n if (!AssertionUtils.isNullOrUndefined(currentSubscription) && currentSubscription.hasPermission(permission)) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n } else {\n this.clearAndCreateView(this.appHasPermissionElse);\n }\n }\n\n @Input()\n public set appHasNotPermission(permission: Permission) {\n const currentSubscription = this.authentication.getCurrentSubscription();\n\n if (AssertionUtils.isNullOrUndefined(currentSubscription) || !currentSubscription?.hasPermission(permission)) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n } else {\n this.clearAndCreateView(this.appHasNotPermissionElse);\n }\n }\n\n private clearAndCreateView(templateRef: TemplateRef): void {\n this.viewContainer.clear();\n if (!AssertionUtils.isNullOrUndefined(templateRef)) {\n this.viewContainer.createEmbeddedView(templateRef);\n }\n }\n}\n","import {Directive, ElementRef, Input, OnChanges, OnInit, Renderer2} from '@angular/core';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {BaseComponent} from '@vdw/angular-component-library';\n\n@Directive()\nexport abstract class LoadImageDirective extends BaseComponent implements OnInit, OnChanges {\n @Input() public imageId: string;\n\n protected elementRef: ElementRef;\n private renderer: Renderer2;\n\n protected constructor(renderer: Renderer2, elementRef: ElementRef) {\n super();\n this.renderer = renderer;\n this.elementRef = elementRef;\n }\n\n public ngOnInit(): void {\n this.setImageFromData('/assets/images/image-placeholder.svg');\n }\n\n protected setImageFromData(image: string): void {\n this.renderer.setAttribute(this.elementRef.nativeElement, 'src', image);\n }\n\n public abstract ngOnChanges(): void;\n\n protected abstract downloadAndSetImage(...args: [string, string, number, number, DimensionsInPx]): void;\n\n protected abstract setDownloadedImage(blob: Blob): void;\n}\n","import {Directive, ElementRef, EventEmitter, Input, NgZone, OnInit, Output, Renderer2} from '@angular/core';\nimport {each} from 'lodash-es';\n\n@Directive({\n selector: '[appRunEventsOutsideAngular]'\n})\nexport class RunEventsOutsideAngularDirective implements OnInit {\n @Input('appRunEventsOutsideAngular') public listOfEventsToRunOutsideAngular: string[];\n @Output() public outSideAngularEvent: EventEmitter = new EventEmitter();\n\n private elementRef: ElementRef;\n private zone: NgZone;\n private renderer: Renderer2;\n\n public constructor(elementRef: ElementRef, zone: NgZone, renderer: Renderer2) {\n this.elementRef = elementRef;\n this.zone = zone;\n this.renderer = renderer;\n }\n\n public ngOnInit(): void {\n this.zone.runOutsideAngular(() => {\n each(this.listOfEventsToRunOutsideAngular, (eventToRunOutsideAngular: string) => {\n this.renderer.listen(this.elementRef.nativeElement, eventToRunOutsideAngular, this.onEvent.bind(this));\n });\n });\n }\n\n private onEvent(event: any): void {\n this.outSideAngularEvent.emit(event);\n }\n}\n","export enum GridIdentifier {\n ORDERBOOK = 'Orderbook',\n ORDER_ITEMS = 'OrderItems',\n ORDER_ITEMS_NEW_BUILDER = 'OrderItemsNewBuilder',\n ORDER_ITEMS_PRESELECTION = 'OrderItemsPreselection',\n ORDER_ITEMS_NEW_PRESELECTION = 'OrderItemsNewPreselection',\n GROUPED_ORDER_ITEMS = 'GroupedOrderItems',\n STOP_REASON_TEXTS = 'StopReasonTexts',\n MANAGED_WEAVE_STRUCTURE_OVERVIEW = 'managedWeaveStructureOverview',\n WEAVE_STRUCTURE_OVERVIEW = 'weaveStructureOverview',\n EVENT_ALERT_OVERVIEW = 'eventAlertOverview',\n EVENT_OVERVIEW = 'eventOverview',\n PRODUCT_CONFIGURATION_OVERVIEW = 'productConfigurationOverview',\n ARTICLE_OVERVIEW = 'articleOverview',\n LIST_OF_CREEL_POSITIONS_FOR_WEFT_COLORED_YARN_SET = 'listOfCreelPositionsForWeftColoredYarnSet',\n LIST_OF_CREEL_POSITIONS_FOR_COLORED_YARN_SET = 'listOfCreelPositionsForColoredYarnSet',\n LIST_OF_CREEL_POSITIONS_FOR_COLORED_YARN_SET_PREVIEW = 'listOfCreelPositionsForColoredYarnSetPreview',\n LIST_OF_CREEL_POSITIONS_FOR_TEXTILE_DATA_DETAIL = 'listOfCreelPositionsForTextileDataDetail',\n CUSTOMER_OVERVIEW = 'customerOverview',\n PRODUCTION_ORDER_LITE_OVERVIEW = 'productionOrderLiteOverview',\n PRODUCTION_ORDER_WEAVING_OVERVIEW = 'productionOrderWeavingOverview',\n TUFT_PRODUCTION_ORDER_OVERVIEW = 'tuftProductionOrderOverview',\n PRODUCTION_SCHEDULE_OVERVIEW = 'productionScheduleOverview',\n SALES_ORDER_OVERVIEW = 'salesOrderOverview',\n COLOR_OVERVIEW = 'colorOverview',\n COLOR_SET_OVERVIEW = 'colorSetOverview',\n COLORED_YARN_OVERVIEW = 'coloredYarnOverview',\n COLORED_YARN_SET_OVERVIEW = 'coloredYarnSetOverview',\n CREEL_OVERVIEW = 'creelOverview',\n FINISHING_OVERVIEW = 'finishingOverview',\n FINISHING_TEMPLATE_OVERVIEW = 'finishingTemplateOverview',\n GROUPED_WEAVE_STRUCTURE_OVERVIEW = 'groupedWeaveStructureOverview',\n MACHINE_QUALITY_FINISHING_OVERVIEW = 'qualityFinishingOverview',\n MACHINE_QUALITY_OVERVIEW = 'machineQualityOverview',\n WEAVE_PRODUCT_OVERVIEW = 'weaveProductOverview',\n COMPANY_WEAVE_STRUCTURE_OVERVIEW = 'companyWeaveStructureOverview',\n ADD_WEAVE_STRUCTURE = 'weaveStructureAdd',\n WEFT_COLORED_YARN_SET_OVERVIEW = 'weftColoredYarnSetOverview',\n YARN_SET_OVERVIEW = 'yarnSetOverview',\n YARN_TYPE_OVERVIEW = 'yarnTypeOverview',\n MACHINE_LIST = 'machineList',\n KIOSK_MACHINE_LIST = 'kioskMachineList',\n DATA_UNIT_SETUP_CATALOG = 'dataUnitSetupCatalog',\n DATA_UNIT_SETUP = 'dataUnitSetup',\n BACKGROUND_JOBS = 'backgroundJobs',\n SELECT_YARN_TYPE = 'selectYarnType',\n SELECT_YARN_TYPE_FOR_MATERIAL_SET = 'selectYarnTypeForMaterialSet',\n SELECT_WEAVE_STRUCTURE = 'selectWeaveStructure',\n SELECT_PATH_LAYOUT_TEMPLATE = 'selectPathLayoutTemplate',\n SELECT_MACHINES = 'selectMachines',\n SELECT_IMAGE = 'selectImage',\n ALTERNATIVE_MACHINE_QUALITIES = 'alternativeMachineQualities',\n SELECT_MACHINE_QUALITY_FOR_FINISHING = 'selectMachineQualityForFinishing',\n SELECT_FINISHING_TEMPLATE = 'selectFinishingTemplate',\n SELECT_COLORED_YARN_SET = 'selectColoredYarnSet',\n SELECT_WEAVE_STRUCTURES = 'selectWeaveStructures',\n SELECT_YARN_SET = 'selectYarnSet',\n SELECT_COLOR_SET = 'selectColorSet',\n ALTERNATIVE_COLORED_YARN_SETS = 'alternativeColoredYarnSets',\n SELECT_SINGLE_COLOR = 'selectSingleColor',\n SELECT_CUSTOMER = 'selectCustomer',\n SELECT_ARTICLE = 'selectArticle',\n ORDER_LINES_CONFLICTS = 'orderLinesConflicts',\n PRODUCTION_SCHEDULE_COLORED_YARN_SET_PATHS = 'productionScheduleColoredYarnSetPaths',\n SELECT_PRODUCT_CONFIGURATION = 'selectProductConfiguration',\n SELECT_PRODUCT_CONFIGURATION_VERSION_HISTORY = 'selectProductConfigurationVersionHistory',\n SELECT_MACHINE = 'selectMachine',\n SELECT_WEAVING_MACHINE = 'selectWeavingMachine',\n SELECT_WEAVE_PRODUCT = 'selectWeaveProduct',\n SELECT_TUFT_PRODUCT = 'selectTuftProduct',\n SELECT_PRODUCTION_ORDER = 'selectProductionOrder',\n PRODUCTION_ORDERS_LIST = 'productionOrdersList',\n SELECT_WEFT_COLORED_YARN_SET = 'selectWeftColoredYarnSet',\n PRODUCT_CONFIGURATION_DESIGNS_LIST = 'productConfigurationDesignsList',\n VERSION_HISTORIES_LIST = 'versionHistoriesList',\n DESIGNS_LIST = 'designsList',\n MANAGE_TRAINING_FILES = 'manageTrainingFiles',\n TRAINING_MACHINE_LIST = 'trainingMachineList',\n DOCUMENTATION_MACHINE_LIST = 'documentationMachineList',\n MACHINE_DATA_SOURCES = 'machineDataSources',\n SELECT_EVENT_TYPE = 'selectEventType',\n SELECT_EVENT_SOURCES = 'selectEventSources',\n SELECT_DATA_UNIT_SETUP_CATALOG = 'selectDataUnitSetupCatalog',\n SELECT_RECIPIENTS = 'selectRecipients',\n DECLARATION_OVERVIEW = 'declarationOverview',\n SELECT_WEAVING_MACHINE_TYPE = 'selectWeavingMachineType',\n SELECT_TUFT_MACHINE_TYPE = 'selectTuftMachineType',\n SELECT_TUFT_MACHINE = 'selectTuftMachine',\n SELECT_WINDER_MACHINE_TYPE = 'selectWinderMachineType',\n SELECT_DYEING_MACHINE_TYPE = 'selectDyeingMachineType',\n SELECT_PLASTICS_MACHINE_TYPE = 'selectPlasticsMachineType',\n SELECT_FINISHINGS = 'selectFinishings',\n SELECT_POSSIBLE_MACHINES = 'selectPossibleMachines',\n SELECT_COLOR_PATTERN = 'selectColorPattern',\n SELECT_DRAWING_PATTERN = 'selectDrawingPattern',\n SELECT_MACHINE_QUALITY = 'selectMachineQuality',\n SELECT_FINISHING = 'selectFinishing',\n SELECT_DATA_UNIT_SETUP = 'selectDataUnitSetup',\n SELECT_CREEL = 'selectCreel',\n SELECT_WEAVE_PATTERN_TEMPLATE = 'selectWeavePatternTemplate',\n ADVANCED_SEARCH_MACHINE_QUALITY = 'advancedSearchMachineQuality',\n ADVANCED_SEARCH_COLORED_YARN_SET = 'advancedSearchColoredYarnSet',\n ADVANCED_SEARCH_MACHINE = 'advancedSearchMachine',\n ADVANCED_SEARCH_COLOR_SET = 'advancedSearchColorSet',\n ADVANCED_SEARCH_MAIN_COLOR = 'advancedSearchMainColor',\n ADVANCED_SEARCH_BORDER_COLOR = 'advancedSearchBorderColor',\n ADVANCED_SEARCH_ARTICLE = 'advancedSearchArticle',\n ADVANCED_SEARCH_CREEL = 'advancedSearchCreel',\n ADVANCED_SEARCH_WEAVE_STRUCTURE = 'advancedSearchWeaveStructure',\n ADVANCED_SEARCH_MAIN_DESIGN = 'advancedSearchMainDesign',\n ADVANCED_SEARCH_WEFT_COLORED_YARN_SET = 'advancedSearchWeftColoredYarnSet',\n ADVANCED_SEARCH_WEAVE_PRODUCT = 'advancedSearchWeaveProduct',\n ADVANCED_SEARCH_TUFT_PRODUCT = 'advancedSearchTuftProduct',\n ADVANCED_SEARCH_PLASTIC_PRODUCT = 'advancedSearchPlasticProduct',\n ADVANCED_SEARCH_TOOL = 'advancedSearchTool',\n TUFT_PRODUCT_OVERVIEW = 'tuftProductOverview',\n SELECT_ALERT_TYPES = 'selectAlertTypes',\n RESOURCE_TYPE_OVERVIEW = 'resourceTypeOverview',\n PHYSICAL_QUANITTY_OVERVIEW = 'physicalQuantityOverview',\n SELECT_PHYSICAL_QUANITTY_CATALOG = 'selectPhysicalQuantityCatalog',\n DEVICE_TEMPLATE_CATALOG_OVERVIEW = 'deviceTemplateCatalogOverview',\n DEVICE_TEMPLATE_COUNTER_CATALOG_OVERVIEW = 'deviceTemplateCounterCatalogOverview',\n DEVICE_TEMPLATE_CONFIGURATION_CATALOG_OVERVIEW = 'deviceTemplateConfigurationCatalogOverview',\n DEVICE_TEMPLATE_OVERVIEW = 'deviceTemplateOverview',\n SELECT_RESOURCE_TYPES = 'selectResourceTypes',\n SELECT_REPORT_ITEM = 'selectReportItems',\n SELECT_REPORT_ITEM_CATALOG = 'selectReportItemCatalog',\n SELECT_UNIT = 'selectUnits',\n DEVICE_TEMPLATE_COUNTER_OVERVIEW = 'deviceTemplateCounterOverview',\n DEVICE_TEMPLATE_CONFIGURATION_OVERVIEW = 'deviceTemplateConfigurationOverview',\n SELECT_DEVICE_TEMPLATE_CATALOG = 'selectDeviceTemplateCatalog',\n SELECT_COUNTER_CATALOG = 'selectCounterCatalog',\n REPORT_ITEM_OVERVIEW = 'reportItemOverview',\n OPERATORS_OVERVIEW = 'operatorsOverview',\n OPERATOR_TYPES_OVERVIEW = 'operatorTypesOverview',\n PATH_LAYOUT_TEMPLATE_OVERVIEW = 'pathLayoutTemplateOverview',\n STOP_GROUPS_PREVIEW = 'stopGroupsPreview',\n SELECT_RESOURCE_TYPE_BREAKDOWN = 'selectResourceTypeBreakdown',\n SELECT_DATA_UNIT = 'selectDataUnit',\n SELECT_EDGE_DEVICE = 'selectEdgeDevice',\n SELECT_REPORT_ITEMS_BY_CATEGORY = 'reportItemsByCategory',\n PRODUCTION_SCHEDULE_COLORED_YARN_SETS = 'productionScheduleColoredYarnSets',\n BUGGY = 'buggy',\n SELECT_OBJECTS_DIALOG = 'selectObjectsDialog',\n LIST_OF_STOP_REASON_TEXT_CATALOG = 'listOfStopReasonTextCatalog',\n SELECT_COLOR = 'selectColor',\n CREEL_PREVIEW = 'creelPreview',\n LIST_OF_MACHINES_FOR_ADD_COMPANY_WEAVE_STRUCTURE = 'listOfMachinesForAddCompanyWeaveStructure',\n PART_TAGS_FOR_TRAINING_MANAGE_TAGS = 'partTagsForTrainingManageTags',\n SELECT_RULE_ENTITY = 'selectRuleEntity',\n AUTOMATIC_STOP_MAPPING = 'automaticStopMapping',\n LIST_OF_PATTERN_FIELDS = 'listOfPatternFields',\n PLACEHOLDER_PARTS = 'placeholderParts',\n SELECT_RAW_MATERIAL_FOR_YARN = 'selectRawMaterialForYarn',\n SELECT_RAW_MATERIAL_FOR_COLORED_YARN = 'selectRawMaterialForColoredYarn',\n DESIGN_LIST_NEW = 'designListNew',\n LIST_OF_PATH_CONTENTS = 'listOfPathContents',\n GROUPED_DESIGNS = 'groupedDesigns',\n GROUPED_DESIGNS_DETAIL_PRESELECTION = 'groupedDesignsPreselection',\n GROUPED_DESIGNS_DETAIL_BUILDER = 'groupedDesignsBuilder',\n PRODUCTION_SCHEDULE_PATH_LIST_VIEW = 'productionSchedulePathListView',\n GROUPED_DESIGN_THUMBNAILS = 'groupedDesignThumbnails',\n PLASTIC_PRODUCT_OVERVIEW = 'plasticOverview',\n PLASTIC_PRODUCTION_ORDER_OVERVIEW = 'plasticProductionOrderOverview',\n TOOL_OVERVIEW = 'toolOverview',\n SELECT_REJECT_REASON_GROUP = 'selectRejectReasonGroup',\n REJECT_REASON_OVERVIEW = 'rejectReasonOverview',\n PLASTIC_PRODUCT_GROUP_OVERVIEW = 'plasticProductGroupOverview',\n MATERIAL_OVERVIEW = 'materialOverview',\n SELECT_MACHINE_GROUP = 'selectMachineGroup',\n FIXED_SCHEDULE_OVERVIEW = 'fixedScheduleOverview',\n SHIFT_OVERVIEW = 'shiftOverview',\n SHIFT_PATTERN_OVERVIEW = 'shiftPatternOverview',\n PATTERN_SHIFT = 'patternShift',\n STOCK_LOCATION_OVERVIEW = 'stockLocation',\n SELECT_FIXED_SCHEDULE = 'selectFixedSchedule',\n PATTERN_BUILDER = 'patternBuilder',\n MATCHING_CRITERIA = 'matchingCriteria',\n TOOL_PRODUCTS = 'toolProducts',\n SELECT_REJECT_REASON = 'selectRejectReason',\n SCHEDULE_OVERVIEW = 'scheduleOverview'\n}\n","export enum HeaderIdentifier {\n ADD_COLOR = 'addColor',\n ADD_QUALITY = 'addQuality',\n ADD_YARN = 'addYarn',\n ADD_FINISHING_TEMPLATE = 'addFinishingTemplate',\n ADD_WEAVE_PRODUCT = 'addWeaveProduct',\n ADD_PRODUCTION_SCHEDULE = 'addProductionSchedule',\n ADD_PRODUCTION_ORDER_WEAVING = 'addProductionOrderWeaving',\n ADD_TUFT_PRODUCTION_ORDER = 'addTuftProductionOrder',\n ADD_CREEL = 'addCreel',\n ADD_COLOR_SET = 'addColorSet',\n ADD_YARN_SET = 'addYarnSet',\n ADD_TUFT_PRODUCT = 'addTuftProduct',\n ADD_COLORED_YARN = 'addColoredYarn',\n ADD_COLORED_YARN_SET = 'addColoredYarnSet',\n ADD_PATH_LAYOUT_TEMPLATE = 'addPathLayoutTemplate',\n ADD_MANAGE_WEAVE_STRUCTURE = 'addManageWeaveStructure',\n ADD_WEAVE_STRUCTURE = 'addWeaveStructure',\n ADD_WEAVE_STRUCTURE_PATTERN = 'addWeaveStructurePattern',\n ADD_WEFT_COLORED_YARN_SET = 'addWeftColoredYarnSet',\n ADD_CUSTOMER = 'addCustomer',\n ADD_ARTICLE = 'addArticle',\n ADD_SALES_ORDER = 'addSalesOrder',\n ADD_DATA_UNIT_SETUP = 'addDataUnitSetup',\n ADD_DATA_UNIT_SETUP_CATALOG = 'addDataUnitSetupCatalog',\n ADD_MACHINE_DATA_SOURCE = 'addMachineDataSource',\n ADD_OPERATOR = 'addOperator',\n ADD_OPERATOR_TYPE = 'addOperatorType',\n ADD_RESOURCE_TYPE = 'addResourceType',\n ADD_PHYSICAL_QUANTITY = 'addPhysicalQuantity',\n SEND_WINDER_VIBRATION_FORM = 'sendWinderVibrationForm',\n ADD_EVENT = 'addEvent',\n ADD_ALERT = 'addAlert',\n ADD_TEMPLATE = 'addTemplate',\n ADD_REPORT_ITEM = 'addReportItem',\n EDIT_MACHINE = 'editMachine',\n ADD_WINDER_MACHINE_TYPE = 'addWinderMachineType',\n ADD_DRAWING = 'addDrawing',\n ADD_FINISHING = 'addFinishing',\n ADD_WEAVING_MACHINE_TYPE = 'addWeavingMachineType',\n ADD_DYEING_MACHINE_TYPE = 'addDyeingMachineType',\n ADD_TUFTING_MACHINE_TYPE = 'addTuftingMachineType',\n ADD_PLASTIC_PRODUCT = 'addPlasticProduct',\n ADD_TOOL = 'addTool',\n ADD_PRODUCT_CONFIGURATION_ORDER = 'addProductConfigurationOrder',\n ADD_PLASTIC_PRODUCTION_ORDER = 'addPlasticProductionOrder',\n ADD_REJECT_REASON = 'addRejectReason',\n ADD_FIXED_SCHEDULE = 'addFixedSchedule',\n ADD_BUGGY = 'addBuggy',\n ADD_SHIFT = 'addShift',\n ADD_SHIFT_PATTERN = 'addShiftPattern',\n ADD_SHIFT_SCHEDULE = 'addShiftSchedule',\n ADD_STOCK_LOCATION = 'addStockLocation',\n ADD_RAW_MATERIAL = 'addRawMaterial'\n}\n","import {FixedShape} from '@domain/drawing-library/fixed-shape.enum';\nimport {MachineEfficiencyLevel} from '@domain/machine/machine-efficiency-level.enum';\nimport {MachineStatus} from '@domain/machine/machine-status.enum';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {PropertyValue} from '@domain/property-value';\nimport {AdvancedSearchBoolInput} from '@presentation/components/search-filters/advanced-search/advanced-search-bool-input.enum';\nimport {AdvancedSearchDateInput} from '@presentation/components/search-filters/advanced-search/advanced-search-date-input.enum';\nimport {AdvancedSearchEnumInput} from '@presentation/components/search-filters/advanced-search/advanced-search-enum-input.enum';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {AdvancedSearchNumberInput} from '@presentation/components/search-filters/advanced-search/advanced-search-number-input.enum';\nimport {AdvancedSearchObjectInput} from '@presentation/components/search-filters/advanced-search/advanced-search-object-input.enum';\nimport {AdvancedSearchStringInput} from '@presentation/components/search-filters/advanced-search/advanced-search-string-input.enum';\nimport {convertCommercialUnit, convertUnit, EnumUtils, moment, Priority, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {camelCase, includes, isEmpty, isEqual, isNil, toNumber} from 'lodash-es';\n\nexport enum AdvancedSearchInputType {\n STRING,\n NUMBER,\n ENUM,\n OBJECT,\n DATE,\n BOOL\n}\n\nexport class AdvancedSearchUtils {\n private static inputTypeMap = new Map([\n [AdvancedSearchInputType.STRING, EnumUtils.getEnumValues(AdvancedSearchStringInput)],\n [AdvancedSearchInputType.NUMBER, EnumUtils.getEnumValues(AdvancedSearchNumberInput)],\n [AdvancedSearchInputType.OBJECT, EnumUtils.getEnumValues(AdvancedSearchObjectInput)],\n [AdvancedSearchInputType.ENUM, EnumUtils.getEnumValues(AdvancedSearchEnumInput)],\n [AdvancedSearchInputType.DATE, EnumUtils.getEnumValues(AdvancedSearchDateInput)],\n [AdvancedSearchInputType.BOOL, EnumUtils.getEnumValues(AdvancedSearchBoolInput)]\n ]);\n\n private static jsonKeyMap = new Map([\n [AdvancedSearchInput.DRAWING_CODE, 'drawingCode'],\n [AdvancedSearchInput.LENGTH, 'commercialDimensions'],\n [AdvancedSearchInput.WIDTH, 'commercialDimensions'],\n [AdvancedSearchInput.ORDER_REFERENCE, 'orderReference'],\n [AdvancedSearchInput.CUSTOMER_REFERENCE, 'customerReference'],\n [AdvancedSearchInput.DRAWING_TYPE, 'drawingType'],\n [AdvancedSearchInput.MACHINE_STATUS, 'machineStatus'],\n [AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS, 'status'],\n [AdvancedSearchInput.MACHINE_EFFICIENCY, 'machineEfficiency'],\n [AdvancedSearchInput.DRAWING_NAME, 'designName'],\n [AdvancedSearchInput.PICK_DENSITY, 'pickDensity'],\n [AdvancedSearchInput.REED_DENSITY, 'reedDensity'],\n [AdvancedSearchInput.COMPLETION_DATE_START, 'completionDate'],\n [AdvancedSearchInput.COMPLETION_DATE_END, 'completionDate'],\n [AdvancedSearchInput.WIDTH_IN_DENTS, 'technicalDimensions'],\n [AdvancedSearchInput.HEIGHT_IN_PICKS, 'technicalDimensions'],\n [AdvancedSearchInput.MISSING_DESIGN, 'missingDesign']\n ]);\n\n public static clearValue(propertyValue: PropertyValue): void {\n propertyValue.propertyValue = null;\n }\n\n public static hasValue(propertyValue: PropertyValue): boolean {\n let result = false;\n switch (AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName)) {\n case AdvancedSearchInputType.ENUM:\n case AdvancedSearchInputType.BOOL:\n result = !isNil(propertyValue.propertyValue);\n break;\n case AdvancedSearchInputType.NUMBER:\n result = !isNil(propertyValue.propertyValue) && isFinite(propertyValue.propertyValue);\n break;\n case AdvancedSearchInputType.OBJECT:\n case AdvancedSearchInputType.STRING:\n result = !isEmpty(propertyValue.propertyValue);\n break;\n case AdvancedSearchInputType.DATE:\n result = !isNil(propertyValue.propertyValue);\n break;\n }\n return result;\n }\n\n public static getDisplayValueForAdvancedSearchFilter(propertyName: string, value: any, translate: TranslateService, defaultUnit: Unit): string {\n let displayValue: string;\n switch (AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyName)) {\n case AdvancedSearchInputType.ENUM:\n displayValue = this.getDisplayValueForAdvancedSearchFilterEnumCase(propertyName, value, translate);\n break;\n case AdvancedSearchInputType.NUMBER:\n displayValue = this.getDisplayValueForAdvancedSearchFilterNumberCase(propertyName, value, defaultUnit);\n break;\n case AdvancedSearchInputType.STRING:\n displayValue = this.getDisplayValueForAdvancedSearchFilterStringCase(propertyName, value, translate);\n break;\n case AdvancedSearchInputType.OBJECT:\n displayValue = this.getDisplayValueForAdvancedSearchFilterObjectCase(propertyName, value);\n break;\n case AdvancedSearchInputType.DATE:\n displayValue = this.getDisplayValueForAdvancedSearchFilterDateCase(value);\n break;\n case AdvancedSearchInputType.BOOL:\n displayValue = value ? 'true' : 'false';\n break;\n }\n return displayValue;\n }\n\n public static getInputTypeForAdvancedSearchFilter(key: string): AdvancedSearchInputType {\n let inputType: AdvancedSearchInputType;\n if (this.inputTypeIsOfTypeString(key)) {\n inputType = AdvancedSearchInputType.STRING;\n } else if (this.inputTypeIsOfTypeNumber(key)) {\n inputType = AdvancedSearchInputType.NUMBER;\n } else if (this.inputTypeIsOfTypeEnum(key)) {\n inputType = AdvancedSearchInputType.ENUM;\n } else if (this.inputTypeIsOfTypeObject(key)) {\n inputType = AdvancedSearchInputType.OBJECT;\n } else if (this.inputTypeIsOfTypeDate(key)) {\n inputType = AdvancedSearchInputType.DATE;\n } else if (this.inputTypeIsOfTypeBool(key)) {\n inputType = AdvancedSearchInputType.BOOL;\n }\n return inputType;\n }\n\n public static getJsonBodyForAdvancedSearchFilters(filters: PropertyValue[], pickDensityUnit?: Unit, reedDensityUnit?: Unit): JSON {\n const body: JSON = {} as JSON;\n for (const filter of filters) {\n if (AdvancedSearchUtils.hasValue(filter) && !isEqual(filter.propertyName, AdvancedSearchInput.COMPLETION_DATE_START) && !isEqual(filter.propertyName, AdvancedSearchInput.COMPLETION_DATE_END)) {\n body[AdvancedSearchUtils.getJsonKeyForAdvancedSearchFilter(filter.propertyName)] = AdvancedSearchUtils.getJsonValueForAdvancedSearchFilter(filter, body, pickDensityUnit, reedDensityUnit);\n } else if (AdvancedSearchUtils.hasValue(filter)) {\n const subJson: JSON = {...body[AdvancedSearchUtils.getJsonKeyForAdvancedSearchFilter(filter.propertyName)]} as JSON;\n subJson[AdvancedSearchUtils.getSubJsonKeyForAdvancedSearchFilter(filter.propertyName)] = AdvancedSearchUtils.getJsonValueForAdvancedSearchFilter(filter, body);\n body[AdvancedSearchUtils.getJsonKeyForAdvancedSearchFilter(filter.propertyName)] = subJson;\n }\n }\n return body;\n }\n\n public static getAgGridJsonBodyForAdvancedSearchFilters(filters: PropertyValue[]): any {\n const body: any = {\n filterModel: {}\n };\n\n for (const filter of filters) {\n if (AdvancedSearchUtils.hasValue(filter)) {\n const filterModel = {\n filterType: 'multi',\n filterModels: [\n {\n filterType: 'text',\n type: 'contains',\n filter: filter.propertyValue\n }\n ]\n };\n body.filterModel[filter.propertyName] = {...filterModel};\n }\n }\n return body;\n }\n\n private static getJsonKeyForAdvancedSearchFilter(key: string): string {\n let result: string = key;\n const mappedValue = this.jsonKeyMap.get(key);\n\n if (!isNil(mappedValue)) {\n result = mappedValue;\n } else if (isEqual(AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(key), AdvancedSearchInputType.OBJECT)) {\n result = camelCase(key) + 'Id';\n }\n\n return result;\n }\n\n private static getSubJsonKeyForAdvancedSearchFilter(key: string): string {\n let jsonKey: string;\n if (isEqual(key, AdvancedSearchInput.COMPLETION_DATE_START)) {\n jsonKey = 'start';\n } else if (isEqual(key, AdvancedSearchInput.COMPLETION_DATE_END)) {\n jsonKey = 'end';\n }\n\n return jsonKey;\n }\n\n private static getJsonValueForAdvancedSearchFilter(propertyValue: PropertyValue, json: JSON, pickDensityUnit?: Unit, reedDensityUnit?: Unit): any {\n let jsonValue: any;\n switch (AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName)) {\n case AdvancedSearchInputType.ENUM:\n jsonValue = this.getJsonValueForEnumType(propertyValue);\n\n break;\n case AdvancedSearchInputType.OBJECT:\n jsonValue = propertyValue.propertyValue.id;\n break;\n case AdvancedSearchInputType.NUMBER:\n if (propertyValue.propertyName === AdvancedSearchInput.LENGTH || propertyValue.propertyName === AdvancedSearchInput.WIDTH) {\n const jsonKey: string = propertyValue.propertyName + 'InMM';\n jsonValue = json['commercialDimensions'];\n if (isNil(jsonValue)) {\n jsonValue = {} as JSON;\n json['commercialDimensions'] = jsonValue;\n }\n jsonValue[jsonKey] = parseInt(propertyValue.propertyValue, 10);\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.PICK_DENSITY)) {\n jsonValue = convertUnit({\n from: {\n unit: pickDensityUnit,\n value: propertyValue.propertyValue\n },\n to: Unit.PICKS_PER_MILLIMETER\n });\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.REED_DENSITY)) {\n jsonValue = convertUnit({\n from: {\n unit: reedDensityUnit,\n value: propertyValue.propertyValue\n },\n to: Unit.DENTS_PER_MILLIMETER\n });\n } else if (propertyValue.propertyName === AdvancedSearchInput.WIDTH_IN_DENTS || propertyValue.propertyName === AdvancedSearchInput.HEIGHT_IN_PICKS) {\n jsonValue = json['technicalDimensions'];\n if (jsonValue == null) {\n jsonValue = {} as JSON;\n json['technicalDimensions'] = jsonValue;\n }\n jsonValue[propertyValue.propertyName] = parseInt(propertyValue.propertyValue, 10);\n } else {\n jsonValue = parseInt(propertyValue.propertyValue, 10);\n }\n break;\n case AdvancedSearchInputType.STRING:\n jsonValue = propertyValue.propertyValue;\n break;\n case AdvancedSearchInputType.DATE:\n jsonValue = moment(propertyValue.propertyValue).format();\n break;\n case AdvancedSearchInputType.BOOL:\n jsonValue = propertyValue.propertyValue;\n break;\n }\n\n return jsonValue;\n }\n\n private static inputTypeIsOfTypeString(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.STRING, key);\n }\n\n private static inputTypeIsOfTypeNumber(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.NUMBER, key);\n }\n\n private static inputTypeIsOfTypeEnum(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.ENUM, key);\n }\n\n private static inputTypeIsOfTypeObject(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.OBJECT, key);\n }\n\n private static inputTypeIsOfTypeDate(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.DATE, key);\n }\n\n private static inputTypeIsOfTypeBool(key: string): boolean {\n return this.inputIsOfType(AdvancedSearchInputType.BOOL, key);\n }\n\n private static inputIsOfType(type: AdvancedSearchInputType, key: string): boolean {\n return includes(this.inputTypeMap.get(type), key);\n }\n\n private static getDisplayValueForAdvancedSearchFilterEnumCase(propertyName: string, value: any, translate: TranslateService): string {\n let displayValue: string;\n\n if (isEqual(propertyName, AdvancedSearchInput.DRAWING_TYPE)) {\n displayValue = DrawingType[value];\n } else if (isEqual(propertyName, AdvancedSearchInput.MACHINE_STATUS)) {\n displayValue = translate.instant('MACHINE.' + MachineStatus[value]);\n } else if (isEqual(propertyName, AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS)) {\n displayValue = translate.instant('PRODUCTION_ORDER.STATUS.' + ProductionScheduleStatus[value]);\n } else if (isEqual(propertyName, AdvancedSearchInput.MACHINE_EFFICIENCY)) {\n displayValue = translate.instant('MACHINE.' + MachineEfficiencyLevel[value]);\n } else if (isEqual(propertyName, AdvancedSearchInput.PRIORITY)) {\n displayValue = translate.instant('SALES_ORDERS.PRIORITY.' + Priority[value]);\n }\n\n return displayValue;\n }\n\n private static getDisplayValueForAdvancedSearchFilterNumberCase(propertyName: string, value: any, defaultUnit: Unit): string {\n let displayValue: string;\n\n if ((propertyName === AdvancedSearchInput.LENGTH || propertyName === AdvancedSearchInput.WIDTH) && value !== null) {\n displayValue = `${convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: toNumber(value)}, to: defaultUnit})}`;\n } else {\n displayValue = value;\n }\n\n return displayValue;\n }\n\n private static getDisplayValueForAdvancedSearchFilterStringCase(propertyName: string, value: any, translate: TranslateService): string {\n let displayValue: string;\n\n if (isEqual(propertyName, AdvancedSearchInput.DRAWING_SHAPE)) {\n displayValue = FixedShape.getTranslationKeyForShape(value, translate);\n } else {\n displayValue = value;\n }\n\n return displayValue;\n }\n\n private static getDisplayValueForAdvancedSearchFilterObjectCase(propertyName: string, value: any): string {\n let displayValue: string;\n if (isEqual(propertyName, AdvancedSearchInput.MACHINE_QUALITY)) {\n displayValue = value.technicalNameWithVersion;\n } else {\n displayValue = value.name;\n }\n\n return displayValue;\n }\n\n private static getDisplayValueForAdvancedSearchFilterDateCase(value: any): string {\n return moment(value).format('MM/DD/YYYY');\n }\n\n private static getJsonValueForEnumType(propertyValue: PropertyValue): any {\n let jsonValue: any;\n if (isEqual(propertyValue.propertyName, AdvancedSearchInput.DRAWING_TYPE)) {\n jsonValue = DrawingType[propertyValue.propertyValue];\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.MACHINE_STATUS)) {\n jsonValue = MachineStatus[propertyValue.propertyValue];\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS)) {\n jsonValue = ProductionScheduleStatus[propertyValue.propertyValue];\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.MACHINE_EFFICIENCY)) {\n jsonValue = MachineEfficiencyLevel[propertyValue.propertyValue];\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.PRIORITY)) {\n jsonValue = Priority[propertyValue.propertyValue];\n }\n\n return jsonValue;\n }\n}\n","export enum BackendErrorCodeEnum {\n NOT_FOUND,\n LINKED_ENTITIES,\n DUPLICATE_NAME,\n DUPLICATE_CONFIGURATION,\n OVERLAP_REGIMES_OR_SHIFTS,\n RECOLOR_MISMATCH,\n MISSING_COLORS,\n ALTERNATIVES,\n LOOM_MAP_CHORE_MISMATCH,\n EXCEPTIONS_LIST,\n INVALID_NAME,\n INVALID_VALUE,\n OVERLAPPING_ENTITIES,\n MISSING_PROPERTY,\n MISMATCH_PROPERTY,\n DESIGN_MISSING_COLORS,\n DESIGN_INVALID_WEFT_SELECTION_CODES\n}\n","import {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {EpDrawing} from '@domain/production-schedule/ep-drawing';\nimport {TftDrawing} from '@domain/production-schedule/tft-drawing';\n\nexport function convertJSONToDrawing(drawingJSON: any): Drawing {\n let drawing: Drawing;\n\n if (drawingJSON.drawingType === DrawingType.BMP) {\n drawing = BmpDrawing.fromJSON(drawingJSON);\n } else if (drawingJSON.drawingType === DrawingType.EP) {\n drawing = EpDrawing.fromJSON(drawingJSON);\n } else {\n drawing = TftDrawing.fromJSON(drawingJSON);\n }\n\n return drawing;\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {DRAWINGS, Drawings} from '@infrastructure/http/drawing/drawings';\nimport {AssertionUtils, BlobUtils, DialogBuilderFactoryService, TranslateService} from '@vdw/angular-component-library';\nimport {find, isEqual, isNil, size, toLower} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {ImageUploadHelper} from '../image-upload-helper';\nimport {NavigationHelperService} from '../navigation-helper/navigation-helper.service';\n\n@Injectable()\nexport class DrawingImageUploadHelper extends ImageUploadHelper {\n protected dialogTitle = 'DESIGN_LIBRARY.DESIGN_LIBRARY';\n\n private readonly fileTypes: DrawingType[] = [DrawingType.BMP, DrawingType.EP, DrawingType.TFT, DrawingType.PVD];\n private readonly urlToNavigateToAddDrawing = RouteUtils.paths.texEdit.addDesign.absolutePath;\n\n public constructor(\n @Inject(DRAWINGS) private readonly drawings: Drawings,\n private readonly router: Router,\n dialogBuilderFactoryService: DialogBuilderFactoryService,\n translate: TranslateService,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super(translate, dialogBuilderFactoryService);\n }\n\n public uploadFiles(files: File[], navigationData?: any): void {\n this.removeSubscriptionForImageSubject();\n this.drawings.clearUploadQueue();\n const localFilesCopy: File[] = [];\n localFilesCopy.push(...files);\n\n this.subscriptionForImageSubject = this.imageSubject.pipe(takeUntil(this._unSubscribeOnViewDestroy)).subscribe((result: {error: string; image: DrawingImage}) => {\n if (!isNil(result.error)) {\n this.displayAlertDialog(result.error);\n } else {\n this.drawings.addImageToUploadQueue(result.image);\n if (isEqual(size(this.drawings.getUploadQueue()), size(localFilesCopy))) {\n if (AssertionUtils.isNullOrUndefined(navigationData)) {\n this.navigateToPage(this.urlToNavigateToAddDrawing);\n } else {\n this.navigationHelperService.navigateToNextRouteWithPartialState(navigationData, this.urlToNavigateToAddDrawing);\n }\n }\n }\n });\n\n this.processFileChange(localFilesCopy, this.fileTypes);\n }\n\n protected processFile(fileName: string, file: File, fileDrawingType: DrawingType): void {\n if (isEqual(fileDrawingType, DrawingType.BMP)) {\n BlobUtils.blobToArrayBuffer(file).then(this.onImageReaderLoadForFormatLocalValidation(fileName, file, fileDrawingType));\n } else {\n this.imageSubject.next({\n error: null,\n image: {\n name: fileName,\n file,\n type: fileDrawingType\n }\n });\n }\n }\n\n protected onImageLoad(drawingImage: HTMLImageElement, file: File, drawingType: DrawingType): () => void {\n return (): void => {\n this.imageSubject.next({\n error: null,\n image: {\n dimensionsInPx: {\n widthInPx: drawingImage.naturalWidth,\n heightInPx: drawingImage.naturalHeight\n },\n data: drawingImage.src,\n name: drawingImage.id,\n file,\n type: drawingType\n }\n });\n };\n }\n\n protected getFileTypeFromAllowedTypes(fileExtension: string, allowedTypes: DrawingType[]): DrawingType {\n return find(allowedTypes, (type: DrawingType) => isEqual(fileExtension, toLower(type)));\n }\n\n private navigateToPage(pageUrl: string): void {\n this.router.navigateByUrl(pageUrl);\n }\n}\n","import {AbstractControl} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {AssertionUtils, UnhandledBackendError} from '@vdw/angular-component-library';\nimport {NavigationHelperService} from './navigation-helper/navigation-helper.service';\n\nexport class ErrorHandlers {\n public static navigateToOverviewAndThrowError(router: Router, overviewPath: string, navigationHelperService: NavigationHelperService = null): (error: any) => void {\n return (error: any): void => {\n if (!AssertionUtils.isNullOrUndefined(navigationHelperService)) {\n navigationHelperService.navigateToPreviousRoute(overviewPath);\n } else {\n router.navigateByUrl(overviewPath);\n }\n if (error instanceof UnhandledBackendError) {\n error.autoNavigated = true;\n }\n throw error;\n };\n }\n\n public static getLoadLink(editUrl: string, formControl: AbstractControl): string {\n return editUrl.replace(':id', formControl.errors.entityId);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BackendErrorCodeEnum} from '@application/helper/backend-error-code.enum';\nimport {BackendErrorContext} from '@application/helper/backend-error-context';\nimport {Entity} from '@application/helper/entity.enum';\nimport {AssertionUtils, TranslateService} from '@vdw/angular-component-library';\nimport {defaultTo, join, lowerCase, size, startCase} from 'lodash-es';\nimport {forkJoin, Observable, throwError} from 'rxjs';\nimport {map, mergeMap} from 'rxjs/operators';\n\n@Injectable()\nexport class ErrorMessageHelper {\n private translate: TranslateService;\n\n private static readonly ENTITY_TRANSLATION_KEYS: Record = {\n MACHINE_QUALITY: 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY',\n COLOR_SET: 'TEXTILE_DATA.COLOR_SET.COLOR_SET',\n COLOR: 'TEXTILE_DATA.COLOR.COLOR',\n YARN_SET: 'TEXTILE_DATA.YARN_SET.YARN_SET',\n YARN_TYPE: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE',\n COLORED_YARN_SET: 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET',\n CREEL: 'TEXTILE_DATA.CREEL.CREEL',\n FINISHING: 'TEXTILE_DATA.FINISHING.FINISHING',\n FINISHING_TEMPLATE: 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE',\n MACHINE: 'MACHINE.MACHINE',\n DESIGN: 'DESIGN_LIBRARY.DESIGN',\n CUSTOM_SETTING: 'GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS',\n WEAVE_STRUCTURE: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE',\n COMPANY: 'GENERAL.COMPANY',\n PRODUCTION_ORDER: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n PRODUCTION_ORDER_LITE: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n RUN: 'PLANNING.ADD_ITEM.TYPES.RUN',\n STOP_REASON_TEXT: 'BMSCONFIG.STOP_REASON_CATALOG',\n DRAWING_SHAPE: 'DESIGN_LIBRARY.SETTINGS.DESIGN_SHAPES',\n WEFT_COLOR: 'TEXTILE_DATA.WEFT_COLOR',\n ORDER_LINE: 'SALES_ORDERS.ORDER_LINES.ORDER_LINE',\n ARTICLE: 'ARTICLES.ARTICLE',\n DATA_UNIT_SETUP: 'BMSCONFIG.DATA_UNIT_SETUP.DATA_UNIT_SETUP',\n DATA_SOURCE: 'BMSCONFIG.MACHINE_DATA_SOURCES.MACHINE_DATA_SOURCES',\n CHORE: 'TEXTILE_DATA.COLOR.COLOR',\n CUSTOMER: 'CUSTOMERS.CUSTOMER',\n SALES_ORDER: 'SALES_ORDERS.SALES_ORDER',\n WEAVE_PRODUCT: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT',\n AUTOMATIC_STOP_GROUPS: 'BMSCONFIG.AUTOMATIC_STOP_GROUPS.CARD_TITLE',\n OPERATOR: 'MACHINE.OPERATORS.OPERATOR',\n OPERATOR_TYPE: 'MACHINE.OPERATOR_TYPES.OPERATOR_TYPE',\n PHYSICAL_QUANTITY: 'BMSCONFIG.PHYSICAL_QUANTITIES.PHYSICAL_QUANTITY',\n RAW_MATERIAL: 'TEXTILE_DATA.YARN_TYPE.RAW_MATERIAL',\n NO_COMPANY_OWNED_WEAVE_STRUCTURE: 'TEXTILE_DATA.WEAVE_STRUCTURE.NO_COMPANY_OWNED_WEAVE_STRUCTURE',\n PRODUCTION_SCHEDULE_PATH: 'PRODUCTION_ORDER.PRODUCTION_SCHEDULE_PATHS',\n START_DENT: 'PRODUCTION_ORDER.START_DENT',\n WIDTH_IN_DENTS: 'PRODUCTION_ORDER.WIDTH_IN_DENTS',\n REED_DENSITY: 'GENERAL.ADVANCED_SEARCH.REED_DENSITY',\n PICK_DENSITY: 'GENERAL.ADVANCED_SEARCH.PICK_DENSITY',\n JACQUARD_TYPE: 'MACHINE.DETAILS.TYPE_JACQUARD',\n NUM_CREEL_POSITIONS: 'MACHINE.DETAILS.NR_CREEL_POSITIONS',\n MACHINE_WIDTH: 'GENERAL.WIDTH_IN_DENTS',\n WEFT_SELECTION: 'TEXTILE_DATA.MACHINE_QUALITY.WEFT_SELECTION.TITLE',\n WEFT_SELECTION_COLUMNS: 'TEXTILE_DATA.MACHINE_QUALITY.WEFT_SELECTION.TITLE',\n HEIGHT_IN_PICKS: 'GENERAL.DIMENSIONS.HEIGHT',\n IMAGE_PROCESSING: 'GENERAL.IMAGE_PROCESSING',\n TUFT_PRODUCT: 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT',\n PRODUCTION_SCHEDULE: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n SORT_COLUMN: 'AGGRID.SORT_COLUMN',\n PRODUCTION_ORDER_TUFT: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n WEFT_COLORED_YARN_SET: 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET'\n };\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public getErrorMessageFromBackendError(backendErrorContext: BackendErrorContext): Observable {\n let result: Observable;\n\n switch (Number(BackendErrorCodeEnum[backendErrorContext.errorCode])) {\n case BackendErrorCodeEnum.NOT_FOUND:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.NOT_FOUND', backendErrorContext);\n break;\n case BackendErrorCodeEnum.DUPLICATE_CONFIGURATION:\n result = this.getErrorMessageForDuplicateConfigurationBackendError(backendErrorContext);\n break;\n case BackendErrorCodeEnum.DUPLICATE_NAME:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.DUPLICATE_NAME', backendErrorContext);\n break;\n case BackendErrorCodeEnum.LINKED_ENTITIES:\n result = this.getErrorMessageForLinkedEntitiesBackendError(backendErrorContext);\n break;\n case BackendErrorCodeEnum.OVERLAP_REGIMES_OR_SHIFTS:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.OVERLAP_REGIMES_OR_SHIFTS', backendErrorContext);\n break;\n case BackendErrorCodeEnum.RECOLOR_MISMATCH:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.RECOLOR_MISMATCH', backendErrorContext);\n break;\n case BackendErrorCodeEnum.MISSING_COLORS:\n result = this.getErrorMessageForMissingColorsBackendError(backendErrorContext);\n break;\n case BackendErrorCodeEnum.ALTERNATIVES:\n result = this.translate.get('GENERAL.ERRORS.BACKEND.ALTERNATIVES');\n break;\n case BackendErrorCodeEnum.LOOM_MAP_CHORE_MISMATCH:\n result = this.getErrorMessageForLoomMapWithMissingPatterns(backendErrorContext);\n break;\n case BackendErrorCodeEnum.INVALID_NAME:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.INVALID_NAME', backendErrorContext);\n break;\n case BackendErrorCodeEnum.INVALID_VALUE:\n result = this.getErrorMessageForInvalidValue(backendErrorContext);\n break;\n case BackendErrorCodeEnum.OVERLAPPING_ENTITIES:\n result = this.getErrorMessageForOverlappingEntities(backendErrorContext);\n break;\n case BackendErrorCodeEnum.MISSING_PROPERTY:\n result = this.getErrorMessageForBackendErrorAndTranslationKey('GENERAL.ERRORS.BACKEND.MISSING_PROPERTY', backendErrorContext);\n break;\n case BackendErrorCodeEnum.MISMATCH_PROPERTY:\n result = this.getErrorMessageForMisMatchProperty(backendErrorContext);\n break;\n case BackendErrorCodeEnum.DESIGN_MISSING_COLORS:\n result = this.getErrorMessageForMissingColorsOnDesign(backendErrorContext);\n break;\n case BackendErrorCodeEnum.DESIGN_INVALID_WEFT_SELECTION_CODES:\n result = this.getErrorMessageForInvalidWeftSelectionCodesOnDesign(backendErrorContext);\n break;\n case BackendErrorCodeEnum.EXCEPTIONS_LIST:\n result = forkJoin(backendErrorContext.list.map((backendErrorSubContext: BackendErrorContext) => this.getErrorMessageFromBackendError(backendErrorSubContext))).pipe(\n map((results: string[]) => '

' + results.join('

') + '

')\n );\n break;\n default:\n result = throwError(() => backendErrorContext);\n }\n return result;\n }\n\n private getErrorMessageForBackendErrorAndTranslationKey(translationKey: string, backendErrorContext: BackendErrorContext): Observable {\n return this.translate.get(this.getTranslationKeyForEntity(backendErrorContext.entity), {count: 1}).pipe(\n mergeMap((translatedEntity: string) => {\n return this.translate\n .get(translationKey, {\n entity: startCase(translatedEntity),\n entityName: backendErrorContext.entityName,\n entityNames: join(backendErrorContext.entityNames ?? backendErrorContext.linkedEntityNames, ', ')\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForLoomMapWithMissingPatterns(backendErrorContext: BackendErrorContext): Observable {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.LOOM_MAP_MISSING_PATTERN', {\n patternId: backendErrorContext.entityNames[0],\n patternType: backendErrorContext.entityNames[1],\n originalChores: backendErrorContext.entityNames[2],\n targetChores: backendErrorContext.entityNames[3]\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n }\n\n private getErrorMessageForInvalidValue(backendErrorContext: BackendErrorContext): Observable {\n return this.translate.get(this.getTranslationKeyForEntity(backendErrorContext.linkedEntity), {count: 1}).pipe(\n mergeMap((translatedEntity: string) => {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.INVALID_VALUE', {\n entityName: startCase(translatedEntity),\n givenValue: backendErrorContext.linkedEntityNames[0],\n range: `${backendErrorContext.linkedEntityNames[1]}, ${backendErrorContext.linkedEntityNames[2]}`\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForOverlappingEntities(backendErrorContext: BackendErrorContext): Observable {\n const entityTranslationKey = this.getTranslationKeyForEntity(backendErrorContext.entity);\n const linkedEntityTranslationKey = defaultTo(this.getTranslationKeyForEntity(backendErrorContext.linkedEntity), '');\n\n return this.translate.get([entityTranslationKey, linkedEntityTranslationKey], {count: 1}).pipe(\n mergeMap((translations: Record) => {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.OVERLAPPING_ENTITIES', {\n entity: startCase(translations[entityTranslationKey]),\n linkedEntity: lowerCase(translations[linkedEntityTranslationKey]),\n linkedEntityNames: join(backendErrorContext.linkedEntityNames, ', ')\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForDuplicateConfigurationBackendError(backendErrorContext: BackendErrorContext): Observable {\n return this.translate.get(`TEXTILE_DATA.${backendErrorContext.entity}.${backendErrorContext.entity}`, {count: 1}).pipe(\n mergeMap((translatedEntity: string) => {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.DUPLICATE_CONFIGURATION', {\n entity: startCase(translatedEntity),\n similarEntityName: backendErrorContext.similarEntityName\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForLinkedEntitiesBackendError(backendErrorContext: BackendErrorContext): Observable {\n const entityTranslationKey = this.getTranslationKeyForEntity(backendErrorContext.entity);\n const linkedEntityTranslationKey = defaultTo(this.getTranslationKeyForEntity(backendErrorContext.linkedEntity), '');\n\n return this.translate.get([entityTranslationKey, linkedEntityTranslationKey], {count: 1}).pipe(\n mergeMap((translations: Record) => {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.LINKED_ENTITIES', {\n entity: startCase(translations[entityTranslationKey]),\n entityName: backendErrorContext.entityName,\n linkedEntity: lowerCase(translations[linkedEntityTranslationKey]),\n linkedEntityNames: join(backendErrorContext.linkedEntityNames, ', ')\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForMisMatchProperty(backendErrorContext: BackendErrorContext): Observable {\n return this.translate.get(this.getTranslationKeyForEntity(backendErrorContext.linkedEntity), {count: 1}).pipe(\n mergeMap((translatedEntity: string) => {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.MISMATCH_PROPERTY', {\n entityName: startCase(translatedEntity),\n givenValue: backendErrorContext.linkedEntityNames[0],\n expectedValue: backendErrorContext.linkedEntityNames[1]\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n })\n );\n }\n\n private getErrorMessageForMissingColorsOnDesign(backendErrorContext: BackendErrorContext): Observable {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.DESIGN_MISSING_COLORS', {\n design: backendErrorContext.linkedEntityNames[0],\n patterns: backendErrorContext.linkedEntityNames[1]\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n }\n\n private getErrorMessageForInvalidWeftSelectionCodesOnDesign(backendErrorContext: BackendErrorContext): Observable {\n if (AssertionUtils.isNullOrUndefined(backendErrorContext.linkedEntityNames)) {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.INVALID_WEFT_SELECTION_CODES', {\n codes: join(backendErrorContext.entityNames, ', ')\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n } else {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.DESIGN_INVALID_WEFT_SELECTION_CODES', {\n design: backendErrorContext.linkedEntityNames[0],\n codes: backendErrorContext.linkedEntityNames[1]\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n }\n }\n\n private getErrorMessageForMissingColorsBackendError(backendErrorContext: BackendErrorContext): Observable {\n return this.translate\n .get('GENERAL.ERRORS.BACKEND.MISSING_COLORS', {\n count: size(backendErrorContext.entityNames),\n colorNumbers: backendErrorContext.entityNames\n })\n .pipe(map((translatedErrorMessage: string) => translatedErrorMessage));\n }\n\n private getTranslationKeyForEntity(entity: Entity): string {\n const translationKey = ErrorMessageHelper.ENTITY_TRANSLATION_KEYS[entity];\n if (!translationKey) {\n throw new Error(`No translation key found for entity ${entity}`);\n }\n return translationKey;\n }\n}\n","import {isNil} from 'lodash-es';\n\nconst placeholderSeparators = {\n POINT: '.',\n COMMA: ',',\n DASH: '-',\n UNDERSCORE: '_',\n SPACE: ' ',\n VERTICAL_BAR: '|',\n NO_SEPARATOR: '',\n TAB: ' '\n};\n\nexport function getDisplayValueForPlaceholderSeparator(placeholderSeparator: string): string {\n return !isNil(placeholderSeparators[placeholderSeparator]) ? placeholderSeparators[placeholderSeparator] : placeholderSeparator;\n}\n","import {Inject, Injectable, Type} from '@angular/core';\nimport {Routes} from '@angular/router';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {\n AssertionUtils,\n BaseComponent,\n ContentSwitcherDialogService,\n ContentSwitcherEntry,\n CrudOverviewButtonConfig,\n CrudOverviewButtonConfigs,\n GridButtonClickedEvent,\n NavigationHelperPrototypeService,\n PrototypeRouteUtils\n} from '@vdw/angular-component-library';\nimport {cloneDeep} from 'lodash-es';\nimport {Subject, takeUntil} from 'rxjs';\nimport {PageTypeEnum} from '../navigation-helper/page-type.enum';\nimport {AddComponentInput} from '../routing/add-component-input.interface';\nimport {NavigationUtils} from '../routing/navigation-utils';\nimport {RouteData} from '../routing/route-data.interface';\nimport {CrudActions} from './crud-actions.interface';\n\n@Injectable({providedIn: 'root'})\nexport class GridActionButtonsHelper extends BaseComponent {\n private deleteButton: CrudOverviewButtonConfig = {title: 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.DELETE', icon: 'solid-delete', withTooltip: true, onlyEnabledOnSingleRowSelection: true};\n private editButton: CrudOverviewButtonConfig = {title: 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.EDIT', icon: 'solid-edit', onlyEnabledOnSingleRowSelection: true, withTooltip: true};\n private duplicateButton: CrudOverviewButtonConfig = {\n title: 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.DUPLICATE',\n icon: 'solid-file-copy',\n onlyEnabledOnSingleRowSelection: true,\n withTooltip: true\n };\n\n private currentSubscription: ProfileSubscription;\n\n public constructor(\n @Inject(AUTHENTICATION) private authentication: Authentication,\n private readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public getActionButtonsForGridSelection(crudActions: CrudActions): CrudOverviewButtonConfig[] {\n let actionButtons: CrudOverviewButtonConfig[] = [];\n if (this.hasPermissionForAction(crudActions?.requiredPermissionToEdit)) {\n if (!AssertionUtils.isNullOrUndefined(crudActions?.withEdit)) {\n this.editButton.onClick = crudActions.withEdit;\n actionButtons.push(this.editButton);\n }\n\n if (!AssertionUtils.isNullOrUndefined(crudActions?.withDuplicate)) {\n this.duplicateButton.onClick = crudActions.withDuplicate;\n actionButtons.push(this.duplicateButton);\n }\n\n if (!AssertionUtils.isNullOrUndefined(crudActions?.withDelete)) {\n this.deleteButton.onClick = crudActions.withDelete;\n if (crudActions.allowDeleteMultiple) {\n this.deleteButton.onlyEnabledOnSingleRowSelection = false;\n }\n actionButtons.push(this.deleteButton);\n }\n\n return cloneDeep(actionButtons);\n } else {\n return actionButtons;\n }\n }\n\n public getActionButtonsWithRouting(routes: Routes, editPermission: Permission, entityName: string, withDelete: (event: GridButtonClickedEvent) => void): CrudOverviewButtonConfigs {\n const editRoute = PrototypeRouteUtils.getPage(routes, 'edit/:id');\n const duplicateRoute = PrototypeRouteUtils.getPage(routes, 'add/:id');\n const rowActionsComplete = new Subject();\n\n return {\n crudOverviewButtonConfigs: this.getActionButtonsForGridSelection({\n withDelete: withDelete,\n requiredPermissionToEdit: editPermission,\n withEdit: ({rowNode}: GridButtonClickedEvent) =>\n this.contentSwitcher.navigateForward(\n {key: NavigationUtils.getAbsolutePath(editRoute.data.id), component: editRoute.component, routeData: editRoute.data as RouteData, data: {routeId: rowNode.data.id}, entityName: entityName},\n {}\n ),\n withDuplicate: ({rowNode}: GridButtonClickedEvent) =>\n this.contentSwitcher.navigateForward(\n {\n key: NavigationUtils.getAbsolutePath(duplicateRoute.data.id),\n component: duplicateRoute.component,\n routeData: duplicateRoute.data as RouteData,\n data: {routeId: rowNode.data.id},\n entityName: entityName\n },\n {}\n )\n }),\n rowActionsComplete: rowActionsComplete\n } as CrudOverviewButtonConfigs;\n }\n\n public getActionButtonsWithNewRouting(\n addComponent: Type,\n editPermission: Permission,\n withDelete: (event: GridButtonClickedEvent) => void,\n nextComponentModule?: Type\n ): CrudOverviewButtonConfigs {\n const rowActionsComplete = new Subject();\n\n return {\n crudOverviewButtonConfigs: this.getActionButtonsForGridSelection({\n withDelete: withDelete,\n requiredPermissionToEdit: editPermission,\n withEdit: ({rowNode}: GridButtonClickedEvent) =>\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {component: addComponent, module: nextComponentModule, componentInputs: {pageType: PageTypeEnum.EDIT, itemId: rowNode.data.id, canShowHeader: true} as AddComponentInput}\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((data: any) => rowActionsComplete.next(data)),\n withDuplicate: ({rowNode}: GridButtonClickedEvent) =>\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: addComponent,\n module: nextComponentModule,\n componentInputs: {pageType: PageTypeEnum.DUPLICATE, itemId: rowNode.data.id, canShowHeader: true} as AddComponentInput\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((data: any) => rowActionsComplete.next(data))\n }),\n rowActionsComplete: rowActionsComplete\n } as CrudOverviewButtonConfigs;\n }\n\n public getActionButtonsWithEntries(\n editEntry: ContentSwitcherEntry,\n duplicateEntry: ContentSwitcherEntry,\n editPermission: Permission,\n withDelete: (event: GridButtonClickedEvent) => void\n ): CrudOverviewButtonConfigs {\n const rowActionsComplete = new Subject();\n\n return {\n crudOverviewButtonConfigs: this.getActionButtonsForGridSelection({\n withDelete: withDelete,\n requiredPermissionToEdit: editPermission,\n withEdit: ({rowNode}: GridButtonClickedEvent) =>\n this.contentSwitcher.navigateForward({key: editEntry.key, component: editEntry.component, routeData: editEntry.data as RouteData, data: {routeId: rowNode.data.id}}, {})\n }),\n rowActionsComplete: rowActionsComplete\n };\n }\n\n private hasPermissionForAction(permission: Permission): boolean {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n return this.currentSubscription?.hasPermission(permission);\n }\n}\n","export class BitmapMetadata {\n public bitsPerPixel = 0;\n}\n","import {isEqual, isNil, size, sumBy} from 'lodash-es';\nimport {BitmapMetadata} from './bitmap-metadata.model';\n\n// This class is based on the Bitmap format documentation located at\n// https://en.wikipedia.org/wiki/BMP_file_format\n\nexport class BitmapMetadataReader {\n private static INDEX_FIELD_BITS_PER_PIXEL = 28;\n private static SIZE_FIELD_BITS_PER_PIXEL = 2;\n\n private static INDEX_FIELD_DIB_HEADER_BYTES_COUNT = 14;\n private static SIZE_FIELD_DIB_HEADER_BYTES_COUNT = 4;\n\n public static readMetadataFromBase64EncodedString(base64decodedString: string): BitmapMetadata {\n if (isNil(base64decodedString)) {\n return new BitmapMetadata();\n }\n\n const byteCharacters = atob(base64decodedString);\n const bytes: number[] = [];\n\n let maxNumberOfBytesToDecode = this.INDEX_FIELD_DIB_HEADER_BYTES_COUNT + this.SIZE_FIELD_DIB_HEADER_BYTES_COUNT;\n\n for (let i = 0; i < byteCharacters.length && i < maxNumberOfBytesToDecode; i++) {\n bytes.push(byteCharacters.charCodeAt(i));\n\n const isDIBHeaderValueRead = isEqual(i, this.INDEX_FIELD_DIB_HEADER_BYTES_COUNT + this.SIZE_FIELD_DIB_HEADER_BYTES_COUNT - 1);\n if (isDIBHeaderValueRead) {\n maxNumberOfBytesToDecode = this.INDEX_FIELD_DIB_HEADER_BYTES_COUNT + this.getDIBHeaderBytesCount(bytes);\n }\n }\n return this.readMetadata(bytes);\n }\n\n public static readMetadata(bytes: number[]): BitmapMetadata {\n const metadata = new BitmapMetadata();\n\n metadata.bitsPerPixel = this.getBitsPerPixel(bytes);\n\n return metadata;\n }\n\n private static getDIBHeaderBytesCount(bytes: number[]): number {\n return this.getNumericValue(bytes, this.INDEX_FIELD_DIB_HEADER_BYTES_COUNT, this.SIZE_FIELD_DIB_HEADER_BYTES_COUNT);\n }\n\n private static getBitsPerPixel(bytes: number[]): number {\n return this.getNumericValue(bytes, this.INDEX_FIELD_BITS_PER_PIXEL, this.SIZE_FIELD_BITS_PER_PIXEL);\n }\n\n private static getNumericValue(bytes: number[], start: number, numberOfBytes: number): number {\n if (size(bytes) < start + numberOfBytes) {\n return 0;\n }\n\n const valueBytes = bytes.slice(start, start + numberOfBytes);\n let power = 0;\n return sumBy(valueBytes, (byte: number) => byte * Math.pow(256, power++));\n }\n}\n","import {BlobUtils, DialogBuilderFactoryService, DialogType, TranslateService} from '@vdw/angular-component-library';\nimport {first, forEach, isEmpty, isEqual, isNil, join, last, some} from 'lodash-es';\nimport {Subject, Subscription} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {BitmapMetadata} from './bitmap-metadata/bitmap-metadata.model';\nimport {BitmapMetadataReader} from './bitmap-metadata/bitmap-metadata.reader';\n\nexport abstract class ImageUploadHelper {\n protected maxFileSizeAllowedInMb = 100;\n protected validBitmapBitsPerPixelValues: [number] = [8];\n protected imageSubject: Subject<{error: string; image: S}> = new Subject();\n protected _unSubscribeOnViewDestroy: Subject;\n protected subscriptionForImageSubject: Subscription;\n\n protected abstract dialogTitle: string;\n\n protected constructor(\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {}\n\n public set unSubscribeOnViewDestroy(unSubscribeOnViewDestroy: Subject) {\n this._unSubscribeOnViewDestroy = unSubscribeOnViewDestroy;\n }\n\n public uploadFilesWithCustomResultAction(files: File[], fileType: T[], resultAction: (image: S, localFileCopy?: File[]) => void): void {\n this.removeSubscriptionForImageSubject();\n\n const localFilesCopy: File[] = [];\n localFilesCopy.push(...files);\n\n this.subscriptionForImageSubject = this.imageSubject.pipe(takeUntil(this._unSubscribeOnViewDestroy)).subscribe((result: {error: string; image: S}) => {\n if (!isNil(result.error)) {\n this.displayAlertDialog(result.error);\n }\n\n resultAction(result.image, localFilesCopy);\n });\n\n this.processFileChange(localFilesCopy, fileType);\n }\n\n protected processFileChange(files: File[], allowedTypes: T[]): void {\n if (!isEmpty(files)) {\n const pvdFiles = files.filter((file: File) => file.name.includes('.pvd'));\n\n if (files.length === pvdFiles.length) {\n this.imageSubject.next({\n error: 'GENERAL.WARNINGS.PVD_PAIRED_WITH_BMP',\n image: null\n });\n } else {\n forEach(files, (file: File) => {\n const filePathParts: string[] = file.name.split('.');\n const fileExtension: string = last(filePathParts).toLowerCase();\n const fileName: string = first(filePathParts);\n const fileType: T = this.getFileTypeFromAllowedTypes(fileExtension, allowedTypes);\n if (isNil(fileType)) {\n this.imageSubject.next({\n error: this.translate.instant('GENERAL.WARNINGS.WRONG_FILE_FORMAT', {\n name: fileName,\n fileType: join(allowedTypes, ', ')\n }),\n image: null\n });\n } else if (this.getFileSize(file) > this.maxFileSizeAllowedInMb) {\n this.imageSubject.next({\n error: this.translate.instant('GENERAL.WARNINGS.FILE_TOO_LARGE', {\n name: fileName,\n maxSize: this.maxFileSizeAllowedInMb\n }),\n image: null\n });\n } else {\n this.processFile(fileName, file, fileType);\n }\n });\n }\n } else {\n this.imageSubject.next({error: 'GENERAL.WARNINGS.NO_FILES_FOUND', image: null});\n }\n }\n\n protected displayAlertDialog(message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.dialogTitle,\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n protected onImageReaderLoadForFormatLocalValidation(fileName: string, file: File, fileType: T): (imageArrayBuffer: ArrayBuffer) => void {\n return (imageArrayBuffer: ArrayBuffer): void => {\n if (!this.isBitmapFormatValid(imageArrayBuffer)) {\n this.imageSubject.next({error: 'GENERAL.WARNINGS.BITMAP_FORMAT_NOT_SUPPORTED_MESSAGE', image: null});\n return;\n }\n\n BlobUtils.blobToImageData(file).then(this.onImageReaderLoad(fileName, file, fileType));\n };\n }\n\n protected removeSubscriptionForImageSubject(): void {\n if (!isNil(this.subscriptionForImageSubject)) {\n this.subscriptionForImageSubject.unsubscribe();\n }\n }\n\n private isBitmapFormatValid(imageData: ArrayBuffer): boolean {\n if (isNil(imageData)) {\n return false;\n }\n\n const bytes: number[] = [];\n const numberOfBytesToUseForTheHeader = 100;\n const firstBytesOfBufferForCreatingBytesArrayToWorkWith = new Int8Array(imageData.slice(0, numberOfBytesToUseForTheHeader));\n firstBytesOfBufferForCreatingBytesArrayToWorkWith.forEach((value: number) => bytes.push(value));\n\n const metadata: BitmapMetadata = BitmapMetadataReader.readMetadata(bytes);\n return some(this.validBitmapBitsPerPixelValues, (value: number) => isEqual(value, metadata.bitsPerPixel));\n }\n\n private onImageReaderLoad(fileName: string, file: File, fileType: T): (imageData: string) => void {\n return (imageData: string): void => {\n const drawingImage: HTMLImageElement = new Image();\n drawingImage.src = imageData;\n drawingImage.id = fileName;\n drawingImage.onload = this.onImageLoad(drawingImage, file, fileType);\n };\n }\n\n private getFileSize(file: File): number {\n return file.size / Math.pow(1024, 2);\n }\n\n protected abstract getFileTypeFromAllowedTypes(fileExtension: string, allowedTypes: T[]): T;\n\n protected abstract processFile(fileName: string, file: File, fileType: T): void;\n\n protected abstract onImageLoad(image: HTMLImageElement, file: File, fileType: T): () => void;\n}\n","import {isEqual} from 'lodash-es';\n\nexport function intComparator(valueA: any, valueB: any): number {\n let result: number;\n\n valueA ??= 0;\n valueB ??= 0;\n\n if (isEqual(valueA, valueB)) {\n result = 0;\n } else if (valueA > valueB) {\n result = 1;\n } else {\n result = -1;\n }\n\n return result;\n}\n","import {intersection, isEmpty, isEqual, isNil} from 'lodash-es';\n\nexport function isClickOutsideGivenElements(element: HTMLElement, elementsClasses: string[] = []): boolean {\n let result = true;\n while (!isEqual(element.tagName, 'BODY')) {\n if (!isEmpty(intersection(element.classList, elementsClasses))) {\n result = false;\n break;\n }\n element = element.parentElement;\n\n if (isNil(element)) {\n result = false;\n break;\n }\n }\n return result;\n}\n","import {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {Translations} from '@domain/textile-data/translations';\nimport {NavigationId} from './routing/navigation-id.enum';\nimport {NavigationUtils} from './routing/navigation-utils';\n\nexport class LastModifiedCardUtils {\n private static productionOrderTranslationKey = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n private static dataUnitSetupTranslationKey = 'BMSCONFIG.DATA_UNIT_SETUP.DATA_UNIT_SETUP';\n private static finishingTranslationKey = 'TEXTILE_DATA.FINISHING.FINISHING';\n private static DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY = 'BMSCONFIG.DEVICE_TEMPLATES.COUNTERS.COUNTERS';\n private static DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY = 'BMSCONFIG.DEVICE_TEMPLATES.CONFIGURATION.CONFIGURATIONS';\n\n public static getPageUrls(type: string): PageUrls {\n return {\n machineQuality: {\n add: RouteUtils.paths.texStyle.machineQuality.addMachineQuality.absolutePath,\n edit: RouteUtils.paths.texStyle.machineQuality.editMachineQuality.absolutePath,\n overview: RouteUtils.paths.texStyle.machineQuality.absolutePath,\n duplicate: RouteUtils.paths.texStyle.machineQuality.duplicateMachineQuality.absolutePath\n },\n qualityFinishing: {\n add: RouteUtils.paths.texStyle.machineQuality.addFinishing.absolutePath,\n edit: '',\n duplicate: ''\n },\n yarnType: {\n add: RouteUtils.paths.texStyle.yarn.addYarn.absolutePath,\n edit: RouteUtils.paths.texStyle.yarn.editYarn.absolutePath,\n overview: RouteUtils.paths.texStyle.yarn.absolutePath,\n duplicate: RouteUtils.paths.texStyle.yarn.duplicateYarn.absolutePath\n },\n coloredYarn: {\n add: RouteUtils.paths.texStyle.coloredYarn.addColoredYarn.absolutePath,\n edit: RouteUtils.paths.texStyle.coloredYarn.editColoredYarn.absolutePath,\n overview: RouteUtils.paths.texStyle.coloredYarn.absolutePath,\n duplicate: RouteUtils.paths.texStyle.coloredYarn.duplicateColoredYarn.absolutePath\n },\n finishingTemplate: {\n add: RouteUtils.paths.texStyle.finishingTemplate.addFinishingTemplate.absolutePath,\n edit: RouteUtils.paths.texStyle.finishingTemplate.editFinishingTemplate.absolutePath,\n overview: RouteUtils.paths.texStyle.finishingTemplate.absolutePath,\n duplicate: RouteUtils.paths.texStyle.finishingTemplate.duplicateFinishingTemplate.absolutePath\n },\n color: {\n add: RouteUtils.paths.texStyle.color.addColor.absolutePath,\n edit: RouteUtils.paths.texStyle.color.editColor.absolutePath,\n overview: RouteUtils.paths.texStyle.color.absolutePath,\n duplicate: RouteUtils.paths.texStyle.color.duplicateColor.absolutePath,\n settings: RouteUtils.paths.texStyle.color.colorSettings.absolutePath\n },\n creel: {\n add: RouteUtils.paths.texStyle.creel.addCreel.absolutePath,\n edit: RouteUtils.paths.texStyle.creel.editCreel.absolutePath,\n overview: RouteUtils.paths.texStyle.creel.absolutePath,\n duplicate: RouteUtils.paths.texStyle.creel.duplicateCreel.absolutePath,\n settings: RouteUtils.paths.texStyle.creel.creelSettings.absolutePath\n },\n weaveStructure: {\n add: RouteUtils.paths.texStyle.weaveStructure.addWeaveStructure.absolutePath,\n edit: RouteUtils.paths.texStyle.weaveStructure.editWeaveStructure.absolutePath,\n overview: RouteUtils.paths.texStyle.weaveStructure.overviewWeaveStructure.absolutePath,\n duplicate: RouteUtils.paths.texStyle.weaveStructure.duplicateWeaveStructure.absolutePath\n },\n manageWeaveStructure: {\n add: RouteUtils.paths.texStyle.weaveStructure.manageAddWeaveStructure.absolutePath,\n overview: RouteUtils.paths.texStyle.weaveStructure.manageOverviewWeaveStructure.absolutePath,\n duplicate: RouteUtils.paths.texStyle.weaveStructure.duplicateWeaveStructure.absolutePath\n },\n groupedWeaveStructure: {\n overview: RouteUtils.paths.texStyle.groupedWeaveStructure.overviewGroupedWeaveStructure.absolutePath,\n add: RouteUtils.paths.texStyle.groupedWeaveStructure.addGroupedWeaveStructure.absolutePath,\n edit: RouteUtils.paths.texStyle.groupedWeaveStructure.editGroupedWeaveStructure.absolutePath,\n duplicate: RouteUtils.paths.texStyle.groupedWeaveStructure.duplicateGroupedWeaveStructure.absolutePath\n },\n weavePattern: {\n add: '',\n edit: ''\n },\n colorSet: {\n add: RouteUtils.paths.texStyle.colorSet.addColorSet.absolutePath,\n edit: RouteUtils.paths.texStyle.colorSet.editColorSet.absolutePath,\n overview: RouteUtils.paths.texStyle.colorSet.absolutePath,\n duplicate: RouteUtils.paths.texStyle.colorSet.duplicateColorSet.absolutePath,\n settings: RouteUtils.paths.texStyle.colorSet.colorSetSettings.absolutePath\n },\n yarnSet: {\n add: RouteUtils.paths.texStyle.yarnSet.addYarnSet.absolutePath,\n edit: RouteUtils.paths.texStyle.yarnSet.editYarnSet.absolutePath,\n duplicate: RouteUtils.paths.texStyle.yarnSet.duplicateYarnSet.absolutePath,\n overview: RouteUtils.paths.texStyle.yarnSet.absolutePath,\n settings: RouteUtils.paths.texStyle.yarnSet.yarnSetSettings.absolutePath\n },\n coloredYarnSet: {\n overview: RouteUtils.paths.texStyle.coloredYarnSet.absolutePath,\n add: RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet.absolutePath,\n edit: RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet.absolutePath,\n duplicate: RouteUtils.paths.texStyle.coloredYarnSet.duplicateColoredYarnSet.absolutePath\n },\n weftColoredYarnSet: {\n overview: RouteUtils.paths.texStyle.weftColoredYarnSet.absolutePath,\n add: RouteUtils.paths.texStyle.weftColoredYarnSet.addWeftColoredYarnSet.absolutePath,\n edit: RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet.absolutePath,\n duplicate: RouteUtils.paths.texStyle.weftColoredYarnSet.duplicateWeftColoredYarnSet.absolutePath\n },\n companyWeaveStructure: {\n overview: RouteUtils.paths.texStyle.companyWeaveStructure.absolutePath,\n add: '',\n edit: ''\n },\n productionSchedule: {\n overview: RouteUtils.paths.texFab.productionOrder.absolutePath,\n add: RouteUtils.paths.texFab.productionOrder.addProductionOrder.absolutePath,\n edit: RouteUtils.paths.texFab.productionOrder.editProductionOrder.absolutePath,\n duplicate: RouteUtils.paths.texFab.productionOrder.duplicateProductionOrder.absolutePath,\n settings: RouteUtils.paths.texFab.productionOrder.settings.absolutePath\n },\n productionScheduleNew: {\n overview: RouteUtils.paths.texFab.productionOrder.absolutePath,\n add: RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView.absolutePath,\n edit: RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView.absolutePath,\n duplicate: RouteUtils.paths.texFab.productionOrder.duplicateProductionOrderNewView.absolutePath,\n settings: RouteUtils.paths.texFab.productionOrder.settings.absolutePath\n },\n productionOrderWeaving: {\n overview: RouteUtils.paths.texFab.weaving.productionOrder.absolutePath,\n add: RouteUtils.paths.texFab.weaving.addProductionOrder.absolutePath,\n edit: RouteUtils.paths.texFab.weaving.editProductionOrder.absolutePath,\n duplicate: RouteUtils.paths.texFab.weaving.duplicateProductionOrder.absolutePath,\n settings: RouteUtils.paths.texFab.weaving.settings.absolutePath\n },\n tuftProductionOrder: {\n overview: RouteUtils.paths.texFab.tufting.productionOrder.absolutePath,\n add: RouteUtils.paths.texFab.tufting.addProductionOrder.absolutePath,\n edit: RouteUtils.paths.texFab.tufting.editProductionOrder.absolutePath,\n duplicate: RouteUtils.paths.texFab.tufting.duplicateProductionOrder.absolutePath,\n settings: RouteUtils.paths.texFab.tufting.settings.absolutePath\n },\n plasticProductionOrder: {\n overview: RouteUtils.paths.texFab.plastic.productionOrder.absolutePath,\n add: RouteUtils.paths.texFab.plastic.addProductionOrder.absolutePath,\n edit: RouteUtils.paths.texFab.plastic.editProductionOrder.absolutePath,\n duplicate: RouteUtils.paths.texFab.plastic.duplicateProductionOrder.absolutePath\n },\n customer: {\n overview: RouteUtils.paths.texFab.customer.absolutePath,\n add: RouteUtils.paths.texFab.customer.addCustomer.absolutePath,\n edit: RouteUtils.paths.texFab.customer.editCustomer.absolutePath\n },\n article: {\n overview: RouteUtils.paths.texFab.article.absolutePath,\n add: RouteUtils.paths.texFab.article.addArticle.absolutePath,\n edit: RouteUtils.paths.texFab.article.editArticle.absolutePath,\n duplicate: RouteUtils.paths.texFab.article.duplicateArticle.absolutePath\n },\n salesOrder: {\n overview: RouteUtils.paths.texFab.salesOrder.absolutePath,\n add: RouteUtils.paths.texFab.salesOrder.addSalesOrder.absolutePath,\n edit: RouteUtils.paths.texFab.salesOrder.editSalesOrder.absolutePath,\n duplicate: RouteUtils.paths.texFab.salesOrder.duplicateSalesOrder.absolutePath\n },\n weaveProduct: {\n overview: RouteUtils.paths.texStyle.weaveProduct.absolutePath,\n add: RouteUtils.paths.texStyle.weaveProduct.addWeaveProduct.absolutePath,\n edit: RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct.absolutePath,\n duplicate: RouteUtils.paths.texStyle.weaveProduct.duplicateWeaveProduct.absolutePath\n },\n productConfiguration: {\n overview: RouteUtils.paths.texEdit.productConfiguration.absolutePath,\n add: RouteUtils.paths.texEdit.addProductConfiguration.absolutePath,\n edit: RouteUtils.paths.texEdit.editProductConfiguration.absolutePath\n },\n dataUnitSetupCatalog: {\n overview: RouteUtils.paths.settings.dataUnitSetupCatalog.absolutePath,\n add: RouteUtils.paths.settings.dataUnitSetupCatalog.addDataUnitSetupCatalog.absolutePath,\n edit: RouteUtils.paths.settings.dataUnitSetupCatalog.editDataUnitSetupCatalog.absolutePath,\n duplicate: RouteUtils.paths.settings.dataUnitSetupCatalog.duplicateDataUnitSetupCatalog.absolutePath\n },\n dataUnitSetup: {\n overview: RouteUtils.paths.settings.dataUnitSetup.absolutePath,\n add: RouteUtils.paths.settings.dataUnitSetup.addDataUnitSetup.absolutePath,\n edit: RouteUtils.paths.settings.dataUnitSetup.editDataUnitSetup.absolutePath\n },\n deviceTemplateCatalog: {\n overview: RouteUtils.paths.settings.deviceTemplateCatalog.absolutePath,\n add: RouteUtils.paths.settings.deviceTemplateCatalog.addDeviceTemplateCatalog.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplateCatalog.editDeviceTemplateCatalog.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplateCatalog.duplicateDeviceTemplateCatalog.absolutePath\n },\n deviceTemplateCounterCatalog: {\n add: RouteUtils.paths.settings.deviceTemplateCatalog.addCounterCatalog.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplateCatalog.editCounterCatalog.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplateCatalog.duplicateCounterCatalog.absolutePath\n },\n deviceTemplateConfigurationCatalog: {\n add: RouteUtils.paths.settings.deviceTemplateCatalog.addConfigurationCatalog.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplateCatalog.editConfigurationCatalog.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplateCatalog.duplicateConfigurationCatalog.absolutePath\n },\n deviceTemplate: {\n overview: RouteUtils.paths.settings.deviceTemplate.absolutePath,\n add: RouteUtils.paths.settings.deviceTemplate.addDeviceTemplate.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplate.editDeviceTemplate.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplate.duplicateDeviceTemplate.absolutePath\n },\n deviceTemplateCounter: {\n add: RouteUtils.paths.settings.deviceTemplate.addCounter.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplate.editCounter.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplate.duplicateCounter.absolutePath\n },\n deviceTemplateConfiguration: {\n add: RouteUtils.paths.settings.deviceTemplate.addConfiguration.absolutePath,\n edit: RouteUtils.paths.settings.deviceTemplate.editConfiguration.absolutePath,\n duplicate: RouteUtils.paths.settings.deviceTemplate.duplicateConfiguration.absolutePath\n },\n reportItem: {\n overview: RouteUtils.paths.settings.reportItem.absolutePath\n },\n event: {\n overview: RouteUtils.paths.settings.event.absolutePath,\n add: RouteUtils.paths.settings.event.addEvent.absolutePath,\n duplicate: RouteUtils.paths.settings.event.duplicateEvent.absolutePath,\n edit: RouteUtils.paths.settings.event.editEvent.absolutePath\n },\n eventAlert: {\n add: '',\n duplicate: '',\n edit: ''\n },\n tuftProduct: {\n overview: RouteUtils.paths.texStyle.tuftProduct.absolutePath,\n add: RouteUtils.paths.texStyle.tuftProduct.addTuftProduct.absolutePath,\n duplicate: RouteUtils.paths.texStyle.tuftProduct.duplicateTuftProduct.absolutePath,\n edit: RouteUtils.paths.texStyle.tuftProduct.editTuftProduct.absolutePath\n },\n plasticProduct: {\n overview: RouteUtils.paths.texStyle.plasticProduct.absolutePath,\n add: RouteUtils.paths.texStyle.plasticProduct.addPlasticProduct.absolutePath,\n edit: RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.absolutePath,\n duplicate: RouteUtils.paths.texStyle.plasticProduct.duplicatePlasticProduct.absolutePath\n },\n operator: {\n overview: RouteUtils.paths.settings.operator.absolutePath,\n add: RouteUtils.paths.settings.operator.addOperator.absolutePath,\n edit: RouteUtils.paths.settings.operator.editOperator.absolutePath,\n duplicate: RouteUtils.paths.settings.operator.duplicateOperator.absolutePath\n },\n pathLayoutTemplate: {\n overview: RouteUtils.paths.texFab.pathLayoutTemplate.absolutePath,\n add: RouteUtils.paths.texFab.pathLayoutTemplate.addPathLayoutTemplate.absolutePath,\n edit: RouteUtils.paths.texFab.pathLayoutTemplate.editPathLayoutTemplate.absolutePath,\n duplicate: RouteUtils.paths.texFab.pathLayoutTemplate.duplicatePathLayoutTemplate.absolutePath,\n settings: RouteUtils.paths.texFab.pathLayoutTemplate.pathLayoutTemplateSettings.absolutePath\n },\n resourceType: {\n overview: RouteUtils.paths.settings.resourceType.absolutePath,\n add: RouteUtils.paths.settings.resourceType.addResourceType.absolutePath,\n edit: RouteUtils.paths.settings.resourceType.editResourceType.absolutePath,\n duplicate: RouteUtils.paths.settings.resourceType.duplicateResourceType.absolutePath\n },\n physicalQuantity: {\n overview: RouteUtils.paths.settings.physicalQuantity.absolutePath,\n add: RouteUtils.paths.settings.physicalQuantity.addPhysicalQuantity.absolutePath,\n edit: RouteUtils.paths.settings.physicalQuantity.editPhysicalQuantity.absolutePath,\n duplicate: RouteUtils.paths.settings.physicalQuantity.duplicatePhysicalQuantity.absolutePath\n },\n declaration: {\n overview: RouteUtils.paths.settings.absolutePath\n },\n automaticStopGroup: {\n overview: RouteUtils.paths.settings.absolutePath\n },\n tool: {\n overview: RouteUtils.paths.utilities.tool.absolutePath,\n add: RouteUtils.paths.utilities.tool.addTool.absolutePath,\n edit: RouteUtils.paths.utilities.tool.editTool.absolutePath,\n duplicate: RouteUtils.paths.utilities.tool.duplicateTool.absolutePath\n },\n rejectReason: {\n overview: RouteUtils.paths.settings.rejectReason.absolutePath,\n add: RouteUtils.paths.settings.rejectReason.addRejectReason.absolutePath,\n edit: RouteUtils.paths.settings.rejectReason.editRejectReason.absolutePath,\n duplicate: RouteUtils.paths.settings.rejectReason.duplicateRejectReason.absolutePath\n },\n fixedSchedule: {\n overview: RouteUtils.paths.texStyle.fixedSchedule.absolutePath,\n add: RouteUtils.paths.texStyle.fixedSchedule.addFixedSchedule.absolutePath,\n edit: RouteUtils.paths.texStyle.fixedSchedule.editFixedSchedule.absolutePath,\n duplicate: RouteUtils.paths.texStyle.fixedSchedule.duplicateFixedSchedule.absolutePath\n },\n buggy: {\n overview: RouteUtils.paths.texStyle.buggy.absolutePath,\n add: RouteUtils.paths.texStyle.buggy.addBuggy.absolutePath,\n edit: RouteUtils.paths.texStyle.buggy.editBuggy.absolutePath,\n duplicate: RouteUtils.paths.texStyle.buggy.duplicateBuggy.absolutePath\n },\n shift: {\n overview: RouteUtils.paths.calendar.shift.absolutePath,\n add: RouteUtils.paths.calendar.shift.addShift.absolutePath,\n edit: RouteUtils.paths.calendar.shift.editShift.absolutePath,\n duplicate: RouteUtils.paths.calendar.shift.duplicateShift.absolutePath\n },\n shiftPattern: {\n overview: NavigationUtils.getAbsolutePath(NavigationId.PATTERN),\n add: NavigationUtils.getAbsolutePath(NavigationId.ADD_PATTERN),\n edit: NavigationUtils.getAbsolutePath(NavigationId.EDIT_PATTERN),\n duplicate: NavigationUtils.getAbsolutePath(NavigationId.DUPLICATE_PATTERN)\n },\n shiftSchedule: {\n overview: NavigationUtils.getAbsolutePath(NavigationId.SCHEDULE),\n add: NavigationUtils.getAbsolutePath(NavigationId.ADD_SCHEDULE)\n }\n }[type];\n }\n\n public static getTranslations(type: string): Translations {\n return {\n machineQuality: {\n entity: 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY',\n delete: 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'\n },\n qualityFinishing: {\n delete: LastModifiedCardUtils.finishingTranslationKey\n },\n yarnType: {\n entity: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE',\n delete: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE'\n },\n coloredYarn: {\n entity: 'TEXTILE_DATA.COLORED_YARN.COLORED_YARN',\n delete: 'TEXTILE_DATA.COLORED_YARN.COLORED_YARN'\n },\n finishingTemplate: {\n entity: 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE',\n delete: 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE'\n },\n color: {\n entity: 'TEXTILE_DATA.COLOR.COLOR',\n delete: 'TEXTILE_DATA.COLOR.COLOR'\n },\n creel: {\n entity: 'TEXTILE_DATA.CREEL.CREEL',\n delete: 'TEXTILE_DATA.CREEL.CREEL'\n },\n weaveStructure: {\n entity: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE',\n delete: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE'\n },\n manageWeaveStructure: {\n entity: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE',\n delete: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE'\n },\n groupedWeaveStructure: {\n entity: 'TEXTILE_DATA.GROUPED_WEAVESTRUCTURE.GROUPED_WEAVESTRUCTURE',\n delete: 'TEXTILE_DATA.GROUPED_WEAVESTRUCTURE.GROUPED_WEAVESTRUCTURE'\n },\n finishing: {\n entity: LastModifiedCardUtils.finishingTranslationKey,\n delete: LastModifiedCardUtils.finishingTranslationKey\n },\n colorSet: {\n entity: 'TEXTILE_DATA.COLOR_SET.COLOR_SET',\n delete: 'TEXTILE_DATA.COLOR_SET.COLOR_SET'\n },\n yarnSet: {\n entity: 'TEXTILE_DATA.YARN_SET.YARN_SET',\n delete: 'TEXTILE_DATA.YARN_SET.YARN_SET'\n },\n coloredYarnSet: {\n entity: 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET',\n delete: 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET'\n },\n weftColoredYarnSet: {\n entity: 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET',\n delete: 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET'\n },\n companyWeaveStructure: {\n entity: 'TEXTILE_DATA.COMPANY_WEAVE_STRUCTURE.COMPANY_WEAVE_STRUCTURE'\n },\n productionSchedule: {\n entity: LastModifiedCardUtils.productionOrderTranslationKey,\n delete: LastModifiedCardUtils.productionOrderTranslationKey\n },\n productionScheduleNew: {\n entity: LastModifiedCardUtils.productionOrderTranslationKey,\n delete: LastModifiedCardUtils.productionOrderTranslationKey\n },\n productionOrderWeaving: {\n entity: LastModifiedCardUtils.productionOrderTranslationKey,\n delete: LastModifiedCardUtils.productionOrderTranslationKey\n },\n customer: {\n entity: 'CUSTOMERS.CUSTOMER',\n delete: 'CUSTOMERS.CUSTOMER'\n },\n article: {\n entity: 'ARTICLES.ARTICLE',\n delete: 'ARTICLES.ARTICLE'\n },\n salesOrder: {\n entity: 'SALES_ORDERS.SALES_ORDER',\n delete: 'SALES_ORDERS.SALES_ORDER'\n },\n weavePattern: {\n entity: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_PATTERN',\n delete: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_PATTERN'\n },\n weaveProduct: {\n entity: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT',\n delete: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT'\n },\n productConfiguration: {\n entity: 'PRODUCT_CONFIGURATION.PRODUCT_CONFIGURATION',\n delete: 'PRODUCT_CONFIGURATION.PRODUCT_CONFIGURATION'\n },\n dataUnitSetupCatalog: {\n entity: 'BMSCONFIG.DATA_UNIT_SETUP_CATALOG.DATA_UNIT_SETUP_CATALOG',\n delete: LastModifiedCardUtils.dataUnitSetupTranslationKey\n },\n dataUnitSetup: {\n entity: LastModifiedCardUtils.dataUnitSetupTranslationKey,\n delete: LastModifiedCardUtils.dataUnitSetupTranslationKey\n },\n deviceTemplateCatalog: {\n entity: 'BMSCONFIG.DEVICE_TEMPLATES_CATALOG.DEVICE_TEMPLATES_CATALOG',\n delete: 'BMSCONFIG.DEVICE_TEMPLATES_CATALOG.DEVICE_TEMPLATES_CATALOG'\n },\n deviceTemplateCounterCatalog: {\n entity: LastModifiedCardUtils.DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY,\n delete: LastModifiedCardUtils.DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY\n },\n deviceTemplateConfigurationCatalog: {\n entity: LastModifiedCardUtils.DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY,\n delete: LastModifiedCardUtils.DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY\n },\n deviceTemplate: {\n entity: 'BMSCONFIG.DEVICE_TEMPLATES.DEVICE_TEMPLATE',\n delete: 'BMSCONFIG.DEVICE_TEMPLATES.DEVICE_TEMPLATE'\n },\n deviceTemplateCounter: {\n entity: LastModifiedCardUtils.DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY,\n delete: LastModifiedCardUtils.DEVICE_TEMPLATE_COUNTER_TRANSLATION_KEY\n },\n deviceTemplateConfiguration: {\n entity: LastModifiedCardUtils.DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY,\n delete: LastModifiedCardUtils.DEVICE_TEMPLATE_CONFIGURATION_TRANSLATION_KEY\n },\n event: {\n entity: 'BMSCONFIG.EVENTS.EVENT',\n delete: 'BMSCONFIG.EVENTS.EVENT'\n },\n eventAlert: {\n entity: 'BMSCONFIG.EVENTS.ALERT',\n delete: 'BMSCONFIG.EVENTS.ALERT'\n },\n tuftProduct: {\n entity: 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT',\n delete: 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT'\n },\n tuftProductionOrder: {\n entity: LastModifiedCardUtils.productionOrderTranslationKey,\n delete: LastModifiedCardUtils.productionOrderTranslationKey\n },\n operator: {\n entity: 'MACHINE.OPERATORS.OPERATOR',\n delete: 'MACHINE.OPERATORS.OPERATOR'\n },\n pathLayoutTemplate: {\n entity: 'PATH_LAYOUT_TEMPLATE.PATH_LAYOUT_TEMPLATE',\n delete: 'PATH_LAYOUT_TEMPLATE.PATH_LAYOUT_TEMPLATE'\n },\n resourceType: {\n entity: 'BMSCONFIG.RESOURCE_TYPES.RESOURCE_TYPE',\n delete: 'BMSCONFIG.RESOURCE_TYPES.RESOURCE_TYPE'\n },\n physicalQuantity: {\n entity: 'BMSCONFIG.PHYSICAL_QUANTITIES.PHYSICAL_QUANTITY',\n delete: 'BMSCONFIG.PHYSICAL_QUANTITIES.PHYSICAL_QUANTITY'\n },\n plasticProduct: {\n entity: 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT',\n delete: 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT'\n },\n plasticProductionOrder: {\n entity: LastModifiedCardUtils.productionOrderTranslationKey,\n delete: LastModifiedCardUtils.productionOrderTranslationKey\n },\n tool: {\n entity: 'UTILITIES.TOOL.TOOL',\n delete: 'UTILITIES.TOOL.TOOL'\n },\n stockLocation: {\n entity: 'UTILITIES.TOOL.STOCK_LOCATION',\n delete: 'UTILITIES.TOOL.STOCK_LOCATION'\n },\n rawMaterial: {\n entity: 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL',\n delete: 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL'\n },\n rejectReason: {\n entity: 'BMSCONFIG.REJECT_REASON.REJECT_REASON',\n delete: 'BMSCONFIG.REJECT_REASON.REJECT_REASON'\n },\n buggy: {\n entity: 'PLANNING.BUGGY.BUGGY',\n delete: 'PLANNING.BUGGY.BUGGY'\n },\n fixedSchedule: {\n entity: 'TEXTILE_DATA.FIXED_ORDER.FIXED_ORDER',\n delete: 'TEXTILE_DATA.FIXED_ORDER.FIXED_ORDER'\n },\n shift: {\n entity: 'CALENDAR.SHIFT.SHIFT',\n delete: 'CALENDAR.SHIFT.SHIFT'\n },\n shiftPattern: {\n entity: NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey,\n delete: NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey\n },\n reportItem: {\n delete: 'BMSCONFIG.REPORT_ITEMS.REPORT_ITEM'\n }\n }[type];\n }\n\n public static hasCustomSettings(type: string): boolean {\n return {\n machineQuality: true,\n yarnType: true,\n finishingTemplate: true,\n color: true,\n creel: true,\n weaveStructure: true,\n manageWeaveStructure: true,\n groupedWeaveStructure: false,\n weavePattern: false,\n finishing: false,\n colorSet: true,\n yarnSet: true,\n coloredYarnSet: false,\n weftColoredYarnSet: false,\n companyWeaveStructure: false,\n productionSchedule: true,\n productionScheduleNew: true,\n productionOrderWeaving: true,\n tuftProductionOrder: true,\n customer: false,\n article: false,\n event: false,\n salesOrder: false,\n productConfiguration: true,\n dataUnitSetupCatalog: true,\n dataUnitSetup: true,\n pathLayoutTemplate: true\n }[type];\n }\n\n public static getPermissionToModifyItems(type: string): Permission {\n return {\n machineQuality: Permission.TEXSTYLE_MACHINE_QUALITY_EDIT,\n qualityFinishing: Permission.TEXSTYLE_FINISHING_EDIT,\n yarnType: Permission.TEXSTYLE_YARN_EDIT,\n finishingTemplate: Permission.TEXSTYLE_FINISHING_EDIT,\n color: Permission.TEXSTYLE_COLOR_EDIT,\n coloredYarn: Permission.ACCESS_ALL,\n weaveProduct: Permission.TEXSTYLE_WEAVE_PRODUCT_EDIT,\n creel: Permission.TEXSTYLE_CREEL_EDIT,\n weaveStructure: Permission.TEXSTYLE_EDIT_WEAVE_STRUCTURES,\n manageWeaveStructure: Permission.MANAGE_WEAVE_STRUCTURE_EDIT,\n groupedWeaveStructure: Permission.ACCESS_ALL,\n weavePattern: Permission.TEXSTYLE_WEAVE_STRUCTURES_EDIT_PATTERN,\n finishing: Permission.TEXSTYLE_FINISHING_EDIT,\n colorSet: Permission.TEXSTYLE_COLORSET_EDIT,\n yarnSet: Permission.TEXSTYLE_YARNSET_EDIT,\n coloredYarnSet: Permission.TEXSTYLE_COLOREDYARNSET_EDIT,\n weftColoredYarnSet: Permission.TEXSTYLE_WEFTCOLOREDYARNSET_EDIT,\n companyWeaveStructure: Permission.COMPANY_WEAVE_STRUCTURE_EDIT,\n productionSchedule: Permission.TEXFAB_SCHEDULE,\n productionScheduleNew: Permission.TEXFAB_SCHEDULE,\n productionOrderWeaving: Permission.TEXFAB_WEAVE_ORDER_EDIT,\n customer: Permission.TEXFAB_CUSTOMER_EDIT,\n article: Permission.TEXFAB_ARTICLE_EDIT,\n salesOrder: Permission.TEXFAB_SALES_ORDER_EDIT,\n productConfiguration: Permission.TEXFAB_SCHEDULE,\n dataUnitSetup: Permission.SETTINGS_DATA_UNIT_SETUP_VIEW,\n dataUnitSetupCatalog: Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW,\n deviceTemplateCatalog: Permission.ADMIN_DEVICE_TEMPLATE_EDIT,\n deviceTemplateCounterCatalog: Permission.ADMIN_DEVICE_TEMPLATE_EDIT,\n deviceTemplateConfigurationCatalog: Permission.ADMIN_DEVICE_TEMPLATE_EDIT,\n deviceTemplate: Permission.DEVICE_TEMPLATE_EDIT,\n deviceTemplateCounter: Permission.DEVICE_TEMPLATE_EDIT,\n deviceTemplateConfiguration: Permission.DEVICE_TEMPLATE_EDIT,\n event: Permission.ALERT_EDIT_EVENTS,\n tuftProduct: Permission.TEXSTYLE_TUFT_PRODUCT_EDIT,\n tuftProductionOrder: Permission.TEXFAB_TUFT_ORDER_EDIT,\n operator: Permission.SETTINGS_OPERATOR_EDIT,\n pathLayoutTemplate: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT,\n reportItem: Permission.SETTINGS_REPORT_ITEM_EDIT,\n tool: Permission.TEXSTYLE_PLASTIC_TOOL_EDIT,\n buggy: Permission.EDIT_BUGGIES,\n fixedSchedule: Permission.FIXED_SCHEDULE_EDIT\n }[type];\n }\n\n public static canShowConflictsDialog(type: string): boolean {\n return {\n machineQuality: true,\n yarnType: true,\n finishingTemplate: true,\n color: true,\n creel: true,\n weaveStructure: true,\n manageWeaveStructure: true,\n groupedWeaveStructure: false,\n weavePattern: false,\n finishing: true,\n colorSet: true,\n yarnSet: true,\n coloredYarnSet: true,\n weftColoredYarnSet: true,\n companyWeaveStructure: false,\n productionSchedule: true,\n productionScheduleNew: true,\n productionOrderWeaving: false,\n customers: true,\n article: true,\n productConfiguration: false,\n event: false,\n salesOrder: true,\n deviceTemplate: true,\n weaveProduct: true,\n tuftProduct: true,\n plasticProduct: true,\n tool: true,\n stockLocation: true\n }[type];\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {isNil, map, size} from 'lodash-es';\nimport {BuilderType} from './builder-type.enum';\nimport {JacquardMachineLoomLayoutZone} from './jacquard-machine-loom-layout-zone';\nimport {MachineGroup} from './machine-group';\nimport {MachineManufacturer} from './machine-manufacturer';\nimport {MachineType} from './machine-type.enum';\n\nexport class CarpetLoomMachine extends Equipment {\n private _machineGroup: MachineGroup;\n private _remote: boolean;\n private _manufacturer: MachineManufacturer;\n private _jacquardType: string;\n private _minNumberOfPicks: number;\n private _pickDensityInSchedule: boolean;\n private _possibleQualities: OverviewListMachineQuality[];\n private _possibleCreels: OverviewListCreel[];\n private _numberOfCreelPositions: number;\n private _dentsForFabric: number;\n private _sendReport: number;\n private _builderType: BuilderType;\n private _loomLayoutZones: JacquardMachineLoomLayoutZone[];\n\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.CARPET_LOOM, name, orderId);\n\n this._machineGroup = null;\n this._remote = false;\n this._loomLayoutZones = [];\n }\n\n public static fromJSON(carpetLoomMachineJSON: any): CarpetLoomMachine {\n const machineQualities: OverviewListMachineQuality[] =\n size(carpetLoomMachineJSON.possibleMachineQualities) > 0\n ? map(carpetLoomMachineJSON.possibleMachineQualities, (possibleMachineQuality: any) => {\n return OverviewListMachineQuality.fromJSON(possibleMachineQuality);\n })\n : null;\n\n const creels: OverviewListCreel[] =\n size(carpetLoomMachineJSON.possibleCreels) > 0\n ? map(carpetLoomMachineJSON.possibleCreels, (possibleCreel: any) => {\n return OverviewListCreel.fromJSON(possibleCreel);\n })\n : null;\n\n const machineGroup: MachineGroup = isNil(carpetLoomMachineJSON.machineGroup) ? null : MachineGroup.fromJSON(carpetLoomMachineJSON.machineGroup);\n\n const carpetLoomMachine = new CarpetLoomMachine(carpetLoomMachineJSON.id, carpetLoomMachineJSON.name, carpetLoomMachineJSON.orderId);\n carpetLoomMachine.manufacturer = isNil(carpetLoomMachineJSON.manufacturerId) ? null : new MachineManufacturer(carpetLoomMachineJSON.manufacturerId);\n carpetLoomMachine.jacquardType = carpetLoomMachineJSON.jacquardType;\n carpetLoomMachine.minNumberOfPicks = carpetLoomMachineJSON.minNumberOfPicks;\n carpetLoomMachine.pickDensityInSchedule = carpetLoomMachineJSON.pickDensityInSchedule;\n carpetLoomMachine.possibleQualities = machineQualities;\n carpetLoomMachine.possibleCreels = creels;\n carpetLoomMachine.numberOfCreelPositions = carpetLoomMachineJSON.numberOfCreelPositions;\n carpetLoomMachine.dentsForFabric = carpetLoomMachineJSON.dentsForFabric;\n carpetLoomMachine.sendReport = carpetLoomMachineJSON.sendReport;\n carpetLoomMachine.builderType = carpetLoomMachineJSON.builderType ? BuilderType[carpetLoomMachineJSON.builderType as string] : null;\n carpetLoomMachine.remote = carpetLoomMachineJSON.remoteMachine;\n carpetLoomMachine.machineGroup = machineGroup;\n carpetLoomMachine.loomLayoutZones = carpetLoomMachineJSON.loomLayoutZones\n ? carpetLoomMachineJSON.loomLayoutZones\n .map(JacquardMachineLoomLayoutZone.fromJSON)\n .sort((firstLoomLayoutZone: JacquardMachineLoomLayoutZone, secondLoomLayoutZone: JacquardMachineLoomLayoutZone) => firstLoomLayoutZone.position - secondLoomLayoutZone.position)\n : [];\n\n return carpetLoomMachine;\n }\n\n public get manufacturer(): MachineManufacturer {\n return this._manufacturer;\n }\n\n public set manufacturer(manufacturer: MachineManufacturer) {\n this._manufacturer = manufacturer;\n }\n\n public get jacquardType(): string {\n return this._jacquardType;\n }\n\n public set jacquardType(jacquardType: string) {\n this._jacquardType = jacquardType;\n }\n\n public get minNumberOfPicks(): number {\n return this._minNumberOfPicks;\n }\n\n public set minNumberOfPicks(minNumberOfPicks: number) {\n this._minNumberOfPicks = minNumberOfPicks;\n }\n\n public get pickDensityInSchedule(): boolean {\n return this._pickDensityInSchedule;\n }\n\n public set pickDensityInSchedule(pickDensityInSchedule: boolean) {\n this._pickDensityInSchedule = pickDensityInSchedule;\n }\n\n public get possibleQualities(): OverviewListMachineQuality[] {\n return this._possibleQualities;\n }\n\n public set possibleQualities(possibleQualities: OverviewListMachineQuality[]) {\n this._possibleQualities = possibleQualities;\n }\n\n public get possibleCreels(): OverviewListCreel[] {\n return this._possibleCreels;\n }\n\n public set possibleCreels(possibleCreels: OverviewListCreel[]) {\n this._possibleCreels = possibleCreels;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public set numberOfCreelPositions(numberOfCreelPositions: number) {\n this._numberOfCreelPositions = numberOfCreelPositions;\n }\n\n public get dentsForFabric(): number {\n return this._dentsForFabric;\n }\n\n public set dentsForFabric(dentsForFabric: number) {\n this._dentsForFabric = dentsForFabric;\n }\n\n public get sendReport(): number {\n return this._sendReport;\n }\n\n public set sendReport(sendReport: number) {\n this._sendReport = sendReport;\n }\n\n public get machineGroup(): MachineGroup {\n return this._machineGroup;\n }\n\n public set machineGroup(machineGroup: MachineGroup) {\n this._machineGroup = machineGroup;\n }\n\n public get remote(): boolean {\n return this._remote;\n }\n\n public set remote(remote: boolean) {\n this._remote = remote;\n }\n\n public get builderType(): BuilderType {\n return this._builderType;\n }\n\n public set builderType(builderType: BuilderType) {\n this._builderType = builderType;\n }\n\n public get loomLayoutZones(): JacquardMachineLoomLayoutZone[] {\n return this._loomLayoutZones;\n }\n\n public set loomLayoutZones(loomLayoutZones: JacquardMachineLoomLayoutZone[]) {\n this._loomLayoutZones = loomLayoutZones;\n }\n\n public toJSON(): JSON {\n const carpetLoomMachineJSON = super.toJSON();\n\n carpetLoomMachineJSON['jacquardType'] = this.jacquardType;\n carpetLoomMachineJSON['manufacturerId'] = this.manufacturer ? this.manufacturer.id : null;\n carpetLoomMachineJSON['minNumberOfPicks'] = this.minNumberOfPicks;\n carpetLoomMachineJSON['numberOfCreelPositions'] = this.numberOfCreelPositions;\n carpetLoomMachineJSON['pickDensityInSchedule'] = this.pickDensityInSchedule;\n carpetLoomMachineJSON['possibleCreelIds'] = map(this.possibleCreels, (possibleCreel: OverviewListCreel) => possibleCreel.id);\n carpetLoomMachineJSON['possibleMachineQualityIds'] = map(this.possibleQualities, (possibleQuality: OverviewListMachineQuality) => possibleQuality.id);\n carpetLoomMachineJSON['dentsForFabric'] = this.dentsForFabric;\n carpetLoomMachineJSON['sendReport'] = this.sendReport;\n carpetLoomMachineJSON['machineGroupId'] = this.machineGroup?.id;\n carpetLoomMachineJSON['machineGroup'] = this.machineGroup?.toJSON();\n carpetLoomMachineJSON['remoteMachine'] = this.remote;\n carpetLoomMachineJSON['builderType'] = BuilderType[this.builderType];\n carpetLoomMachineJSON['loomLayoutZones'] = this._loomLayoutZones.map((loomLayoutZone: JacquardMachineLoomLayoutZone) => loomLayoutZone.toJSON());\n\n return carpetLoomMachineJSON;\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class CarpetLoomNoJacquardMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.CARPET_LOOM_NO_JQ, name, orderId);\n }\n\n public static fromJSON(carpetLoomNoJacquardMachineJSON: any): CarpetLoomNoJacquardMachine {\n return new CarpetLoomNoJacquardMachine(carpetLoomNoJacquardMachineJSON.id, carpetLoomNoJacquardMachineJSON.name, carpetLoomNoJacquardMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class ColortecMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.COLORTEC, name, orderId);\n }\n\n public static fromJSON(colortecMachineJSON: any): ColortecMachine {\n return new ColortecMachine(colortecMachineJSON.id, colortecMachineJSON.name, colortecMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class ColorteclplusMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.COLORTECLPLUS, name, orderId);\n }\n\n public static fromJSON(colorteclplusMachineJSON: any): ColorteclplusMachine {\n return new ColorteclplusMachine(colorteclplusMachineJSON.id, colorteclplusMachineJSON.name, colorteclplusMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class ExtrusionMachine extends Equipment {\n private _winderSerialNumbers: string[];\n private _bobbinHolderShaftNumbers: string[];\n\n public constructor(id: number, name: string, orderId: string, winderSerialNumbers: string[], bobbinHolderShaftNumbers: string[]) {\n super(id, MachineType.EXTRUSION, name, orderId);\n\n this._bobbinHolderShaftNumbers = bobbinHolderShaftNumbers;\n this._winderSerialNumbers = winderSerialNumbers;\n }\n\n public get winderSerialNumbers(): string[] {\n return this._winderSerialNumbers;\n }\n\n public set winderSerialNumbers(winderSerialNumbers: string[]) {\n this._winderSerialNumbers = winderSerialNumbers;\n }\n\n public get bobbinHolderShaftNumbers(): string[] {\n return this._bobbinHolderShaftNumbers;\n }\n\n public set bobbinHolderShaftNumbers(bobbinHolderShaftNumbers: string[]) {\n this._bobbinHolderShaftNumbers = bobbinHolderShaftNumbers;\n }\n\n public static fromJSON(extrusionMachineJSON: any): ExtrusionMachine {\n return new ExtrusionMachine(\n extrusionMachineJSON.id,\n extrusionMachineJSON.name,\n extrusionMachineJSON.orderId,\n extrusionMachineJSON.winderSerialNumbers,\n extrusionMachineJSON.bobbinHolderShaftNumbers\n );\n }\n\n public toJSON(): JSON {\n return {\n machineType: `${MachineType[this.machineType]}`,\n name: this.name,\n orderId: this.orderId,\n winderSerialNumbers: this._winderSerialNumbers,\n bobbinHolderShaftNumbers: this._bobbinHolderShaftNumbers\n } as any as JSON;\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class FinishingMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.FINISHING, name, orderId);\n }\n\n public static fromJSON(finishingMachineJSON: any): FinishingMachine {\n return new FinishingMachine(finishingMachineJSON.id, finishingMachineJSON.name, finishingMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class JacquardMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.JACQUARD, name, orderId);\n }\n\n public static fromJSON(jacquardMachineJSON: any): JacquardMachine {\n return new JacquardMachine(jacquardMachineJSON.id, jacquardMachineJSON.name, jacquardMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class MyriadMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.MYRIAD, name, orderId);\n }\n\n public static fromJSON(myriadMachineJSON: any): MyriadMachine {\n return new MyriadMachine(myriadMachineJSON.id, myriadMachineJSON.name, myriadMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class SuperbadyeMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.SUPERBADYE, name, orderId);\n }\n\n public static fromJSON(superbadyeMachineJSON: any): SuperbadyeMachine {\n return new SuperbadyeMachine(superbadyeMachineJSON.id, superbadyeMachineJSON.name, superbadyeMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class SuperbaheatMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.SUPERBAHEAT, name, orderId);\n }\n\n public static fromJSON(superbaheatMachineJSON: any): SuperbaheatMachine {\n return new SuperbaheatMachine(superbaheatMachineJSON.id, superbaheatMachineJSON.name, superbaheatMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class SuperbawinderMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.SUPERBAWINDER, name, orderId);\n }\n\n public static fromJSON(superbawinderMachineJSON: any): SuperbawinderMachine {\n return new SuperbawinderMachine(superbawinderMachineJSON.id, superbawinderMachineJSON.name, superbawinderMachineJSON.orderId);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class VelvetNoJacquardMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.VELVET_NO_JQ, name, orderId);\n }\n\n public static fromJSON(velvetNoJacquardMachineJSON: any): VelvetNoJacquardMachine {\n return new VelvetNoJacquardMachine(velvetNoJacquardMachineJSON.id, velvetNoJacquardMachineJSON.name, velvetNoJacquardMachineJSON.orderId);\n }\n}\n","import {CarpetLoomMachine} from '@domain/machine/carpet-loom-machine';\nimport {CarpetLoomNoJacquardMachine} from '@domain/machine/carpet-loom-no-jacquard-machine';\nimport {ColortecMachine} from '@domain/machine/colortec-machine';\nimport {ColorteclplusMachine} from '@domain/machine/colorteclplus-machine';\nimport {DyeingMachine} from '@domain/machine/dyeing-machine';\nimport {ExtrusionMachine} from '@domain/machine/extrusion-machine';\nimport {FinishingMachine} from '@domain/machine/finishing-machine';\nimport {JacquardMachine} from '@domain/machine/jacquard-machine';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MyriadMachine} from '@domain/machine/myriad-machine';\nimport {PlasticsMachine} from '@domain/machine/plastics-machine';\nimport {SuperbadyeMachine} from '@domain/machine/superbadye-machine';\nimport {SuperbaheatMachine} from '@domain/machine/superbaheat-machine';\nimport {SuperbawinderMachine} from '@domain/machine/superbawinder-machine';\nimport {TuftMachine} from '@domain/machine/tuft-machine';\nimport {UnconfiguredMachine} from '@domain/machine/unconfigured-machine';\nimport {VelvetMachine} from '@domain/machine/velvet-machine';\nimport {VelvetNoJacquardMachine} from '@domain/machine/velvet-no-jacquard-machine';\nimport {WeavingMachine} from '@domain/machine/weaving-machine';\nimport {WinderMachine} from '@domain/machine/winder-machine';\n\nconst machineClassFromMachineTypeMap = new Map([\n [MachineType.CARPET_LOOM, CarpetLoomMachine],\n [MachineType.CARPET_LOOM_NO_JQ, CarpetLoomNoJacquardMachine],\n [MachineType.WEAVING_MACHINE, WeavingMachine],\n [MachineType.COLORTEC, ColortecMachine],\n [MachineType.COLORTECLPLUS, ColorteclplusMachine],\n [MachineType.TUFT, TuftMachine],\n [MachineType.MYRIAD, MyriadMachine],\n [MachineType.JACQUARD, JacquardMachine],\n [MachineType.EXTRUSION, ExtrusionMachine],\n [MachineType.FINISHING, FinishingMachine],\n [MachineType.DYEING, DyeingMachine],\n [MachineType.SUPERBADYE, SuperbadyeMachine],\n [MachineType.SUPERBAHEAT, SuperbaheatMachine],\n [MachineType.SUPERBAWINDER, SuperbawinderMachine],\n [MachineType.UNDEFINED, UnconfiguredMachine],\n [MachineType.VELVET, VelvetMachine],\n [MachineType.VELVET_NO_JQ, VelvetNoJacquardMachine],\n [MachineType.WINDER, WinderMachine],\n [MachineType.PLASTIC_MACHINE, PlasticsMachine]\n]);\n\nexport function getMachineClassFromMachineType(machineType: MachineType): any {\n return machineClassFromMachineTypeMap.get(machineType);\n}\n","import {Command} from '@application/command/command';\nimport {MobileNavigationBarItem, NavigationBarMobileItemProperties} from './mobile-navigation-bar-item';\n\nexport interface MobileNavigationBarActionItemProperties extends NavigationBarMobileItemProperties {\n command: Command;\n}\n\nexport class MobileNavigationBarActionItem extends MobileNavigationBarItem {\n private _command: Command;\n public active = false;\n\n public constructor(properties: MobileNavigationBarActionItemProperties) {\n const {command, ...navigationBarItemProperties} = properties;\n\n super(navigationBarItemProperties);\n this._command = command;\n }\n\n public executeCommand(commandArgs: T): R {\n return this._command.execute(commandArgs);\n }\n}\n","import {MobileNavigationBarItem, NavigationBarMobileItemProperties} from './mobile-navigation-bar-item';\n\nexport interface MobileNavigationBarExternalLinkItemProperties extends NavigationBarMobileItemProperties {\n link: string;\n}\n\nexport class MobileNavigationBarExternalLinkItem extends MobileNavigationBarItem {\n private _link: string;\n\n public constructor(properties: MobileNavigationBarExternalLinkItemProperties) {\n const {link, ...navigationBarItemProperties} = properties;\n\n super(navigationBarItemProperties);\n this._link = link;\n }\n\n public get path(): string {\n return this._link;\n }\n}\n","export enum MobileNavigationBarItemSize {\n NORMAL,\n SMALL\n}\n","import {Permission} from '@domain/profile/permission.enum';\nimport {OnboardingNavigationStep} from '@presentation/components/onboarding-dialog/onboarding-navigation-step.enum';\nimport {Observable} from 'rxjs';\nimport {MobileNavigationBarItemMobilePosition} from './mobile-navigation-bar-item-mobile-position.enum';\nimport {MobileNavigationBarItemPosition} from './mobile-navigation-bar-item-position.enum';\nimport {MobileNavigationBarItemSize} from './mobile-navigation-bar-item-size.enum';\n\nexport interface NavigationBarMobileItemProperties {\n name: string;\n icon: string;\n position: MobileNavigationBarItemPosition;\n mobilePositions: MobileNavigationBarItemMobilePosition[];\n requiredPermission: Permission;\n id: string;\n onboardingStep?: OnboardingNavigationStep;\n badge?: Observable;\n size?: MobileNavigationBarItemSize;\n}\n\nexport abstract class MobileNavigationBarItem {\n private _requiredPermission: Permission;\n private _name: string;\n private _icon: string;\n private _size: MobileNavigationBarItemSize;\n private _mobileFriendly: boolean;\n private _mobileOnly: boolean;\n private _id: string;\n private _onboardingStep: OnboardingNavigationStep;\n private _position: MobileNavigationBarItemPosition;\n private _mobilePositions: MobileNavigationBarItemMobilePosition[];\n private _badge: Observable;\n\n public constructor(properties: NavigationBarMobileItemProperties) {\n const {name, icon, position, mobilePositions, requiredPermission, id, onboardingStep, badge, size} = properties;\n\n this._name = name;\n this._icon = icon;\n this._id = id;\n this._position = position;\n this._requiredPermission = requiredPermission;\n this._mobilePositions = mobilePositions;\n this._onboardingStep = onboardingStep;\n this._badge = badge;\n this._size = size ?? MobileNavigationBarItemSize.NORMAL;\n }\n\n public get requiredPermission(): Permission {\n return this._requiredPermission;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get icon(): string {\n return this._icon;\n }\n\n public set icon(icon: string) {\n this._icon = icon;\n }\n\n public get size(): MobileNavigationBarItemSize {\n return this._size;\n }\n\n public set size(iconSize: MobileNavigationBarItemSize) {\n this._size = iconSize;\n }\n\n public get mobileFriendly(): boolean {\n return this._mobileFriendly;\n }\n\n public get mobileOnly(): boolean {\n return this._mobileOnly;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get onboardingStep(): OnboardingNavigationStep {\n return this._onboardingStep;\n }\n\n public get position(): MobileNavigationBarItemPosition {\n return this._position;\n }\n\n public get mobilePositions(): MobileNavigationBarItemMobilePosition[] {\n return this._mobilePositions;\n }\n\n public get badge(): Observable {\n return this._badge;\n }\n}\n","import {RouteNode} from '../routing/route-node';\nimport {MobileNavigationBarItem, NavigationBarMobileItemProperties} from './mobile-navigation-bar-item';\n\nexport interface MobileNavigationBarRouteLinkItemProperties extends Omit {\n route: RouteNode;\n canSearch?: boolean;\n}\n\nexport class MobileNavigationBarRouteLinkItem extends MobileNavigationBarItem {\n private _route: RouteNode;\n private _canSearch: boolean;\n\n public constructor(properties: MobileNavigationBarRouteLinkItemProperties) {\n const {route, canSearch, ...navigationBarItemProperties} = properties;\n\n super({...navigationBarItemProperties, requiredPermission: route.requiredPermission});\n\n this._route = route;\n this._canSearch = canSearch ?? false;\n }\n\n public get path(): string {\n return this._route.absolutePath;\n }\n\n public get route(): RouteNode {\n return this._route;\n }\n\n public get canSearch(): boolean {\n return this._canSearch;\n }\n}\n","import {RouteLeaf} from './route-leaf';\nimport {RouteUtils} from './route-utils';\n\nexport class LinkedRouteUtils {\n private static COLORED_YARN_SET_LINKED_ROUTES = [\n RouteUtils.paths.texStyle.colorSet.addColorSet,\n RouteUtils.paths.texStyle.colorSet.editColorSet,\n RouteUtils.paths.texStyle.yarnSet.addYarnSet,\n RouteUtils.paths.texStyle.yarnSet.editYarnSet,\n RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet\n ];\n\n private static MACHINE_QUALITY_LINKED_ROUTES = [\n RouteUtils.paths.texStyle.weaveStructure.editWeaveStructure,\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.yarnSet.addYarnSet,\n RouteUtils.paths.texStyle.yarnSet.editYarnSet,\n RouteUtils.paths.texStyle.yarn.addYarn,\n RouteUtils.paths.texStyle.yarn.editYarn,\n RouteUtils.paths.texEdit.designLibrarySettings,\n RouteUtils.paths.texStyle.color.addColor,\n RouteUtils.paths.texStyle.machineQuality.addFinishing,\n RouteUtils.paths.texStyle.machineQuality.editFinishing,\n RouteUtils.paths.texStyle.machineQuality.duplicateFinishing\n ];\n\n private static TUFT_PRODUCT_LINKED_ROUTES = [RouteUtils.paths.texStyle.weaveProduct.addWeaveProduct, RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct];\n\n private static WEAVING_PRODUCTION_ORDER_LINKED_ROUTES = [\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.weaveProduct.addWeaveProduct,\n RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct,\n RouteUtils.paths.texFab.weaving.settings\n ];\n\n private static TUFTING_PRODUCTION_ORDER_LINKED_ROUTES = [\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.tuftProduct.addTuftProduct,\n RouteUtils.paths.texStyle.tuftProduct.editTuftProduct,\n RouteUtils.paths.texFab.tufting.settings\n ];\n\n private static DESIGN_LIBRARY_LINKED_ROUTES = [\n RouteUtils.paths.texStyle.machineQuality.addMachineQuality,\n RouteUtils.paths.texStyle.machineQuality.editMachineQuality,\n RouteUtils.paths.texStyle.colorSet.addColorSet,\n RouteUtils.paths.texStyle.colorSet.editColorSet,\n RouteUtils.paths.texStyle.yarnSet.addYarnSet,\n RouteUtils.paths.texStyle.yarnSet.editYarnSet\n ];\n\n private static WEFT_COLORED_YARN_SET_LINKED_ROUTES = [\n RouteUtils.paths.texStyle.colorSet.addColorSet,\n RouteUtils.paths.texStyle.colorSet.editColorSet,\n RouteUtils.paths.texStyle.yarnSet.addYarnSet,\n RouteUtils.paths.texStyle.yarnSet.editYarnSet\n ];\n\n private static PRODUCT_CONFIGURATION_LINKED_ROUTES = [\n RouteUtils.paths.texEdit.productConfigurationSettings,\n RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet,\n RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet,\n RouteUtils.paths.texStyle.weftColoredYarnSet.addWeftColoredYarnSet,\n RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet,\n RouteUtils.paths.texStyle.machineQuality.addMachineQuality,\n RouteUtils.paths.texStyle.machineQuality.editMachineQuality,\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.weaveStructure.editWeaveStructure,\n RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet\n ];\n\n private static YARN_SET_LINKED_ROUTES = [RouteUtils.paths.texStyle.yarnSet.yarnSetSettings, RouteUtils.paths.texStyle.yarn.addYarn];\n\n private static CREEL_LINKED_ROUTES = [\n RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet,\n RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet,\n RouteUtils.paths.texStyle.yarnSet.addYarnSet,\n RouteUtils.paths.texStyle.yarnSet.editYarnSet,\n RouteUtils.paths.texStyle.colorSet.addColorSet,\n RouteUtils.paths.texStyle.colorSet.editColorSet,\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.creel.creelSettings\n ];\n\n private static ARTICLE_LINKED_ROUTES = [RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet, RouteUtils.paths.texEdit.addDesign, RouteUtils.paths.texStyle.machineQuality.addMachineQuality];\n\n private static SALES_ORDER_LINKED_ROUTES = [RouteUtils.paths.texFab.customer.addCustomer, RouteUtils.paths.texFab.article.addArticle];\n\n private static LINKED_PRODUCTION_ORDER_ROUTES = [\n RouteUtils.paths.texStyle.machineQuality.addMachineQuality,\n RouteUtils.paths.texStyle.machineQuality.editMachineQuality,\n RouteUtils.paths.texEdit.addProductConfiguration,\n RouteUtils.paths.texEdit.editProductConfiguration,\n RouteUtils.paths.texStyle.colorSet.editColorSet,\n RouteUtils.paths.texStyle.color.editColor,\n RouteUtils.paths.texFab.productionOrder.settings,\n RouteUtils.paths.texState.editMachine,\n RouteUtils.paths.texStyle.creel.addCreel,\n RouteUtils.paths.texStyle.creel.editCreel,\n RouteUtils.paths.texFab.pathLayoutTemplate.addPathLayoutTemplate,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView,\n RouteUtils.paths.texStyle.buggy.addBuggy,\n RouteUtils.paths.texStyle.buggy.editBuggy\n ];\n\n private static LINKED_MACHINE_DATA_SOURCE_ROUTES = [\n RouteUtils.paths.settings.deviceTemplate.editDeviceTemplate,\n RouteUtils.paths.settings.resourceType.editResourceType,\n RouteUtils.paths.settings.dataUnitSetup.addDataUnitSetup,\n RouteUtils.paths.settings.machineDataSources.editMachineDataSource,\n RouteUtils.paths.settings.machineDataSources.settings\n ];\n\n private static LINKED_DEVICE_TEMPLATE = [\n RouteUtils.paths.settings.resourceType.addResourceType,\n RouteUtils.paths.settings.resourceType.editResourceType,\n RouteUtils.paths.settings.deviceTemplate.addCounter\n ];\n\n private static LINKED_DEVICE_TEMPLATE_COUNTER = [RouteUtils.paths.settings.reportItem.editReportItem, RouteUtils.paths.settings.physicalQuantity.editPhysicalQuantity];\n\n public static paths = new Map([\n [\n RouteUtils.paths.texStyle.coloredYarnSet,\n [RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet, RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet, RouteUtils.paths.texStyle.coloredYarnSet.duplicateColoredYarnSet]\n ],\n [RouteUtils.paths.texStyle.coloredYarnSet.addColoredYarnSet, this.COLORED_YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet, this.COLORED_YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.coloredYarnSet.duplicateColoredYarnSet, this.COLORED_YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.weftColoredYarnSet.addWeftColoredYarnSet, this.WEFT_COLORED_YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet, this.WEFT_COLORED_YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.weftColoredYarnSet.duplicateWeftColoredYarnSet, this.WEFT_COLORED_YARN_SET_LINKED_ROUTES],\n [\n RouteUtils.paths.texFab.planning,\n [\n RouteUtils.paths.texStyle.creel.addCreel,\n RouteUtils.paths.texStyle.creel.editCreel,\n RouteUtils.paths.texStyle.machineQuality.addMachineQuality,\n RouteUtils.paths.texStyle.machineQuality.editMachineQuality,\n RouteUtils.paths.texStyle.weaveProduct.addWeaveProduct,\n RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct,\n RouteUtils.paths.texStyle.tuftProduct.addTuftProduct,\n RouteUtils.paths.texStyle.tuftProduct.editTuftProduct,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderForRun,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderForMachine,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForRun,\n RouteUtils.paths.texFab.productionOrder.editProductionOrder,\n RouteUtils.paths.texFab.weaving.addProductionOrderForRun,\n RouteUtils.paths.texFab.weaving.addProductionOrderForMachine,\n RouteUtils.paths.texFab.weaving.editProductionOrder,\n RouteUtils.paths.texFab.tufting.addProductionOrderForRun,\n RouteUtils.paths.texFab.tufting.addProductionOrderForMachine,\n RouteUtils.paths.texFab.tufting.editProductionOrder\n ]\n ],\n [RouteUtils.paths.texFab.productionOrder.editProductionOrder, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrder, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderForMachine, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForMachine, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderForProductConfiguration, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForProductConfiguration, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderForRun, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForRun, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texFab.weaving.addProductionOrder, this.WEAVING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.weaving.editProductionOrder, this.WEAVING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.weaving.duplicateProductionOrder, this.WEAVING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.weaving.addProductionOrderForMachine, this.WEAVING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.weaving.addProductionOrderForRun, this.WEAVING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.tufting.addProductionOrder, this.TUFTING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.tufting.editProductionOrder, this.TUFTING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.tufting.duplicateProductionOrder, this.TUFTING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.tufting.addProductionOrderForMachine, this.TUFTING_PRODUCTION_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.tufting.addProductionOrderForRun, this.TUFTING_PRODUCTION_ORDER_LINKED_ROUTES],\n [\n RouteUtils.paths.texState,\n [\n RouteUtils.paths.texFab.productionOrder.addProductionOrderForMachine,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForMachine,\n RouteUtils.paths.texFab.weaving.addProductionOrderForMachine,\n RouteUtils.paths.texFab.tufting.addProductionOrderForMachine\n ]\n ],\n [\n RouteUtils.paths.texState.editMachine,\n [\n RouteUtils.paths.texStyle.machineQuality.addMachineQuality,\n RouteUtils.paths.texStyle.machineQuality.editMachineQuality,\n RouteUtils.paths.texStyle.creel.addCreel,\n RouteUtils.paths.texStyle.creel.editCreel,\n RouteUtils.paths.texState.settings\n ]\n ],\n [RouteUtils.paths.texState.settings, [RouteUtils.paths.texState.addTemplate]],\n [RouteUtils.paths.texStyle.machineQuality.addMachineQuality, this.MACHINE_QUALITY_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.machineQuality.editMachineQuality, this.MACHINE_QUALITY_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.machineQuality.duplicateMachineQuality, this.MACHINE_QUALITY_LINKED_ROUTES],\n [RouteUtils.paths.texFab.productionOrder.addProductionOrderForRun, this.LINKED_PRODUCTION_ORDER_ROUTES],\n [RouteUtils.paths.texStyle.creel.editCreel, this.CREEL_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.creel.addCreel, this.CREEL_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.creel.duplicateCreel, this.CREEL_LINKED_ROUTES],\n [RouteUtils.paths.texEdit.addProductConfiguration, this.PRODUCT_CONFIGURATION_LINKED_ROUTES],\n [RouteUtils.paths.texEdit.editProductConfiguration, [RouteUtils.paths.texFab.productionOrder.addProductionOrderForProductConfiguration, ...this.PRODUCT_CONFIGURATION_LINKED_ROUTES]],\n [RouteUtils.paths.texEdit.designLibrary, this.DESIGN_LIBRARY_LINKED_ROUTES],\n [RouteUtils.paths.texEdit.addDesign, this.DESIGN_LIBRARY_LINKED_ROUTES],\n [RouteUtils.paths.settings.operator.addOperator, [RouteUtils.paths.settings.operator.addOperatorType, RouteUtils.paths.settings.operator.editOperatorType]],\n [RouteUtils.paths.settings.operator.duplicateOperator, [RouteUtils.paths.settings.operator.addOperatorType, RouteUtils.paths.settings.operator.editOperatorType]],\n [RouteUtils.paths.settings.operator.editOperator, [RouteUtils.paths.settings.operator.addOperatorType, RouteUtils.paths.settings.operator.editOperatorType]],\n [RouteUtils.paths.settings.reportItem.editReportItem, [RouteUtils.paths.settings.physicalQuantity.editPhysicalQuantity]],\n [RouteUtils.paths.texStyle.color.addColor, [RouteUtils.paths.texStyle.color.colorSettings]],\n [RouteUtils.paths.texStyle.color.editColor, [RouteUtils.paths.texStyle.color.colorSettings]],\n [RouteUtils.paths.texStyle.color.duplicateColor, [RouteUtils.paths.texStyle.color.colorSettings]],\n [RouteUtils.paths.settings.machineDataSources.addMachineDataSource, this.LINKED_MACHINE_DATA_SOURCE_ROUTES],\n [RouteUtils.paths.settings.machineDataSources.editMachineDataSource, this.LINKED_MACHINE_DATA_SOURCE_ROUTES],\n [RouteUtils.paths.settings.machineDataSources.settings, [RouteUtils.paths.settings.resourceType.editResourceType]],\n [RouteUtils.paths.texStyle.colorSet.addColorSet, [RouteUtils.paths.texStyle.colorSet.colorSetSettings]],\n [RouteUtils.paths.texStyle.colorSet.editColorSet, [RouteUtils.paths.texStyle.colorSet.colorSetSettings]],\n [RouteUtils.paths.texStyle.colorSet.duplicateColorSet, [RouteUtils.paths.texStyle.colorSet.colorSetSettings]],\n [RouteUtils.paths.texFab.pathLayoutTemplate.addPathLayoutTemplate, [RouteUtils.paths.texFab.pathLayoutTemplate.pathLayoutTemplateSettings]],\n [RouteUtils.paths.texFab.pathLayoutTemplate.editPathLayoutTemplate, [RouteUtils.paths.texFab.pathLayoutTemplate.pathLayoutTemplateSettings]],\n [RouteUtils.paths.texFab.pathLayoutTemplate.duplicatePathLayoutTemplate, [RouteUtils.paths.texFab.pathLayoutTemplate.pathLayoutTemplateSettings]],\n [RouteUtils.paths.settings.deviceTemplate.addDeviceTemplate, this.LINKED_DEVICE_TEMPLATE],\n [RouteUtils.paths.settings.deviceTemplate.editDeviceTemplate, this.LINKED_DEVICE_TEMPLATE],\n [RouteUtils.paths.settings.deviceTemplate.addCounter, this.LINKED_DEVICE_TEMPLATE_COUNTER],\n [RouteUtils.paths.settings.deviceTemplate.editCounter, this.LINKED_DEVICE_TEMPLATE_COUNTER],\n [RouteUtils.paths.settings.deviceTemplateCatalog.addDeviceTemplateCatalog, this.LINKED_DEVICE_TEMPLATE],\n [RouteUtils.paths.settings.deviceTemplateCatalog.editDeviceTemplateCatalog, this.LINKED_DEVICE_TEMPLATE],\n [RouteUtils.paths.settings.deviceTemplateCatalog.addCounterCatalog, this.LINKED_DEVICE_TEMPLATE_COUNTER],\n [RouteUtils.paths.settings.deviceTemplateCatalog.editCounterCatalog, this.LINKED_DEVICE_TEMPLATE_COUNTER],\n [RouteUtils.paths.texStyle.tuftProduct.addTuftProduct, this.TUFT_PRODUCT_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.tuftProduct.editTuftProduct, this.TUFT_PRODUCT_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.tuftProduct.duplicateTuftProduct, this.TUFT_PRODUCT_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.yarnSet.addYarnSet, this.YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.yarnSet.editYarnSet, this.YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texStyle.yarnSet.duplicateYarnSet, this.YARN_SET_LINKED_ROUTES],\n [RouteUtils.paths.texFab.article.addArticle, this.ARTICLE_LINKED_ROUTES],\n [RouteUtils.paths.texFab.article.editArticle, this.ARTICLE_LINKED_ROUTES],\n [RouteUtils.paths.texFab.article.duplicateArticle, this.ARTICLE_LINKED_ROUTES],\n [RouteUtils.paths.texFab.salesOrder.addSalesOrder, this.SALES_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.salesOrder.editSalesOrder, this.SALES_ORDER_LINKED_ROUTES],\n [RouteUtils.paths.texFab.salesOrder.duplicateSalesOrder, this.SALES_ORDER_LINKED_ROUTES]\n ]);\n}\n","import {Location} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Params, Router} from '@angular/router';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {AssertionUtils, DialogComponentData, ObjectUtils} from '@vdw/angular-component-library';\nimport {LinkedRouteUtils} from '../routing/linked-route-utils';\nimport {RouteLeaf} from '../routing/route-leaf';\nimport {NavigationNewItemData} from './navigation-new-item-data.interface';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationHelperService {\n public static SESSION_STORAGE_KEY = 'navigationData.';\n\n public routingHistory: {route: string; data: T}[] = [];\n private navigatingBack = false;\n\n private previousRoute: string;\n private currentRoute: string;\n private initialRoute: string;\n private previousNextRoute: string;\n\n public constructor(\n private readonly router: Router,\n private readonly location: Location,\n private readonly navigationHistory: NavigationHistoryService\n ) {\n this.location.onUrlChange((route: string) => {\n this.previousRoute = this.navigatingBack ? this.routingHistory[this.routingHistory.length - 2]?.route : this.currentRoute;\n this.currentRoute = route;\n });\n\n window.onbeforeunload = (): void => this.clearScrollPositionInSessionStorage();\n }\n\n public saveState(data: T): void {\n const currentRoute = this.getCurrentRouteForSavingState();\n const nextRoute = this.getNextRouteForSavingState();\n\n const currentRouteLeaf = this.getCurrentRouteLeaf(currentRoute);\n\n if (this.navigatingBack) {\n this.navigatingBack = false;\n } else if (currentRouteLeaf?.absolutePath && this.isNextRouteRelatedToCurrent(currentRouteLeaf, nextRoute)) {\n const lastState = this.routingHistory[this.routingHistory.length - 1];\n if (lastState?.route === currentRoute) {\n lastState.data = data;\n } else {\n this.routingHistory.push({route: currentRoute, data});\n }\n\n if (AssertionUtils.isNullOrUndefined(this.initialRoute)) {\n this.initialRoute = this.navigationHistory.getPreviousUrl();\n }\n } else {\n this.clearAllStates();\n }\n }\n\n public savePartialState(data: K): void {\n let currentRoute = this.getCurrentRouteForSavingState();\n const nextRoute = this.getNextRouteForSavingState();\n\n if (AssertionUtils.isNullOrUndefined(currentRoute) && !AssertionUtils.isNullOrUndefined(nextRoute) && nextRoute === this.previousNextRoute && this.hasPreviousRoute()) {\n currentRoute = this.routingHistory[this.routingHistory.length - 1].route;\n }\n\n this.previousNextRoute = nextRoute;\n const currentRouteLeaf = this.getCurrentRouteLeaf(currentRoute);\n\n if (this.navigatingBack || this.currentRoute === this.getPreviousRoute()) {\n this.navigatingBack = false;\n } else if (currentRouteLeaf?.absolutePath && this.isNextRouteRelatedToCurrent(currentRouteLeaf, nextRoute)) {\n this.savePartialStateData(data, currentRoute);\n } else {\n this.clearAllStates();\n }\n }\n\n public onDestroy(): void {\n if (this.navigatingBack) {\n this.navigatingBack = false;\n } else {\n this.clearAllStates();\n }\n }\n\n public getState(): T {\n if (this.routingHistory.length > 0 && this.hasState()) {\n const state = this.routingHistory[this.routingHistory.length - 1].data;\n this.routingHistory.pop();\n return state;\n }\n\n return null;\n }\n\n public getPartialState(properties: string[], fromPreviousRoute: boolean = false): K {\n if (this.routingHistory.length > 0 && (this.hasState() || fromPreviousRoute)) {\n const data = this.routingHistory[this.routingHistory.length - 1].data;\n const extractedData = {};\n\n if (!AssertionUtils.isNullOrUndefined(data)) {\n Object.keys(data).forEach((key: string) => {\n if (properties.includes(key)) {\n extractedData[key] = data[key];\n delete data[key];\n }\n });\n\n if (Object.keys(data).length === 0) {\n this.routingHistory.pop();\n }\n }\n\n return Object.keys(extractedData).length === 0 ? null : (extractedData as K);\n }\n return null;\n }\n\n public navigateToPreviousRoute(\n backRoute: string = null,\n navigationState: {\n state: {\n [property: string]: any;\n };\n } = null\n ): void {\n this.navigatingBack = true;\n\n if (this.routingHistory[this.routingHistory.length - 1]?.route === this.router.url) {\n this.routingHistory.pop();\n }\n\n Object.keys(sessionStorage).forEach((sessionStorageKey: string) => {\n if (sessionStorageKey.includes(this.router.url)) {\n sessionStorage.removeItem(sessionStorageKey);\n }\n });\n\n if (this.hasPreviousRoute()) {\n this.router.navigateByUrl(this.getPreviousRoute());\n } else if (backRoute) {\n navigationState ? this.router.navigate([backRoute], navigationState) : this.router.navigateByUrl(backRoute);\n } else if (this.initialRoute) {\n this.router.navigateByUrl(this.initialRoute);\n this.initialRoute = null;\n } else {\n this.location.back();\n }\n }\n\n public navigateToNextRouteWithPartialState(data: K, nextRoute: string, queryParams: Params = null): void {\n this.savePartialStateData(data, this.router.url);\n\n if (queryParams) {\n this.router.navigate([nextRoute], {\n queryParams\n });\n } else {\n this.router.navigateByUrl(nextRoute);\n }\n }\n\n public setNewItemOrReopenDialogIfPresent(\n loadNewItem: (newItemState: NavigationNewItemData, dialogState?: DialogComponentData) => void,\n reopenDialog: (dialogState: DialogComponentData) => void\n ): void {\n const emptyNewItemState = {newItemId: null, newItemNames: null} as NavigationNewItemData;\n const newItemState = this.getPartialState(Object.keys(emptyNewItemState));\n\n const emptyDialogState = {dialogComponent: null} as DialogComponentData;\n const dialogState = this.getPartialState(Object.keys(emptyDialogState));\n let newItemLoaded = false;\n\n if (!AssertionUtils.isNullOrUndefined(newItemState) && !ObjectUtils.isDeepEqual(newItemState, emptyNewItemState)) {\n newItemLoaded = true;\n loadNewItem(newItemState, dialogState);\n }\n\n if (!AssertionUtils.isNullOrUndefined(dialogState) && !ObjectUtils.isDeepEqual(dialogState, emptyDialogState) && !newItemLoaded) {\n reopenDialog(dialogState);\n }\n }\n\n public isNextRouteRelatedToCurrent(currentRouteLeafKey: RouteLeaf, nextRoute: string): boolean {\n return !!LinkedRouteUtils.paths.get(currentRouteLeafKey)?.find((routeLeaf: RouteLeaf) => {\n return this.isRoutePathMatching(nextRoute, routeLeaf);\n });\n }\n\n public hasPreviousRoute(): boolean {\n const previousRoute = this.getPreviousRoute();\n\n return this.routingHistory.length > 0 && !AssertionUtils.isNullOrUndefined(previousRoute) && previousRoute !== this.currentRoute;\n }\n\n private getPreviousRoute(): string {\n return this.routingHistory[this.routingHistory.length - 1]?.route;\n }\n\n private getCurrentRouteForSavingState(): string {\n return this.previousRoute ?? this.router?.getCurrentNavigation()?.previousNavigation?.finalUrl?.toString();\n }\n\n private getNextRouteForSavingState(): string {\n return this.currentRoute ?? this.router.url;\n }\n\n private hasState(): boolean {\n return this.routingHistory[this.routingHistory.length - 1]?.route === this.router.url;\n }\n\n private clearAllStates(): void {\n if (this.router.url !== this.navigationHistory.getCurrentUrl()) {\n this.clearScrollPositionInSessionStorage();\n this.routingHistory = [];\n this.initialRoute = null;\n }\n }\n\n private clearScrollPositionInSessionStorage(): void {\n Object.keys(sessionStorage).forEach((sessionStorageKey: string) => {\n if (sessionStorageKey.includes('gridState.') || sessionStorageKey.includes(NavigationHelperService.SESSION_STORAGE_KEY)) {\n sessionStorage.removeItem(sessionStorageKey);\n }\n });\n }\n\n public getCurrentRouteLeaf(route: string): RouteLeaf {\n return [...LinkedRouteUtils.paths.keys()].find((routeLeaf: RouteLeaf) => this.isRoutePathMatching(route, routeLeaf));\n }\n\n private isRoutePathMatching(route: string, routeToMatch: RouteLeaf): boolean {\n if (AssertionUtils.isNullOrUndefined(route) || AssertionUtils.isNullOrUndefined(routeToMatch)) {\n return false;\n }\n\n const patternParts = routeToMatch.absolutePath\n .replace(/:\\w+/g, '*')\n .split('/')\n .map((part: string) => (part === '*' ? '.*' : part));\n\n return new RegExp(`^${patternParts.join('\\\\/')}$`).test(window?.location?.origin ? route.replace(window.location.origin, '') : route);\n }\n\n private savePartialStateData(data: K, route: string): void {\n const currentRouteData = this.routingHistory.find((history: {route: string; data: T}) => history.route === route);\n\n if (currentRouteData) {\n currentRouteData.data = {...data, ...currentRouteData.data};\n } else {\n this.routingHistory.push({route, data: data as any});\n }\n\n if (AssertionUtils.isNullOrUndefined(this.initialRoute)) {\n this.initialRoute = this.navigationHistory.getPreviousUrl();\n }\n }\n}\n","export enum PageTypeEnum {\n ADD = 'Add',\n EDIT = 'Edit',\n DUPLICATE = 'Duplicate',\n OVERVIEW = 'Overview'\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {FixedShape} from '@domain/drawing-library/fixed-shape.enum';\nimport {OrderLineAdditionalInfo} from '@domain/orderbook/order-line-additional-info';\nimport {PropertyValue} from '@domain/property-value';\nimport {Orderbook, ORDERBOOK} from '@infrastructure/http/orderbook/orderbook';\nimport {GridOrderLineStatusComponent} from '@presentation/components/order-lines-grid/grid-order-line-status/grid-order-line-status.component';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {BaseComponent, ColDefBuilderFactoryService, convertCommercialUnit, GridTagComponent, Priority, StringUtils, TagColor, TagSize, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {ColDef, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\nimport {find, get, isNil, merge} from 'lodash-es';\nimport {BehaviorSubject, map, Observable, of, Subject, switchMap, takeUntil} from 'rxjs';\n\n@Injectable()\nexport class OrderLinesGridService extends BaseComponent {\n private readonly isFillingPath = new BehaviorSubject(false);\n private readonly autoFillButtonClicked = new Subject();\n\n private readonly booleanFalseTranslation = 'GENERAL.CONDITION.NO';\n private readonly booleanTrueTranslation = 'GENERAL.CONDITION.YES';\n\n public constructor(\n @Inject(ORDERBOOK) private readonly orderbook: Orderbook,\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public getAutoFillButtonClicked(): Observable {\n return this.autoFillButtonClicked.asObservable();\n }\n\n public setAutoFillButtonClicked(buttonClicked: boolean): void {\n this.autoFillButtonClicked.next(buttonClicked);\n }\n\n public getIsFillingPath(): Observable {\n return this.isFillingPath.asObservable();\n }\n\n public setIsFillingPath(filling: boolean): void {\n this.isFillingPath.next(filling);\n }\n\n public getAdvancedSearchFiltersUpdatedWithFloatingFilters(advancedSearchFilters: PropertyValue[], floatingFilters: PropertyValue[], defaultUnit: Unit = Unit.CENTIMETER): PropertyValue[] {\n return advancedSearchFilters.map((advancedSearchFilter: PropertyValue) => {\n if (\n advancedSearchFilter.propertyName !== AdvancedSearchInput.MACHINE_QUALITY &&\n advancedSearchFilter.propertyName !== AdvancedSearchInput.COLORED_YARN_SET &&\n advancedSearchFilter.propertyName !== AdvancedSearchInput.MAIN_COLOR &&\n advancedSearchFilter.propertyName !== AdvancedSearchInput.BORDER_COLOR\n ) {\n const floatingFilterToSyncWith = floatingFilters.find((floatingFilter: PropertyValue) => floatingFilter.propertyName === advancedSearchFilter.propertyName);\n\n if (!isNil(floatingFilterToSyncWith)) {\n if (floatingFilterToSyncWith.propertyName === AdvancedSearchInput.WIDTH && !isNil(floatingFilterToSyncWith.propertyValue)) {\n advancedSearchFilter.propertyValue = convertCommercialUnit({from: {unit: defaultUnit, value: Number(floatingFilterToSyncWith.propertyValue)}, to: Unit.MILLIMETER});\n } else {\n advancedSearchFilter.propertyValue = floatingFilterToSyncWith.propertyValue;\n }\n }\n }\n\n return advancedSearchFilter;\n });\n }\n\n public getFilterModelUpdatedWithAdvancedSearchFilters(\n columnDefs: ColDef[],\n advancedSearchFilters: PropertyValue[],\n currentFilterModel: Record,\n defaultUnit: Unit = Unit.CENTIMETER\n ): Record {\n const filterModelFromAdvancedSearchFilters = advancedSearchFilters.reduce((filterModel: Record, advancedSearchFilter: PropertyValue) => {\n const columnDef = find(columnDefs, ['floatingFilterComponentParams.property', advancedSearchFilter.propertyName]);\n\n if (!isNil(columnDef)) {\n if (advancedSearchFilter.propertyName === AdvancedSearchInput.MACHINE_QUALITY) {\n filterModel[columnDef.colId] = {propertyName: advancedSearchFilter.propertyName, propertyValue: get(advancedSearchFilter.propertyValue, 'technicalName', null)};\n } else if (\n advancedSearchFilter.propertyName === AdvancedSearchInput.COLORED_YARN_SET ||\n advancedSearchFilter.propertyName === AdvancedSearchInput.MAIN_COLOR ||\n advancedSearchFilter.propertyName === AdvancedSearchInput.BORDER_COLOR\n ) {\n filterModel[columnDef.colId] = {propertyName: advancedSearchFilter.propertyName, propertyValue: get(advancedSearchFilter.propertyValue, 'name', null)};\n } else if (advancedSearchFilter.propertyName === AdvancedSearchInput.WIDTH && !isNil(advancedSearchFilter.propertyValue)) {\n filterModel[columnDef.colId] = {\n propertyName: advancedSearchFilter.propertyName,\n propertyValue: `${convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: Number(advancedSearchFilter.propertyValue)}, to: defaultUnit})}`\n };\n } else {\n filterModel[columnDef.colId] = advancedSearchFilter;\n }\n }\n\n return filterModel;\n }, {});\n\n return merge({}, currentFilterModel, filterModelFromAdvancedSearchFilters);\n }\n\n public getAdditionalInfoColumnDefs(): Observable {\n return this.orderbook.getListOfCustomSettings().pipe(\n map((settings: PropertyValue[]) => {\n return settings.map(({propertyName, propertyValue}: PropertyValue) => {\n return this.colDefBuilderFactory\n .getBuilder()\n .withColId(propertyName)\n .withValueGetter((params: ValueGetterParams) => this.getAdditionalInfoValueFromKey(params.data, propertyName), true)\n .withHeaderName(propertyValue)\n .withComparator(StringUtils.stringComparator)\n .build();\n });\n })\n );\n }\n\n public getColumnDefs(unit: Unit = Unit.CENTIMETER, isSelectedOrderLines: boolean = false): Observable {\n const commercialWidthInMM = this.colDefBuilderFactory\n .getBuilder()\n .withColId('commercialWidthInCM')\n .withField('article.commercialWidthInMM')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withPinned(false)\n .withNumericMultiFilter(this.getPossibleColumnsValues('commercialWidthInCM'))\n .withMMConversion(unit);\n\n const commercialHeightInMM = this.colDefBuilderFactory\n .getBuilder()\n .withColId('commercialHeightInCM')\n .withField('article.commercialHeightInMM')\n .withHeaderName('GENERAL.DIMENSIONS.HEIGHT')\n .withPinned(false)\n .withNumericMultiFilter(this.getPossibleColumnsValues('commercialHeightInCM'))\n .withMMConversion(unit);\n\n const commercialLengthInMM = this.colDefBuilderFactory\n .getBuilder()\n .withColId('commercialLengthInCM')\n .withField('commercialLengthInMM')\n .withHeaderName('GENERAL.DIMENSIONS.LENGTH')\n .withPinned(false)\n .withNumericMultiFilter(this.getPossibleColumnsValues('commercialLengthInCM'))\n .withMMConversion(unit);\n\n if (isSelectedOrderLines) {\n commercialWidthInMM.withValueGetter((params: ValueGetterParams) => {\n return `${convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: params.data.article.commercialWidthInMM}, to: unit})}`;\n });\n\n commercialHeightInMM.withValueGetter((params: ValueGetterParams) => {\n return `${convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: params.data.article.commercialHeightInMM}, to: unit})}`;\n });\n\n commercialLengthInMM.withValueGetter((params: ValueGetterParams) => {\n return `${convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: params.data.commercialLengthInMM}, to: unit})}`;\n });\n }\n\n const colDefsBeforeAdditionalInfo = [\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('status')\n .withHeaderName('GENERAL.STATUS')\n .withPinned(false)\n .withCellRenderer(GridOrderLineStatusComponent)\n .withTextMultiFilter(this.getPossibleColumnsValues('status'))\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`ORDERBOOK.ORDER_LINE_STATUS.${params.value}`).toUpperCase())\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('priority')\n .withHeaderName('SALES_ORDERS.PRIORITY.PRIORITY')\n .withPinned(false)\n .withCellRenderer(GridTagComponent, {\n translationKey: 'SALES_ORDERS.PRIORITY.',\n size: TagSize.SMALL,\n colorGetter: {\n [Priority.LOW]: TagColor.PRIMARY,\n [Priority.MEDIUM]: TagColor.WARNING,\n [Priority.HIGH]: TagColor.ERROR\n }\n })\n .withTextMultiFilter(this.getPossibleColumnsValues('priority'))\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`SALES_ORDERS.PRIORITY.${params.value}`).toUpperCase())\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('salesOrderReference', true)\n .withHeaderName('ORDERBOOK.ORDERBOOK_REFERENCE')\n .withPinned(true)\n .withLockVisible()\n .withLockPinned(true)\n .withTextMultiFilter(this.getPossibleColumnsValues('salesOrderReference'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('salesOrderLineReference', true)\n .withHeaderName('ORDERBOOK.ORDERLINE_REFERENCE')\n .withTextMultiFilter(this.getPossibleColumnsValues('salesOrderLineReference'))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('finishingName')\n .withField('article.finishing.nameWithVersion', true)\n .withHeaderName('TEXTILE_DATA.FINISHING.FINISHING')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('finishingName'))\n .build()\n ];\n const colDefsAfterAdditionalInfo = [\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('customerReference', true)\n .withHeaderName('ORDERBOOK.CUSTOMER_REFERENCE')\n .withTextMultiFilter(this.getPossibleColumnsValues('customerReference'))\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('colorSetName')\n .withField('article.colorSet.name', true)\n .withHeaderName('TEXTILE_DATA.COLOR_SET.COLOR_SET')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('colorSet'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('mainColor')\n .withField('article.mainColor.name', true)\n .withHeaderName('GENERAL.ADVANCED_SEARCH.MAIN_COLOR')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('mainColor'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('borderColor')\n .withField('article.borderColor.name', true)\n .withHeaderName('GENERAL.ADVANCED_SEARCH.BORDER_COLOR')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('borderColor'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('machineQualityName')\n .withField('article.machineQuality.nameWithVersion')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY')\n .withTooltipField('article.machineQuality.name')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('machineQualityName'))\n .build(),\n this.colDefBuilderFactory.getBuilder().withColIdAndField('orderType').withHeaderName('ORDERBOOK.ORDER_TYPE').withTextMultiFilter(this.getPossibleColumnsValues('orderType')).build(),\n commercialWidthInMM.build(),\n commercialHeightInMM.build(),\n commercialLengthInMM.build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('totalCount')\n .withField('amount')\n .withHeaderName('ORDERBOOK.REQUESTED_AMOUNT')\n .withValueGetter((params: ValueGetterParams) => {\n return `${params.data.amount}`;\n })\n .withNumericMultiFilter(this.getPossibleColumnsValues('totalCount'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('amountPlanned')\n .withHeaderName('ORDERBOOK.PLANNED_AMOUNT')\n .withValueGetter((params: ValueGetterParams) => {\n return `${params.data.amountPlanned}`;\n })\n .withNumericMultiFilter(this.getPossibleColumnsValues('amountPlanned'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('amountLeft')\n .withHeaderName('ORDERBOOK.TO_PLAN_AMOUNT')\n .withValueGetter((params: ValueGetterParams) => {\n return `${params.data.amountLeft}`;\n })\n .withNumericMultiFilter(this.getPossibleColumnsValues('amountLeft'))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('amountProduced')\n .withHeaderName('ORDERBOOK.PRODUCED_AMOUNT')\n .withValueGetter((params: ValueGetterParams) => {\n return `${params.data.amountProduced}`;\n })\n .withNumericMultiFilter(this.getPossibleColumnsValues('amountProduced'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('desiredDate')\n .withHeaderName('SALES_ORDERS.DESIRED_DATE')\n .withDate()\n .withDateMultiFilter(this.getPossibleColumnsValues('desiredDate'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('article')\n .withField('article.name', true)\n .withHeaderName('ARTICLES.ARTICLE')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('article'))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('designName')\n .withField('article.design.name', true)\n .withHeaderName('DESIGN_LIBRARY.DETAILS.DESIGN_NAME')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('designName'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('shape')\n .withField('article.design.shape', true)\n .withHeaderName('GENERAL.SHAPE')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getShape(params.data.article?.design?.shape), true)\n .withTextMultiFilter(this.getPossibleColumnsValues('shape'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('designCode')\n .withField('article.design.code', true)\n .withHeaderName('DESIGN_LIBRARY.DETAILS.DESIGN_CODE')\n .withComparator(StringUtils.stringComparator)\n .withTextMultiFilter(this.getPossibleColumnsValues('designCode'))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('missingDesign')\n .withHeaderName('ORDERBOOK.MISSING_DESIGN')\n .withValueGetter((params: ValueGetterParams) => (params.data.missingDesign ? this.translate.instant(this.booleanTrueTranslation) : this.translate.instant(this.booleanFalseTranslation)), true)\n .withBooleanFilter(this.translate.instant(this.booleanFalseTranslation), this.translate.instant(this.booleanTrueTranslation))\n .build()\n ];\n return this.getAdditionalInfoColumnDefs().pipe(\n switchMap((additionalInfoColDefs: ColDef[]) => {\n return of([...colDefsBeforeAdditionalInfo, ...additionalInfoColDefs, ...colDefsAfterAdditionalInfo]);\n })\n );\n }\n\n private getPossibleColumnsValues(columnIdentifier: string): Observable {\n return this.orderbook.getPossibleValues(columnIdentifier).pipe(takeUntil(this.unSubscribeOnViewDestroy));\n }\n\n private getAdditionalInfoValueFromKey(data: any, key: string): string {\n return 'additionalInfo' in data ? data.additionalInfo.find((additionalInfoItem: OrderLineAdditionalInfo) => additionalInfoItem.key === key)?.value ?? '' : '';\n }\n\n private getShape(shape: string): string {\n return FixedShape.getTranslationKeyForShape(shape, this.translate);\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {FixedSchedulePlaceholder} from '@domain/planning-prototype/carpet/fixed-schedule-placeholder';\nimport {OrderCarpet} from '@domain/planning-prototype/carpet/order-carpet';\nimport {RunCarpet} from '@domain/planning-prototype/carpet/run-carpet';\nimport {GenericOrder, PlanningOrderLite} from '@domain/planning-prototype/generic-order.interface';\nimport {GenericRun} from '@domain/planning-prototype/generic-run.interface';\nimport {MaintenanceType} from '@domain/planning-prototype/maintenance-type';\nimport {PlanningEquipment} from '@domain/planning-prototype/planning-equipment';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {PlanningItemForecast} from '@domain/planning-prototype/planning-item-forecast';\nimport {PlanningItemType} from '@domain/planning-prototype/planning-item-type';\nimport {OrderPlastic} from '@domain/planning-prototype/plastic/order-plastic';\nimport {RunPlastic} from '@domain/planning-prototype/plastic/run-plastic';\nimport {CompatibleMachine} from '@domain/planning-prototype/to-plan/compatible-machine';\nimport {FixedScheduleCompatibility} from '@domain/planning-prototype/to-plan/fixed-schedule-compatibility';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {OrderTufting} from '@domain/planning-prototype/tufting/order-tufting';\nimport {RunTufting} from '@domain/planning-prototype/tufting/run-tufting';\nimport {OrderWeaving} from '@domain/planning-prototype/weaving/order-weaving';\nimport {RunWeaving} from '@domain/planning-prototype/weaving/run-weaving';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class PlanningItemHelper {\n public static isDifferentConfig(previous: PlanningItem, next: PlanningItem): boolean {\n if (previous instanceof RunCarpet && next instanceof RunCarpet) {\n return previous.creel?.id !== next.creel?.id || previous.quality?.id !== next.quality?.id || previous.creelMappingFormula !== next.creelMappingFormula;\n }\n if (previous instanceof RunWeaving && next instanceof RunWeaving) {\n return previous.weaveProduct.id !== next.weaveProduct.id;\n }\n if (previous instanceof RunTufting && next instanceof RunTufting) {\n return previous.tuftProduct.id !== next.tuftProduct.id;\n }\n if (previous instanceof RunPlastic && next instanceof RunPlastic) {\n return previous.tool?.id !== next.tool?.id;\n }\n return false;\n }\n\n public static getTimelineStartDate(item: PlanningItem, forecast?: PlanningItemForecast): Date {\n return item.actualStartDate ?? forecast?.estimatedStart;\n }\n\n public static getTimelineEndDate(item: PlanningItem, forecast?: PlanningItemForecast): Date {\n return item.actualEndDate ?? forecast?.estimatedEnd ?? item.estimatedEndDate;\n }\n\n public static getItemName(item: PlanningItem): string {\n if (PlanningItemHelper.isOrderItem(item)) {\n return item.productionOrder?.name ?? item.name;\n }\n if (item instanceof RunWeaving) {\n return item.weaveProduct?.name;\n }\n if (item instanceof RunTufting) {\n return item.tuftProduct?.name;\n }\n if (item instanceof RunPlastic) {\n return item.tool?.name;\n }\n if (item instanceof FixedSchedulePlaceholder) {\n return item.fixedSchedule.name;\n }\n\n return item.name;\n }\n\n public static getItemStatus(item: PlanningItem): ProductionScheduleStatus {\n if (!PlanningItemHelper.isOrderItem(item)) {\n return null;\n }\n\n if (!AssertionUtils.isNullOrUndefined(item.productionOrder)) {\n return item.productionOrder.status;\n }\n\n return AssertionUtils.isNullOrUndefined(item.actualEndDate) ? ProductionScheduleStatus.EXECUTING : ProductionScheduleStatus.EXECUTED;\n }\n\n public static getMaintenanceTypesForMachineType(machineType: MachineType): MaintenanceType[] {\n const result = [MaintenanceType.MAINTENANCE, MaintenanceType.MACHINE_UNAVAILABLE];\n if ([MachineType.CARPET_LOOM, MachineType.CARPET_LOOM_NO_JQ, MachineType.VELVET, MachineType.VELVET_NO_JQ].includes(machineType)) {\n result.push(MaintenanceType.CREEL_CHANGE);\n }\n if ([MachineType.WEAVING_MACHINE, MachineType.TUFT].includes(machineType)) {\n result.push(MaintenanceType.WARP_CHANGE);\n }\n\n return result;\n }\n\n public static getMachineTypesForItem(item: PlanningItem): MachineType[] {\n if (item instanceof RunCarpet || item instanceof OrderCarpet || item instanceof FixedSchedulePlaceholder) {\n return [MachineType.CARPET_LOOM, MachineType.CARPET_LOOM_NO_JQ, MachineType.VELVET, MachineType.VELVET_NO_JQ];\n }\n\n if (item instanceof RunWeaving || item instanceof OrderWeaving) {\n return [MachineType.WEAVING_MACHINE];\n }\n\n if (item instanceof RunTufting || item instanceof OrderTufting) {\n return [MachineType.TUFT];\n }\n\n if (item instanceof RunPlastic || item instanceof OrderPlastic) {\n return [MachineType.PLASTIC_MACHINE];\n }\n\n return [];\n }\n\n public static isOrderItem(item: PlanningItem): item is GenericOrder {\n return item instanceof OrderCarpet || PlanningItemHelper.isOrderLiteItem(item);\n }\n\n public static canBeInRun(item: PlanningItem): item is GenericOrder | FixedSchedulePlaceholder {\n return PlanningItemHelper.isOrderItem(item) || item instanceof FixedSchedulePlaceholder;\n }\n\n public static isOrderLiteItem(item: PlanningItem): item is PlanningOrderLite {\n return item instanceof OrderWeaving || item instanceof OrderTufting || item instanceof OrderPlastic;\n }\n\n public static isRunItem(item: PlanningItem): item is GenericRun {\n return item instanceof RunCarpet || item instanceof RunWeaving || item instanceof RunTufting || item instanceof RunPlastic;\n }\n\n public static getEstimatedProductionTime(toPlan: ProductionOrderToPlan, machine: PlanningEquipment): string {\n return toPlan.compatibleMachines.find((compatibleMachine: CompatibleMachine) => compatibleMachine.machine.id === machine?.id)?.estimatedProductionTime ?? '04:00:00';\n }\n\n public static isTargetItemCompatible(item: GenericOrder, targetItem: PlanningItem): boolean {\n if (!targetItem) {\n return true;\n }\n\n if (item instanceof OrderCarpet && targetItem instanceof RunCarpet) {\n return item.productionOrder?.creel.id === targetItem.creel?.id && item.productionOrder?.quality.id === targetItem.quality?.id && item.creelMappingFormula === targetItem.creelMappingFormula;\n }\n\n if (item instanceof OrderWeaving && targetItem instanceof RunWeaving) {\n return item.productionOrder.weaveProduct.id === targetItem.weaveProduct.id;\n }\n\n if (item instanceof OrderTufting && targetItem instanceof RunTufting) {\n return item.productionOrder.tuftProduct.id === targetItem.tuftProduct.id;\n }\n\n if (item instanceof OrderPlastic && targetItem instanceof RunPlastic) {\n return item.productionOrder.tool?.id === targetItem.tool?.id;\n }\n\n return false;\n }\n\n public static childTypeForRunType(runType: PlanningItemType): PlanningItemType {\n switch (runType) {\n case PlanningItemType.RUN_CARPET:\n return PlanningItemType.ORDER_CARPET;\n case PlanningItemType.RUN_WEAVING:\n return PlanningItemType.ORDER_WEAVING;\n case PlanningItemType.RUN_TUFTING:\n return PlanningItemType.ORDER_TUFTING;\n case PlanningItemType.RUN_PLASTIC:\n return PlanningItemType.ORDER_PLASTIC;\n default:\n throw new Error(`Unable to get child type for ${runType}`);\n }\n }\n\n public static isFixedScheduleCompatible(fixedSchedule: FixedScheduleToPlan, machine: PlanningEquipment, creel?: IdName, machineQuality?: IdName): boolean {\n const machineCompatibility = fixedSchedule.compatibility.find((compatibility: FixedScheduleCompatibility) => compatibility.machine.id === machine.id);\n if (AssertionUtils.isNullOrUndefined(machineCompatibility)) {\n return false;\n }\n if (AssertionUtils.isNullOrUndefined(creel) || AssertionUtils.isNullOrUndefined(machineQuality)) {\n return true;\n }\n return (\n machineCompatibility.creels.some((compatibleCreel: IdName) => compatibleCreel.id === creel.id) &&\n machineCompatibility.qualities.some((compatibleQuality: IdName) => compatibleQuality.id === machineQuality.id)\n );\n }\n}\n","import {DateRange} from '@domain/date-range';\nimport {moment} from '@vdw/angular-component-library';\nimport {filter, first, last} from 'lodash-es';\n\nexport function getItemsForDateRange(items: T[], dateRange: DateRange): T[] {\n const momentDateRange = moment.range(first(dateRange), last(dateRange));\n\n return filter(items, (item: T) => moment.range(item.startDate, item.endDate).overlaps(momentDateRange, {adjacent: true}));\n}\n","import {DateRange} from '@domain/date-range';\nimport {moment} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\n\nexport function getTotalRunningTimeInMsForDateRange(object: T, dateRange: DateRange): number {\n const momentDateRange = moment.range(dateRange);\n const momentItemDateRange = moment.range(object.startDate, object.endDate);\n const intersection = momentDateRange.intersect(momentItemDateRange);\n\n return !isNil(intersection) ? intersection.diff() : 0;\n}\n","import {Drawing} from '@domain/production-schedule/drawing';\nimport {MachineQualityForProductionSchedule} from '@domain/production-schedule/machine-quality-for-production-schedule';\n\nconst THREAD_BY_THREAD_DRAWING_NUMBER_OF_COLUMNS_TO_DROP_FOR_WEFT_SELECTION = 2;\n\nexport function calculateDrawingWidthInDents(drawing: Drawing, machineQuality: MachineQualityForProductionSchedule): number {\n return drawing.threadByThread\n ? (drawing.dimensionsInPixels.widthInPx - THREAD_BY_THREAD_DRAWING_NUMBER_OF_COLUMNS_TO_DROP_FOR_WEFT_SELECTION) /\n (machineQuality.weaveStructure.numberOfGroundYarns / machineQuality.weaveStructure.numberOfCloths)\n : drawing.dimensionsInPixels.widthInPx - machineQuality.numberOfColumnsToDropForWeftSelection;\n}\n","import {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {ListDrawingJute} from '@presentation/components/drawing-list/list-drawing-jute';\nimport {ListDrawingOrderLine} from '@presentation/components/drawing-list/list-drawing-order-line';\nimport {find} from 'lodash-es';\n\nexport function getListDrawingFromProductionScheduleItem(productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup, productionSchedule: ProductionSchedule): ListDrawing {\n let listDrawing: ListDrawing;\n\n if (productionScheduleItemInPathGroup.hasOrderLine()) {\n listDrawing = new ListDrawingOrderLine(find(productionSchedule.orderLines, {id: productionScheduleItemInPathGroup.orderLineId}));\n } else if (productionScheduleItemInPathGroup.scheduleItemType === DrawingType.MANUAL_NON_PRODUCTION_ITEM) {\n listDrawing = new ListDrawingJute(productionScheduleItemInPathGroup.drawing);\n } else {\n listDrawing = new ListDrawingConfiguration(productionScheduleItemInPathGroup.drawing, 0);\n }\n\n return listDrawing;\n}\n","import {Injectable} from '@angular/core';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {\n AlertDialogResult,\n AssertionUtils,\n BackendError,\n BaseComponent,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n DialogBuilderFactoryService,\n DialogType,\n NavigationHelperPrototypeService,\n ToastService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {GridApi} from 'ag-grid-community';\nimport {Observable, switchMap, takeUntil} from 'rxjs';\nimport {BackendErrorCodeEnum} from '../backend-error-code.enum';\n\n@Injectable({providedIn: 'root'})\nexport class RemoveConfirmationService extends BaseComponent {\n public constructor(\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public open(selected: any, deleteCall: Observable, translation: string, api?: GridApi, conflictsCall?: Observable, shouldNavigateBack: boolean = false): void {\n const object = this.getRemoveMessage(selected, translation);\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object}),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.CONFIRM) {\n const selectedRows = Array.isArray(selected) ? selected : [selected];\n\n deleteCall.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe({\n next: () => {\n api?.applyTransaction({remove: selectedRows});\n\n if (selectedRows === api?.getSelectedRows()) {\n api?.deselectAll();\n }\n\n this.openDeletedToast(selectedRows, translation);\n\n if (shouldNavigateBack) {\n this.navigationHelper.navigateBack(selected);\n }\n },\n error: (errorMessage: BackendError) => this.handleDeletionErrorResponse(errorMessage, translation, conflictsCall)\n });\n }\n });\n }\n\n private getRemoveMessage(selected: any, translation?: string): string {\n if (AssertionUtils.isNullOrUndefined(selected) && !AssertionUtils.isNullOrUndefined(translation)) {\n const singular = !Array.isArray(selected) || (Array.isArray(selected) && selected.length < 2);\n return singular ? this.translate.instant(translation, {count: 1}).toLowerCase() : `${selected.length} ${this.translate.instant(translation, {count: 2}).toLowerCase()}`;\n }\n\n return 'name' in selected ? selected.name : selected.technicalName ?? '';\n }\n\n private handleDeletionErrorResponse(errorMessage: BackendError, translation: string, conflictsCall: Observable): void {\n if (\n (BackendErrorCodeEnum[errorMessage?.errorContext?.error?.errorCode as string] === BackendErrorCodeEnum.LINKED_ENTITIES ||\n BackendErrorCodeEnum[errorMessage?.errorContext?.errorCode as string] === BackendErrorCodeEnum.LINKED_ENTITIES) &&\n conflictsCall\n ) {\n this.getConflicts(errorMessage.errorContext.error?.entityName ?? errorMessage.errorContext.entityName, translation, conflictsCall);\n } else {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: this.translate.instant(translation, {count: 1})?.toLowerCase()}),\n messageText: errorMessage.errorContext?.messages?.length > 0 ? errorMessage.errorContext.messages[0] : errorMessage.message,\n type: DialogType.INFORMATION\n });\n }\n }\n\n private openDeletedToast(selectedRows: any[], translation: string): void {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message:\n selectedRows.length > 1\n ? this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT_WITH_AMOUNT', {\n object: this.getRemoveMessage(selectedRows, translation),\n count: 1\n })\n : this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT', {\n object: `${this.translate.instant(translation, {count: 1})} ${this.getRemoveMessage(selectedRows[0])}`,\n count: 1\n })\n });\n }\n\n private getConflicts(entityName: string, translation: string, conflictsCall: Observable): void {\n conflictsCall\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createCannotDeleteData(translation, entityName, conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n}\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router} from '@angular/router';\nimport {RouteData} from '@application/helper/routing/route-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport const canActivatePermissionPrototypeGuard = (route: ActivatedRouteSnapshot): boolean => {\n const router = inject(Router);\n const authentication = inject(AUTHENTICATION);\n const navigationService = inject(NavigationService);\n\n const routeData = route.data as RouteData;\n const currentSubscription = authentication.getCurrentSubscription();\n const hasPermission = AssertionUtils.isNullOrUndefined(routeData?.requiredPermission) || currentSubscription?.hasPermission(routeData.requiredPermission);\n\n if (!hasPermission && !navigationService.checkIsSwitchingSubscription(currentSubscription)) {\n router.navigateByUrl(RouteUtils.paths.unauthorized.absolutePath);\n }\n\n return hasPermission;\n};\n","import {Type} from '@angular/core';\nimport {ActivatedRouteSnapshot, LoadChildrenCallback, Route} from '@angular/router';\nimport {canActivatePermissionPrototypeGuard} from '@application/security/can-activate-permission-prototype.guard';\nimport {canActivatePermissionGuard} from '@application/security/can-activate-permission.guard';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {RouteData} from './route-data.interface';\nimport {RouteNode} from './route-node';\n\nexport class AuthorizedRouteFactory {\n public static createModuleRoute(routeNode: RouteNode, loadChildren: LoadChildrenCallback, data: any = {}): Route {\n return {\n path: routeNode.path,\n loadChildren,\n canActivate: [canActivatePermissionGuard],\n data: {\n requiredPermission: routeNode.requiredPermission,\n ...data\n }\n };\n }\n\n public static createPrototypeModuleRoute(data: RouteData, modulePath: Promise, canActivateGuards: any[] = [], canActivateChild: any[] = [], canLoad: any[] = []): Route {\n const loadChildren = (): any =>\n modulePath.then((m: any) => {\n const module = Object.keys(m).find((key: string) => m[key] instanceof Object);\n\n return m[module];\n });\n\n return {path: data.route, loadChildren, canActivate: this.getActivateGuards(canActivateGuards), data, canActivateChild};\n }\n\n public static createComponentRoute(\n routeNode: RouteNode,\n component: Type,\n data: any = {},\n requiredPermissionFactory: (route: ActivatedRouteSnapshot) => Permission = null,\n canActivateGuards: any[] = [],\n canDeavtivateGuards: any[] = []\n ): Route {\n return {\n path: routeNode.path,\n component,\n canActivate: AssertionUtils.isEmpty(canActivateGuards) ? [canActivatePermissionGuard] : canActivateGuards,\n canDeactivate: canDeavtivateGuards,\n data: AssertionUtils.isNullOrUndefined(requiredPermissionFactory) ? {requiredPermission: routeNode.requiredPermission, ...data} : {requiredPermissionFactory, ...data}\n };\n }\n\n public static createPrototypeComponentRoute(component: Type, data: RouteData, canActivateGuards: any[] = [], canDeactivateGuards: any[] = []): Route {\n return {path: data.route, component, canActivate: this.getActivateGuards(canActivateGuards), canDeactivate: canDeactivateGuards, data};\n }\n\n private static getActivateGuards(canActivateGuards: any[]): any {\n return AssertionUtils.isEmpty(canActivateGuards) ? [canActivatePermissionPrototypeGuard] : [canActivatePermissionPrototypeGuard, ...canActivateGuards];\n }\n}\n","export enum NavigationId {\n TEXFAB,\n PLANNING_MODULE,\n PLANNING_PROTOTYPE_MODULE,\n PRODUCTION_SCHEDULE_MODULE,\n CUSTOMER_MODULE,\n ARTICLE_MODULE,\n SALES_ORDER_MODULE,\n ORDERBOOK_MODULE,\n WEAVING_PRODUCTION_ORDER_MODULE,\n TUFT_PRODUCTION_ORDER_MODULE,\n PLASTIC_PRODUCTION_ORDER_MODULE,\n PATH_LAYOUT_TEMPLATE_MODULE,\n\n PLANNING,\n PLANNING_PROTOTYPE,\n\n CARPET_PRODUCTION_ORDER,\n ADD_CARPET_PRODUCTION_SCHEDULE,\n ADD_CARPET_PRODUCTION_SCHEDULE_NEW,\n ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE,\n ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE_NEW,\n ADD_CARPET_PRODUCTION_SCHEDULE_RUN,\n ADD_CARPET_PRODUCTION_SCHEDULE_RUN_NEW,\n ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION,\n ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION_NEW,\n\n EDIT_CARPET_PRODUCTION_SCHEDULE,\n DUPLICATE_CARPET_PRODUCTION_SCHEDULE,\n\n EDIT_CARPET_PRODUCTION_SCHEDULE_NEW,\n DUPLICATE_CARPET_PRODUCTION_SCHEDULE_NEW,\n\n CARPET_PRODUCTION_SCHEDULE_SETTINGS,\n\n WEAVE_ORDER,\n ADD_WEAVE_ORDER,\n ADD_WEAVE_ORDER_MACHINE,\n ADD_WEAVE_ORDER_RUN,\n EDIT_WEAVE_ORDER,\n DUPLICATE_WEAVE_ORDER,\n WEAVE_ORDER_SETTINGS,\n\n TUFT_ORDER,\n ADD_TUFT_ORDER,\n ADD_TUFT_ORDER_MACHINE,\n ADD_TUFT_ORDER_RUN,\n EDIT_TUFT_ORDER,\n DUPLICATE_TUFT_ORDER,\n TUFT_ORDER_SETTINGS,\n\n PLASTIC_ORDER,\n ADD_PLASTIC_ORDER,\n EDIT_PLASTIC_ORDER,\n DUPLICATE_PLASTIC_ORDER,\n\n PATH_LAYOUT,\n ADD_PATH_LAYOUT,\n EDIT_PATH_LAYOUT,\n DUPLICATE_PATH_LAYOUT,\n PATH_LAYOUT_SETTINGS,\n\n CUSTOMER,\n ADD_CUSTOMER,\n EDIT_CUSTOMER,\n\n ARTICLE,\n ADD_ARTICLE,\n EDIT_ARTICLE,\n DUPLICATE_ARTICLE,\n\n SALES_ORDER,\n ADD_SALES_ORDER,\n EDIT_SALES_ORDER,\n DUPLICATE_SALES_ORDER,\n\n ORDERBOOK,\n ORDERBOOK_SETTINGS,\n\n TEXSTYLE,\n WEAVE_PRODUCT_MODULE,\n TUFT_PRODUCT_MODULE,\n PLASTIC_PRODUCT_MODULE,\n\n UTILITIES,\n TOOL_MODULE,\n BUGGY_MODULE,\n\n TOOL,\n ADD_TOOL,\n EDIT_TOOL,\n DUPLICATE_TOOL,\n\n PLASTIC_PRODUCT,\n ADD_PLASTIC_PRODUCT,\n EDIT_PLASTIC_PRODUCT,\n DUPLICATE_PLASTIC_PRODUCT,\n\n BUGGY,\n ADD_BUGGY,\n EDIT_BUGGY,\n DUPLICATE_BUGGY,\n\n CALENDAR,\n SHIFT_MODULE,\n PATTERN_MODULE,\n SCHEDULE_MODULE,\n\n SHIFT,\n ADD_SHIFT,\n EDIT_SHIFT,\n DUPLICATE_SHIFT,\n\n PATTERN,\n ADD_PATTERN,\n EDIT_PATTERN,\n DUPLICATE_PATTERN,\n\n SCHEDULE,\n ADD_SCHEDULE\n}\n","import {Route} from '@angular/router';\nimport {calendarRoutes} from '@presentation/pages/calendar/calendar.routing';\nimport {patternRoutes} from '@presentation/pages/calendar/pattern/pattern.routing';\nimport {scheduleRoutes} from '@presentation/pages/calendar/schedule/schedule.routing';\nimport {shiftRoutes} from '@presentation/pages/calendar/shift/shift.routing';\nimport {articleRoutes} from '@presentation/pages/texfab/article/article.routing';\nimport {customerRoutes} from '@presentation/pages/texfab/customer/customer.routing';\nimport {orderbookRoutes} from '@presentation/pages/texfab/orderbook/orderbook.routing';\nimport {pathLayoutTemplateRoutes} from '@presentation/pages/texfab/path-layout-template/path-layout-template.routing';\nimport {planningPrototypeRoutes} from '@presentation/pages/texfab/planning-prototype/planning-prototype.routing';\nimport {planningRoutes} from '@presentation/pages/texfab/planning/planning.routing';\nimport {plasticProductionOrderRoutes} from '@presentation/pages/texfab/plastic-production-order/plastic-production-order.routing';\nimport {productionOrderWeavingRoutes} from '@presentation/pages/texfab/production-order-lite/production-order-weaving.routing';\nimport {productionScheduleRoutes} from '@presentation/pages/texfab/production-schedule/production-schedule.routing';\nimport {salesOrderRoutes} from '@presentation/pages/texfab/sales-order/sales-order.routing';\nimport {texfabRoutes} from '@presentation/pages/texfab/texfab.routing';\nimport {tuftProductionOrderRoutes} from '@presentation/pages/texfab/tuft-production-order/tuft-production-order.routing';\nimport {buggyRoutes} from '@presentation/pages/textile-data/buggy/buggy.routing';\nimport {plasticProductRoutes} from '@presentation/pages/textile-data/plastic-product/plastic-product.routing';\nimport {textileDataRoutes} from '@presentation/pages/textile-data/textile-data.routing';\nimport {toolRoutes} from '@presentation/pages/utilities/tool/tool.routing';\nimport {utilitiesRoutes} from '@presentation/pages/utilities/utilities.routing';\nimport {PrototypeRouteUtils} from '@vdw/angular-component-library';\nimport {routes} from '../../../app.routing';\nimport {NavigationId} from './navigation-id.enum';\nimport {RouteData} from './route-data.interface';\n\nexport class NavigationUtils {\n private static readonly cachedRoutes = [\n ...routes,\n ...texfabRoutes,\n ...planningRoutes,\n ...planningPrototypeRoutes,\n ...productionScheduleRoutes,\n ...customerRoutes,\n ...articleRoutes,\n ...salesOrderRoutes,\n ...orderbookRoutes,\n ...productionOrderWeavingRoutes,\n ...tuftProductionOrderRoutes,\n ...plasticProductionOrderRoutes,\n ...pathLayoutTemplateRoutes,\n ...textileDataRoutes,\n ...utilitiesRoutes,\n ...toolRoutes,\n ...plasticProductRoutes,\n ...buggyRoutes,\n ...calendarRoutes,\n ...shiftRoutes,\n ...patternRoutes,\n ...scheduleRoutes\n ];\n\n public static getNavigationRoute(id: NavigationId): Route {\n return NavigationUtils.cachedRoutes.find((route: Route) => route.data?.id === id);\n }\n\n public static getNavigationData(id: NavigationId): RouteData {\n return NavigationUtils.cachedRoutes.find((route: Route) => route.data?.id === id)?.data as RouteData;\n }\n\n public static getMultiNavigationData(ids: NavigationId[]): RouteData[] {\n return NavigationUtils.cachedRoutes.filter((route: Route) => ids.includes(route.data?.id)).map((route: Route) => route?.data as RouteData);\n }\n\n public static getAbsoluteNavigationData(id: NavigationId): RouteData {\n const item = NavigationUtils.cachedRoutes.find((route: Route) => route.data?.id === id)?.data as RouteData;\n\n return {\n id: item.id,\n icon: item.icon,\n reuse: item.reuse,\n parentId: item.parentId,\n navigationKey: item.navigationKey,\n route: NavigationUtils.getAbsolutePath(id),\n requiredPermission: item.requiredPermission\n } as RouteData;\n }\n\n public static getRoute(id: NavigationId): string {\n return (NavigationUtils.cachedRoutes.find((route: Route) => route.data?.id === id)?.data as RouteData).route;\n }\n\n public static getAbsolutePath(id: NavigationId): string {\n return PrototypeRouteUtils.getAbsolutePath(NavigationUtils.cachedRoutes, id);\n }\n}\n","import {Permission} from '@domain/profile/permission.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport abstract class RouteNode {\n private readonly _path: string;\n private readonly _requiredPermission: Permission;\n private readonly _isMobileFriendly: boolean;\n private readonly _isMobileOnly: boolean;\n private _parent: RouteNode;\n\n protected constructor(path: string, requiredPermission: Permission, isMobileFriendly: boolean = false, isMobileOnly: boolean = false) {\n this._path = path;\n this._requiredPermission = requiredPermission;\n this._isMobileFriendly = isMobileFriendly;\n this._isMobileOnly = isMobileOnly;\n }\n\n public get parent(): RouteNode {\n return this._parent;\n }\n\n public set parent(parent: RouteNode) {\n this._parent = parent;\n }\n\n public get path(): string {\n return this._path;\n }\n\n public get requiredPermission(): Permission {\n return this._requiredPermission;\n }\n\n public get isMobileFriendly(): boolean {\n return this._isMobileFriendly;\n }\n\n public get isMobileOnly(): boolean {\n return this._isMobileOnly;\n }\n\n public get hasParameter(): boolean {\n return this._path.includes('/:');\n }\n\n public get amountOfRouteParameters(): number {\n return this.hasParameter ? this._path.match(/\\/:/g).length : 0;\n }\n\n public get absolutePath(): string {\n return RouteNode.getAbsolutePath(this);\n }\n\n private static getAbsolutePath(node: RouteNode, accumulatedPath: string = ''): string {\n let result = node.path + accumulatedPath;\n\n if (!AssertionUtils.isEmpty(node.path)) {\n result = '/' + result;\n }\n\n if (node.parent) {\n result = RouteNode.getAbsolutePath(node.parent, result);\n }\n\n return result;\n }\n\n public matchesPath(path: string): boolean {\n return this.hasParameter ? this.path.startsWith(path) : this.path === path;\n }\n\n public getRoutes(): RouteNode[] {\n const mappedKeys = Object.keys(this).map((key: string) => this[key]);\n\n return mappedKeys.filter((property: RouteNode[] | RouteNode | Record) => typeof property === 'object' && !(property instanceof Array));\n }\n\n public abstract isKnownPath(pathSegments: string[]): boolean;\n}\n","import {RouteNode} from '@application/helper/routing/route-node';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class RouteBranch extends RouteNode {\n private _children: RouteNode[] = [];\n\n public constructor(path: string, requiredPermission?: Permission, isMobileFriendly: boolean = false) {\n super(path, requiredPermission, isMobileFriendly);\n }\n\n public get children(): RouteNode[] {\n return this._children;\n }\n\n public add(node: RouteNode): void {\n this._children.push(node);\n node.parent = this;\n }\n\n public remove(node: RouteNode): void {\n const componentIndex = this._children.indexOf(node);\n if (componentIndex >= 0) {\n this._children.splice(componentIndex, 1);\n node.parent = null;\n }\n }\n\n public replace(node: RouteNode, replacement: RouteNode): void {\n if (node !== replacement) {\n if (!AssertionUtils.isNullOrUndefined(node)) {\n this.remove(node);\n }\n this.add(replacement);\n }\n }\n\n public isKnownPath(pathSegments: string[]): boolean {\n let result = false;\n const firstPathSegment = pathSegments[0];\n result = this.matchesPath(firstPathSegment);\n if (result && pathSegments?.length > 1) {\n pathSegments.splice(0, this.hasParameter ? this.amountOfRouteParameters : 1);\n result = this._children?.some((routeNode: RouteNode) => routeNode.isKnownPath(pathSegments));\n }\n return result;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ArticleRoute extends RouteBranch {\n private _addArticle: RouteLeaf;\n private _duplicateArticle: RouteLeaf;\n private _editArticle: RouteLeaf;\n\n public get addArticle(): RouteLeaf {\n return this._addArticle;\n }\n\n public set addArticle(value: RouteLeaf) {\n this.replace(this._addArticle, value);\n this._addArticle = value;\n }\n\n public get duplicateArticle(): RouteLeaf {\n return this._duplicateArticle;\n }\n\n public set duplicateArticle(value: RouteLeaf) {\n this.replace(this._duplicateArticle, value);\n this._duplicateArticle = value;\n }\n\n public get editArticle(): RouteLeaf {\n return this._editArticle;\n }\n\n public set editArticle(value: RouteLeaf) {\n this.replace(this._editArticle, value);\n this._editArticle = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ColorRoute extends RouteBranch {\n private _addColor: RouteLeaf;\n private _duplicateColor: RouteLeaf;\n private _editColor: RouteLeaf;\n private _colorSettings: RouteLeaf;\n\n public get addColor(): RouteLeaf {\n return this._addColor;\n }\n\n public set addColor(value: RouteLeaf) {\n this.replace(this._addColor, value);\n this._addColor = value;\n }\n\n public get duplicateColor(): RouteLeaf {\n return this._duplicateColor;\n }\n\n public set duplicateColor(value: RouteLeaf) {\n this.replace(this._duplicateColor, value);\n this._duplicateColor = value;\n }\n\n public get editColor(): RouteLeaf {\n return this._editColor;\n }\n\n public set editColor(value: RouteLeaf) {\n this.replace(this._editColor, value);\n this._editColor = value;\n }\n\n public get colorSettings(): RouteLeaf {\n return this._colorSettings;\n }\n\n public set colorSettings(value: RouteLeaf) {\n this.replace(this._colorSettings, value);\n this._colorSettings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ColorSetRoute extends RouteBranch {\n private _addColorSet: RouteLeaf;\n private _duplicateColorSet: RouteLeaf;\n private _editColorSet: RouteLeaf;\n private _colorSetSettings: RouteLeaf;\n\n public get addColorSet(): RouteLeaf {\n return this._addColorSet;\n }\n\n public set addColorSet(value: RouteLeaf) {\n this.replace(this._addColorSet, value);\n this._addColorSet = value;\n }\n\n public get duplicateColorSet(): RouteLeaf {\n return this._duplicateColorSet;\n }\n\n public set duplicateColorSet(value: RouteLeaf) {\n this.replace(this._duplicateColorSet, value);\n this._duplicateColorSet = value;\n }\n\n public get editColorSet(): RouteLeaf {\n return this._editColorSet;\n }\n\n public set editColorSet(value: RouteLeaf) {\n this.replace(this._editColorSet, value);\n this._editColorSet = value;\n }\n\n public get colorSetSettings(): RouteLeaf {\n return this._colorSetSettings;\n }\n\n public set colorSetSettings(value: RouteLeaf) {\n this.replace(this._colorSetSettings, value);\n this._colorSetSettings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ColoredYarnSetRoute extends RouteBranch {\n private _addColoredYarnSet: RouteLeaf;\n private _duplicateColoredYarnSet: RouteLeaf;\n private _editColoredYarnSet: RouteLeaf;\n\n public get addColoredYarnSet(): RouteLeaf {\n return this._addColoredYarnSet;\n }\n\n public set addColoredYarnSet(value: RouteLeaf) {\n this.replace(this._addColoredYarnSet, value);\n this._addColoredYarnSet = value;\n }\n\n public get duplicateColoredYarnSet(): RouteLeaf {\n return this._duplicateColoredYarnSet;\n }\n\n public set duplicateColoredYarnSet(value: RouteLeaf) {\n this.replace(this._duplicateColoredYarnSet, value);\n this._duplicateColoredYarnSet = value;\n }\n\n public get editColoredYarnSet(): RouteLeaf {\n return this._editColoredYarnSet;\n }\n\n public set editColoredYarnSet(value: RouteLeaf) {\n this.replace(this._editColoredYarnSet, value);\n this._editColoredYarnSet = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class CreelRoute extends RouteBranch {\n private _addCreel: RouteLeaf;\n private _duplicateCreel: RouteLeaf;\n private _editCreel: RouteLeaf;\n private _creelSettings: RouteLeaf;\n\n public get addCreel(): RouteLeaf {\n return this._addCreel;\n }\n\n public set addCreel(value: RouteLeaf) {\n this.replace(this._addCreel, value);\n this._addCreel = value;\n }\n\n public get duplicateCreel(): RouteLeaf {\n return this._duplicateCreel;\n }\n\n public set duplicateCreel(value: RouteLeaf) {\n this.replace(this._duplicateCreel, value);\n this._duplicateCreel = value;\n }\n\n public get editCreel(): RouteLeaf {\n return this._editCreel;\n }\n\n public set editCreel(value: RouteLeaf) {\n this.replace(this._editCreel, value);\n this._editCreel = value;\n }\n\n public get creelSettings(): RouteLeaf {\n return this._creelSettings;\n }\n\n public set creelSettings(value: RouteLeaf) {\n this.replace(this._creelSettings, value);\n this._creelSettings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class FinishingTemplateRoute extends RouteBranch {\n private _addFinishingTemplate: RouteLeaf;\n private _duplicateFinishingTemplate: RouteLeaf;\n private _editFinishingTemplate: RouteLeaf;\n\n public get addFinishingTemplate(): RouteLeaf {\n return this._addFinishingTemplate;\n }\n\n public set addFinishingTemplate(value: RouteLeaf) {\n this.replace(this._addFinishingTemplate, value);\n this._addFinishingTemplate = value;\n }\n\n public get duplicateFinishingTemplate(): RouteLeaf {\n return this._duplicateFinishingTemplate;\n }\n\n public set duplicateFinishingTemplate(value: RouteLeaf) {\n this.replace(this._duplicateFinishingTemplate, value);\n this._duplicateFinishingTemplate = value;\n }\n\n public get editFinishingTemplate(): RouteLeaf {\n return this._editFinishingTemplate;\n }\n\n public set editFinishingTemplate(value: RouteLeaf) {\n this.replace(this._editFinishingTemplate, value);\n this._editFinishingTemplate = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class MachineQualityRoute extends RouteBranch {\n private _addMachineQuality: RouteLeaf;\n private _duplicateMachineQuality: RouteLeaf;\n private _editMachineQuality: RouteLeaf;\n private _addFinishing: RouteLeaf;\n private _addFinishingFromQuality: RouteLeaf;\n private _duplicateFinishing: RouteLeaf;\n private _editFinishing: RouteLeaf;\n private _editFinishingFromQuality: RouteLeaf;\n\n public get addMachineQuality(): RouteLeaf {\n return this._addMachineQuality;\n }\n\n public set addMachineQuality(value: RouteLeaf) {\n this.replace(this._addMachineQuality, value);\n this._addMachineQuality = value;\n }\n\n public get duplicateMachineQuality(): RouteLeaf {\n return this._duplicateMachineQuality;\n }\n\n public set duplicateMachineQuality(value: RouteLeaf) {\n this.replace(this._duplicateMachineQuality, value);\n this._duplicateMachineQuality = value;\n }\n\n public get editMachineQuality(): RouteLeaf {\n return this._editMachineQuality;\n }\n\n public set editMachineQuality(value: RouteLeaf) {\n this.replace(this._editMachineQuality, value);\n this._editMachineQuality = value;\n }\n\n public get addFinishing(): RouteLeaf {\n return this._addFinishing;\n }\n\n public set addFinishing(value: RouteLeaf) {\n this.replace(this._addFinishing, value);\n this._addFinishing = value;\n }\n\n public get addFinishingFromQuality(): RouteLeaf {\n return this._addFinishingFromQuality;\n }\n\n public set addFinishingFromQuality(value: RouteLeaf) {\n this.replace(this._addFinishingFromQuality, value);\n this._addFinishingFromQuality = value;\n }\n\n public get duplicateFinishing(): RouteLeaf {\n return this._duplicateFinishing;\n }\n\n public set duplicateFinishing(value: RouteLeaf) {\n this.replace(this._duplicateFinishing, value);\n this._duplicateFinishing = value;\n }\n\n public get editFinishing(): RouteLeaf {\n return this._editFinishing;\n }\n\n public set editFinishing(value: RouteLeaf) {\n this.replace(this._editFinishing, value);\n this._editFinishing = value;\n }\n\n public get editFinishingFromQuality(): RouteLeaf {\n return this._editFinishingFromQuality;\n }\n\n public set editFinishingFromQuality(value: RouteLeaf) {\n this.replace(this._editFinishingFromQuality, value);\n this._editFinishingFromQuality = value;\n }\n}\n","import {ComponentsRoute} from '@application/helper/routing/components-route';\nimport {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\nimport {RouteNode} from '@application/helper/routing/route-node';\nimport {TexBiRoute} from '@application/helper/routing/tex-bi-route';\nimport {TexBotRoute} from '@application/helper/routing/tex-bot-route';\nimport {TexEditRoute} from '@application/helper/routing/tex-edit-route';\nimport {TexFabRoute} from '@application/helper/routing/tex-fab-route';\nimport {TexStateRoute} from '@application/helper/routing/tex-state-route';\nimport {TexStyleRoute} from '@application/helper/routing/tex-style-route';\nimport {CalendarRoute} from './calendar-route';\nimport {ProfileRoute} from './profile-route';\nimport {SettingsRoute} from './settings-route';\nimport {UtilitiesRoute} from './utilities-route';\n\nexport class RootRoute extends RouteBranch {\n private _login: RouteLeaf;\n private _texEdit: TexEditRoute;\n private _texState: TexStateRoute;\n private _texBi: TexBiRoute;\n private _profile: ProfileRoute;\n private _help: RouteLeaf;\n private _unauthorized: RouteLeaf;\n private _notFound: RouteLeaf;\n private _credits: RouteLeaf;\n private _texStyle: TexStyleRoute;\n private _texFab: TexFabRoute;\n private _calendar: CalendarRoute;\n private _texBot: TexBotRoute;\n private _utilities: UtilitiesRoute;\n private _components: ComponentsRoute;\n private _loadingFile: RouteLeaf;\n private _logger: RouteLeaf;\n private _processes: RouteLeaf;\n private _settings: SettingsRoute;\n private _notifications: RouteLeaf;\n\n public get login(): RouteLeaf {\n return this._login;\n }\n\n public set login(value: RouteLeaf) {\n this.replace(this._login, value);\n this._login = value;\n }\n\n public get texEdit(): TexEditRoute {\n return this._texEdit;\n }\n\n public set texEdit(value: TexEditRoute) {\n this.replace(this._texEdit, value);\n this._texEdit = value;\n }\n\n public get texState(): TexStateRoute {\n return this._texState;\n }\n\n public set texState(value: TexStateRoute) {\n this.replace(this._texState, value);\n this._texState = value;\n }\n\n public get texBi(): TexBiRoute {\n return this._texBi;\n }\n\n public set texBi(value: TexBiRoute) {\n this.replace(this._texBi, value);\n this._texBi = value;\n }\n\n public get profile(): ProfileRoute {\n return this._profile;\n }\n\n public set profile(value: ProfileRoute) {\n this.replace(this._profile, value);\n this._profile = value;\n }\n\n public get help(): RouteLeaf {\n return this._help;\n }\n\n public set help(value: RouteLeaf) {\n this.replace(this._help, value);\n this._help = value;\n }\n\n public get unauthorized(): RouteLeaf {\n return this._unauthorized;\n }\n\n public set unauthorized(value: RouteLeaf) {\n this.replace(this._unauthorized, value);\n this._unauthorized = value;\n }\n\n public get notFound(): RouteLeaf {\n return this._notFound;\n }\n\n public set notFound(value: RouteLeaf) {\n this.replace(this._notFound, value);\n this._notFound = value;\n }\n\n public get credits(): RouteLeaf {\n return this._credits;\n }\n\n public set credits(value: RouteLeaf) {\n this.replace(this._credits, value);\n this._credits = value;\n }\n\n public get texStyle(): TexStyleRoute {\n return this._texStyle;\n }\n\n public set texStyle(value: TexStyleRoute) {\n this.replace(this._texStyle, value);\n this._texStyle = value;\n }\n\n public get texFab(): TexFabRoute {\n return this._texFab;\n }\n\n public set texFab(value: TexFabRoute) {\n this.replace(this._texFab, value);\n this._texFab = value;\n }\n\n public get calendar(): CalendarRoute {\n return this._calendar;\n }\n\n public set calendar(value: CalendarRoute) {\n this.replace(this._calendar, value);\n this._calendar = value;\n }\n\n public get texBot(): TexBotRoute {\n return this._texBot;\n }\n\n public set texBot(value: TexBotRoute) {\n this.replace(this._texBot, value);\n this._texBot = value;\n }\n\n public get utilities(): UtilitiesRoute {\n return this._utilities;\n }\n\n public set utilities(value: UtilitiesRoute) {\n this.replace(this._utilities, value);\n this._utilities = value;\n }\n\n public get components(): ComponentsRoute {\n return this._components;\n }\n\n public set components(value: ComponentsRoute) {\n this.replace(this._components, value);\n this._components = value;\n }\n\n public get loadingFile(): RouteLeaf {\n return this._loadingFile;\n }\n\n public set loadingFile(value: RouteLeaf) {\n this.replace(this._loadingFile, value);\n this._loadingFile = value;\n }\n\n public get logger(): RouteLeaf {\n return this._logger;\n }\n\n public set logger(value: RouteLeaf) {\n this.replace(this._logger, value);\n this._logger = value;\n }\n\n public get processes(): RouteLeaf {\n return this._processes;\n }\n\n public set processes(value: RouteLeaf) {\n this.replace(this._processes, value);\n this._processes = value;\n }\n\n public get settings(): SettingsRoute {\n return this._settings;\n }\n\n public set settings(value: SettingsRoute) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n\n public get notifications(): RouteLeaf {\n return this._notifications;\n }\n\n public set notifications(value: RouteLeaf) {\n this.replace(this._notifications, value);\n this._notifications = value;\n }\n\n public isKnownPath(pathSegments: string[]): boolean {\n return this.getRoutes()?.some((routeNode: RouteNode) => routeNode.isKnownPath(pathSegments));\n }\n}\n","import {RouteNode} from '@application/helper/routing/route-node';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {first} from 'lodash-es';\n\nexport class RouteLeaf extends RouteNode {\n public constructor(path: string, requiredPermission?: Permission, isMobileFriendly: boolean = false, isMobileOnly: boolean = false) {\n super(path, requiredPermission, isMobileFriendly, isMobileOnly);\n }\n\n public isKnownPath(pathSegments: string[]): boolean {\n return this.matchesPath(first(pathSegments));\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class SalesOrderRoute extends RouteBranch {\n private _addSalesOrder: RouteLeaf;\n private _editSalesOrder: RouteLeaf;\n private _duplicateSalesOrder: RouteLeaf;\n\n public get addSalesOrder(): RouteLeaf {\n return this._addSalesOrder;\n }\n\n public set addSalesOrder(value: RouteLeaf) {\n this.replace(this._addSalesOrder, value);\n this._addSalesOrder = value;\n }\n\n public get editSalesOrder(): RouteLeaf {\n return this._editSalesOrder;\n }\n\n public set editSalesOrder(value: RouteLeaf) {\n this.replace(this._editSalesOrder, value);\n this._editSalesOrder = value;\n }\n\n public get duplicateSalesOrder(): RouteLeaf {\n return this._duplicateSalesOrder;\n }\n\n public set duplicateSalesOrder(value: RouteLeaf) {\n this.replace(this._duplicateSalesOrder, value);\n this._duplicateSalesOrder = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class TexBiRoute extends RouteBranch {\n private _reports: RouteLeaf;\n private _bmsreports: RouteLeaf;\n private _windervibrationreport: RouteLeaf;\n private _qmreports: RouteLeaf;\n private _wmreports: RouteLeaf;\n private _emreports: RouteLeaf;\n private _machineEventBoard: RouteLeaf;\n private _winderVibrationForm: RouteLeaf;\n\n public get reports(): RouteLeaf {\n return this._reports;\n }\n\n public set reports(value: RouteLeaf) {\n this.replace(this._reports, value);\n this._reports = value;\n }\n\n public get windervibrationreport(): RouteLeaf {\n return this._windervibrationreport;\n }\n\n public set windervibrationreport(value: RouteLeaf) {\n this.replace(this._windervibrationreport, value);\n this._windervibrationreport = value;\n }\n\n public get bmsreports(): RouteLeaf {\n return this._bmsreports;\n }\n\n public set bmsreports(value: RouteLeaf) {\n this.replace(this._bmsreports, value);\n this._bmsreports = value;\n }\n\n public get qmreports(): RouteLeaf {\n return this._qmreports;\n }\n\n public set qmreports(value: RouteLeaf) {\n this.replace(this._qmreports, value);\n this._qmreports = value;\n }\n\n public get wmreports(): RouteLeaf {\n return this._wmreports;\n }\n\n public set wmreports(value: RouteLeaf) {\n this.replace(this._wmreports, value);\n this._wmreports = value;\n }\n\n public get emreports(): RouteLeaf {\n return this._emreports;\n }\n\n public set emreports(value: RouteLeaf) {\n this.replace(this._emreports, value);\n this._emreports = value;\n }\n\n public get machineEventBoard(): RouteLeaf {\n return this._machineEventBoard;\n }\n\n public set machineEventBoard(value: RouteLeaf) {\n this.replace(this._machineEventBoard, value);\n this._machineEventBoard = value;\n }\n\n public get winderVibrationForm(): RouteLeaf {\n return this._winderVibrationForm;\n }\n\n public set winderVibrationForm(value: RouteLeaf) {\n this.replace(this._winderVibrationForm, value);\n this._winderVibrationForm = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {TexBotMachineDocumentationRoute} from './tex-bot-machine-documentation-route';\nimport {TexBotTrainingRoute} from './tex-bot-training-route';\n\nexport class TexBotRoute extends RouteBranch {\n private _machineDocumentation: TexBotMachineDocumentationRoute;\n private _training: TexBotTrainingRoute;\n\n public get machineDocumentation(): TexBotMachineDocumentationRoute {\n return this._machineDocumentation;\n }\n\n public set machineDocumentation(value: TexBotMachineDocumentationRoute) {\n this.replace(this._machineDocumentation, value);\n this._machineDocumentation = value;\n }\n\n public get training(): TexBotTrainingRoute {\n return this._training;\n }\n\n public set training(value: TexBotTrainingRoute) {\n this.replace(this._training, value);\n this._training = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class TexEditRoute extends RouteBranch {\n private _dataSheets: RouteLeaf;\n private _dataSheetDetails: RouteLeaf;\n private _designLibrary: RouteLeaf;\n private _designLibrarySettings: RouteLeaf;\n private _addDesign: RouteLeaf;\n private _productConfiguration: RouteLeaf;\n private _addProductConfiguration: RouteLeaf;\n private _editProductConfiguration: RouteLeaf;\n private _duplicateProductConfiguration: RouteLeaf;\n private _productConfigurationSettings: RouteLeaf;\n private _tuftLink: RouteLeaf;\n\n public get dataSheets(): RouteLeaf {\n return this._dataSheets;\n }\n\n public set dataSheets(value: RouteLeaf) {\n this.replace(this._dataSheets, value);\n this._dataSheets = value;\n }\n\n public get dataSheetDetails(): RouteLeaf {\n return this._dataSheetDetails;\n }\n\n public set dataSheetDetails(value: RouteLeaf) {\n this.replace(this._dataSheetDetails, value);\n this._dataSheetDetails = value;\n }\n\n public get designLibrary(): RouteLeaf {\n return this._designLibrary;\n }\n\n public set designLibrary(value: RouteLeaf) {\n this.replace(this._designLibrary, value);\n this._designLibrary = value;\n }\n\n public get designLibrarySettings(): RouteLeaf {\n return this._designLibrarySettings;\n }\n\n public set designLibrarySettings(value: RouteLeaf) {\n this.replace(this._designLibrarySettings, value);\n this._designLibrarySettings = value;\n }\n\n public get addDesign(): RouteLeaf {\n return this._addDesign;\n }\n\n public set addDesign(value: RouteLeaf) {\n this.replace(this._addDesign, value);\n this._addDesign = value;\n }\n\n public get productConfiguration(): RouteLeaf {\n return this._productConfiguration;\n }\n\n public set productConfiguration(value: RouteLeaf) {\n this.replace(this._productConfiguration, value);\n this._productConfiguration = value;\n }\n\n public get addProductConfiguration(): RouteLeaf {\n return this._addProductConfiguration;\n }\n\n public set addProductConfiguration(value: RouteLeaf) {\n this.replace(this._addProductConfiguration, value);\n this._addProductConfiguration = value;\n }\n\n public get editProductConfiguration(): RouteLeaf {\n return this._editProductConfiguration;\n }\n\n public set editProductConfiguration(value: RouteLeaf) {\n this.replace(this._editProductConfiguration, value);\n this._editProductConfiguration = value;\n }\n\n public get duplicateProductConfiguration(): RouteLeaf {\n return this._duplicateProductConfiguration;\n }\n\n public set duplicateProductConfiguration(value: RouteLeaf) {\n this.replace(this._duplicateProductConfiguration, value);\n this._duplicateProductConfiguration = value;\n }\n\n public get productConfigurationSettings(): RouteLeaf {\n return this._productConfigurationSettings;\n }\n\n public set productConfigurationSettings(value: RouteLeaf) {\n this.replace(this._productConfigurationSettings, value);\n this._productConfigurationSettings = value;\n }\n\n public get tuftLink(): RouteLeaf {\n return this._tuftLink;\n }\n\n public set tuftLink(value: RouteLeaf) {\n this.replace(this._tuftLink, value);\n this._tuftLink = value;\n }\n}\n","import {ArticleRoute} from '@application/helper/routing/article-route';\nimport {RouteBranch} from '@application/helper/routing/route-branch';\nimport {SalesOrderRoute} from '@application/helper/routing/sales-order-route';\nimport {CustomerRoute} from './customer-route';\nimport {OrderbookRoute} from './orderbook-route';\nimport {PathLayoutTemplateRoute} from './path-layout-template.route';\nimport {PlanningPrototypeRoute} from './planning-prototype-route';\nimport {PlanningRoute} from './planning-route';\nimport {ProductionOrderRoute} from './production-order.route';\nimport {TuftingRoute} from './tufting-route';\nimport {WeavingRoute} from './weaving.route';\nimport {PlasticRoute} from './plastic-route';\n\nexport class TexFabRoute extends RouteBranch {\n private _productionOrder: ProductionOrderRoute;\n private _customer: CustomerRoute;\n private _planning: PlanningRoute;\n private _planningPrototype: PlanningPrototypeRoute;\n private _article: ArticleRoute;\n private _salesOrder: SalesOrderRoute;\n private _orderbook: OrderbookRoute;\n private _weaving: WeavingRoute;\n private _tufting: TuftingRoute;\n private _plastic: PlasticRoute;\n private _pathLayoutTemplate: PathLayoutTemplateRoute;\n\n public get productionOrder(): ProductionOrderRoute {\n return this._productionOrder;\n }\n\n public set productionOrder(value: ProductionOrderRoute) {\n this.replace(this._productionOrder, value);\n this._productionOrder = value;\n }\n\n public get customer(): CustomerRoute {\n return this._customer;\n }\n\n public set customer(value: CustomerRoute) {\n this.replace(this._customer, value);\n this._customer = value;\n }\n\n public get planning(): PlanningRoute {\n return this._planning;\n }\n\n public set planning(value: PlanningRoute) {\n this.replace(this._planning, value);\n this._planning = value;\n }\n\n public get planningPrototype(): PlanningPrototypeRoute {\n return this._planningPrototype;\n }\n\n public set planningPrototype(value: PlanningPrototypeRoute) {\n this.replace(this._planningPrototype, value);\n this._planningPrototype = value;\n }\n\n public get article(): ArticleRoute {\n return this._article;\n }\n\n public set article(value: ArticleRoute) {\n this.replace(this._article, value);\n this._article = value;\n }\n\n public get salesOrder(): SalesOrderRoute {\n return this._salesOrder;\n }\n\n public set salesOrder(value: SalesOrderRoute) {\n this.replace(this._salesOrder, value);\n this._salesOrder = value;\n }\n\n public get orderbook(): OrderbookRoute {\n return this._orderbook;\n }\n\n public set orderbook(value: OrderbookRoute) {\n this.replace(this._orderbook, value);\n this._orderbook = value;\n }\n\n public get weaving(): WeavingRoute {\n return this._weaving;\n }\n\n public set weaving(value: WeavingRoute) {\n this.replace(this._weaving, value);\n this._weaving = value;\n }\n\n public get tufting(): TuftingRoute {\n return this._tufting;\n }\n\n public set tufting(value: TuftingRoute) {\n this.replace(this._tufting, value);\n this._tufting = value;\n }\n\n public get plastic(): PlasticRoute {\n return this._plastic;\n }\n\n public set plastic(value: PlasticRoute) {\n this.replace(this._plastic, value);\n this._plastic = value;\n }\n\n public get pathLayoutTemplate(): PathLayoutTemplateRoute {\n return this._pathLayoutTemplate;\n }\n\n public set pathLayoutTemplate(value: PathLayoutTemplateRoute) {\n this.replace(this._pathLayoutTemplate, value);\n this._pathLayoutTemplate = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class TexStateRoute extends RouteBranch {\n private _settings: RouteLeaf;\n private _editMachine: RouteLeaf;\n private _kiosk: RouteLeaf;\n private _addTemplate: RouteLeaf;\n private _editTemplate: RouteLeaf;\n private _duplicateTemplate: RouteLeaf;\n private _addWeavingMachineType: RouteLeaf;\n private _addTuftingMachineType: RouteLeaf;\n private _addWinderMachineType: RouteLeaf;\n private _addDyeingMachineType: RouteLeaf;\n private _addPlasticMachineType: RouteLeaf;\n private _prototype: RouteLeaf;\n\n public get editMachine(): RouteLeaf {\n return this._editMachine;\n }\n\n public set editMachine(value: RouteLeaf) {\n this.replace(this._editMachine, value);\n this._editMachine = value;\n }\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n\n public get addTemplate(): RouteLeaf {\n return this._addTemplate;\n }\n\n public set addTemplate(value: RouteLeaf) {\n this.replace(this._addTemplate, value);\n this._addTemplate = value;\n }\n\n public get editTemplate(): RouteLeaf {\n return this._editTemplate;\n }\n\n public set editTemplate(value: RouteLeaf) {\n this.replace(this._editTemplate, value);\n this._editTemplate = value;\n }\n\n public get duplicateTemplate(): RouteLeaf {\n return this._duplicateTemplate;\n }\n\n public set duplicateTemplate(value: RouteLeaf) {\n this.replace(this._duplicateTemplate, value);\n this._duplicateTemplate = value;\n }\n\n public get kiosk(): RouteLeaf {\n return this._kiosk;\n }\n\n public set kiosk(value: RouteLeaf) {\n this.replace(this._kiosk, value);\n this._kiosk = value;\n }\n\n public get addWeavingMachineType(): RouteLeaf {\n return this._addWeavingMachineType;\n }\n\n public set addWeavingMachineType(value: RouteLeaf) {\n this.replace(this._addWeavingMachineType, value);\n this._addWeavingMachineType = value;\n }\n\n public get addTuftingMachineType(): RouteLeaf {\n return this._addTuftingMachineType;\n }\n\n public set addTuftingMachineType(value: RouteLeaf) {\n this.replace(this._addTuftingMachineType, value);\n this._addTuftingMachineType = value;\n }\n\n public get addWinderMachineType(): RouteLeaf {\n return this._addWinderMachineType;\n }\n\n public set addWinderMachineType(value: RouteLeaf) {\n this.replace(this._addWinderMachineType, value);\n this._addWinderMachineType = value;\n }\n\n public get addDyeingMachineType(): RouteLeaf {\n return this._addDyeingMachineType;\n }\n\n public set addDyeingMachineType(value: RouteLeaf) {\n this.replace(this._addDyeingMachineType, value);\n this._addDyeingMachineType = value;\n }\n\n public get addPlasticMachineType(): RouteLeaf {\n return this._addPlasticMachineType;\n }\n\n public set addPlasticMachineType(value: RouteLeaf) {\n this.replace(this._addPlasticMachineType, value);\n this._addPlasticMachineType = value;\n }\n\n public get prototype(): RouteLeaf {\n return this._prototype;\n }\n\n public set prototype(value: RouteLeaf) {\n this.replace(this._prototype, value);\n this._prototype = value;\n }\n}\n","import {ColorRoute} from '@application/helper/routing/color-route';\nimport {ColorSetRoute} from '@application/helper/routing/color-set-route';\nimport {ColoredYarnSetRoute} from '@application/helper/routing/colored-yarn-set-route';\nimport {CreelRoute} from '@application/helper/routing/creel-route';\nimport {FinishingTemplateRoute} from '@application/helper/routing/finishing-template-route';\nimport {MachineQualityRoute} from '@application/helper/routing/machine-quality-route';\nimport {RouteBranch} from '@application/helper/routing/route-branch';\nimport {WeaveStructureRoute} from '@application/helper/routing/weave-structure-route';\nimport {YarnRoute} from '@application/helper/routing/yarn-route';\nimport {YarnSetRoute} from '@application/helper/routing/yarn-set-route';\nimport {BuggyRoute} from './buggy-route';\nimport {ColoredYarnRoute} from './colored-yarn-route';\nimport {CompanyWeaveStructureRoute} from './company-weave-structure-route';\nimport {FixedScheduleRoute} from './fixed-schedule-route';\nimport {GroupedWeaveStructureRoute} from './grouped-weave-structure-route';\nimport {PlasticProductRoute} from './plastic-product-route';\nimport {TuftProductRoute} from './tuft-product-route';\nimport {WeaveProductRoute} from './weave-product-route';\nimport {WeftColoredYarnSetRoute} from './weft-colored-yarn-set-route';\n\nexport class TexStyleRoute extends RouteBranch {\n private _finishingTemplate: FinishingTemplateRoute;\n private _color: ColorRoute;\n private _colorSet: ColorSetRoute;\n private _coloredYarn: ColoredYarnRoute;\n private _yarnSet: YarnSetRoute;\n private _coloredYarnSet: ColoredYarnSetRoute;\n private _weftColoredYarnSet: WeftColoredYarnSetRoute;\n private _yarn: YarnRoute;\n private _machineQuality: MachineQualityRoute;\n private _creel: CreelRoute;\n private _weaveProduct: WeaveProductRoute;\n private _weaveStructure: WeaveStructureRoute;\n private _groupedWeaveStructure: GroupedWeaveStructureRoute;\n private _companyWeaveStructure: CompanyWeaveStructureRoute;\n private _tuftProduct: TuftProductRoute;\n private _plasticProduct: PlasticProductRoute;\n private _fixedSchedule: FixedScheduleRoute;\n private _buggy: BuggyRoute;\n\n public get finishingTemplate(): FinishingTemplateRoute {\n return this._finishingTemplate;\n }\n\n public set finishingTemplate(value: FinishingTemplateRoute) {\n this.replace(this._finishingTemplate, value);\n this._finishingTemplate = value;\n }\n\n public get color(): ColorRoute {\n return this._color;\n }\n\n public set color(value: ColorRoute) {\n this.replace(this._color, value);\n this._color = value;\n }\n\n public get colorSet(): ColorSetRoute {\n return this._colorSet;\n }\n\n public set colorSet(value: ColorSetRoute) {\n this.replace(this._colorSet, value);\n this._colorSet = value;\n }\n\n public get yarnSet(): YarnSetRoute {\n return this._yarnSet;\n }\n\n public set yarnSet(value: YarnSetRoute) {\n this.replace(this._yarnSet, value);\n this._yarnSet = value;\n }\n\n public get coloredYarnSet(): ColoredYarnSetRoute {\n return this._coloredYarnSet;\n }\n\n public set coloredYarnSet(value: ColoredYarnSetRoute) {\n this.replace(this._coloredYarnSet, value);\n this._coloredYarnSet = value;\n }\n\n public get weftColoredYarnSet(): WeftColoredYarnSetRoute {\n return this._weftColoredYarnSet;\n }\n\n public set weftColoredYarnSet(value: WeftColoredYarnSetRoute) {\n this.replace(this._weftColoredYarnSet, value);\n this._weftColoredYarnSet = value;\n }\n\n public get coloredYarn(): ColoredYarnRoute {\n return this._coloredYarn;\n }\n\n public set coloredYarn(value: ColoredYarnRoute) {\n this.replace(this._coloredYarn, value);\n this._coloredYarn = value;\n }\n\n public get yarn(): YarnRoute {\n return this._yarn;\n }\n\n public set yarn(value: YarnRoute) {\n this.replace(this._yarn, value);\n this._yarn = value;\n }\n\n public get machineQuality(): MachineQualityRoute {\n return this._machineQuality;\n }\n\n public set machineQuality(value: MachineQualityRoute) {\n this.replace(this._machineQuality, value);\n this._machineQuality = value;\n }\n\n public get creel(): CreelRoute {\n return this._creel;\n }\n\n public set creel(value: CreelRoute) {\n this.replace(this._creel, value);\n this._creel = value;\n }\n\n public get weaveProduct(): WeaveProductRoute {\n return this._weaveProduct;\n }\n\n public set weaveProduct(value: WeaveProductRoute) {\n this.replace(this._weaveProduct, value);\n this._weaveProduct = value;\n }\n\n public get weaveStructure(): WeaveStructureRoute {\n return this._weaveStructure;\n }\n\n public set weaveStructure(value: WeaveStructureRoute) {\n this.replace(this._weaveStructure, value);\n this._weaveStructure = value;\n }\n\n public get groupedWeaveStructure(): GroupedWeaveStructureRoute {\n return this._groupedWeaveStructure;\n }\n\n public set groupedWeaveStructure(value: GroupedWeaveStructureRoute) {\n this.replace(this._groupedWeaveStructure, value);\n this._groupedWeaveStructure = value;\n }\n\n public get companyWeaveStructure(): CompanyWeaveStructureRoute {\n return this._companyWeaveStructure;\n }\n\n public set companyWeaveStructure(value: CompanyWeaveStructureRoute) {\n this.replace(this._companyWeaveStructure, value);\n this._companyWeaveStructure = value;\n }\n\n public get tuftProduct(): TuftProductRoute {\n return this._tuftProduct;\n }\n\n public set tuftProduct(value: TuftProductRoute) {\n this.replace(this._tuftProduct, value);\n this._tuftProduct = value;\n }\n\n public get plasticProduct(): PlasticProductRoute {\n return this._plasticProduct;\n }\n\n public set plasticProduct(value: PlasticProductRoute) {\n this.replace(this._plasticProduct, value);\n this._plasticProduct = value;\n }\n\n public get buggy(): BuggyRoute {\n return this._buggy;\n }\n\n public set buggy(value: BuggyRoute) {\n this.replace(this._buggy, value);\n this._buggy = value;\n }\n\n public get fixedSchedule(): FixedScheduleRoute {\n return this._fixedSchedule;\n }\n\n public set fixedSchedule(value: FixedScheduleRoute) {\n this.replace(this._fixedSchedule, value);\n this._fixedSchedule = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class YarnRoute extends RouteBranch {\n private _addYarn: RouteLeaf;\n private _duplicateYarn: RouteLeaf;\n private _editYarn: RouteLeaf;\n\n public get addYarn(): RouteLeaf {\n return this._addYarn;\n }\n\n public set addYarn(value: RouteLeaf) {\n this.replace(this._addYarn, value);\n this._addYarn = value;\n }\n\n public get duplicateYarn(): RouteLeaf {\n return this._duplicateYarn;\n }\n\n public set duplicateYarn(value: RouteLeaf) {\n this.replace(this._duplicateYarn, value);\n this._duplicateYarn = value;\n }\n\n public get editYarn(): RouteLeaf {\n return this._editYarn;\n }\n\n public set editYarn(value: RouteLeaf) {\n this.replace(this._editYarn, value);\n this._editYarn = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class YarnSetRoute extends RouteBranch {\n private _addYarnSet: RouteLeaf;\n private _duplicateYarnSet: RouteLeaf;\n private _editYarnSet: RouteLeaf;\n private _yarnSetSettings: RouteLeaf;\n\n public get addYarnSet(): RouteLeaf {\n return this._addYarnSet;\n }\n\n public set addYarnSet(value: RouteLeaf) {\n this.replace(this._addYarnSet, value);\n this._addYarnSet = value;\n }\n\n public get duplicateYarnSet(): RouteLeaf {\n return this._duplicateYarnSet;\n }\n\n public set duplicateYarnSet(value: RouteLeaf) {\n this.replace(this._duplicateYarnSet, value);\n this._duplicateYarnSet = value;\n }\n\n public get editYarnSet(): RouteLeaf {\n return this._editYarnSet;\n }\n\n public set editYarnSet(value: RouteLeaf) {\n this.replace(this._editYarnSet, value);\n this._editYarnSet = value;\n }\n\n public get yarnSetSettings(): RouteLeaf {\n return this._yarnSetSettings;\n }\n\n public set yarnSetSettings(value: RouteLeaf) {\n this.replace(this._yarnSetSettings, value);\n this._yarnSetSettings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class AlertRoute extends RouteBranch {\n private _addAlertForEvent: RouteLeaf;\n private _editAlertForEvent: RouteLeaf;\n\n public get addAlert(): RouteLeaf {\n return this._addAlertForEvent;\n }\n\n public set addAlert(value: RouteLeaf) {\n this.replace(this._addAlertForEvent, value);\n this._addAlertForEvent = value;\n }\n\n public get editAlert(): RouteLeaf {\n return this._editAlertForEvent;\n }\n\n public set editAlert(value: RouteLeaf) {\n this.replace(this._editAlertForEvent, value);\n this._editAlertForEvent = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class BuggyRoute extends RouteBranch {\n private _addBuggy: RouteLeaf;\n private _duplicateBuggy: RouteLeaf;\n private _editBuggy: RouteLeaf;\n\n public get addBuggy(): RouteLeaf {\n return this._addBuggy;\n }\n\n public set addBuggy(value: RouteLeaf) {\n this.replace(this._addBuggy, value);\n this._addBuggy = value;\n }\n\n public get duplicateBuggy(): RouteLeaf {\n return this._duplicateBuggy;\n }\n\n public set duplicateBuggy(value: RouteLeaf) {\n this.replace(this._duplicateBuggy, value);\n this._duplicateBuggy = value;\n }\n\n public get editBuggy(): RouteLeaf {\n return this._editBuggy;\n }\n\n public set editBuggy(value: RouteLeaf) {\n this.replace(this._editBuggy, value);\n this._editBuggy = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {ShiftRoute} from './shift-route';\n\nexport class CalendarRoute extends RouteBranch {\n private _shift: ShiftRoute;\n\n public get shift(): ShiftRoute {\n return this._shift;\n }\n\n public set shift(value: ShiftRoute) {\n this.replace(this._shift, value);\n this._shift = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class ColoredYarnRoute extends RouteBranch {\n private _addColoredYarn: RouteLeaf;\n private _duplicateColoredYarn: RouteLeaf;\n private _editColoredYarn: RouteLeaf;\n\n public get addColoredYarn(): RouteLeaf {\n return this._addColoredYarn;\n }\n\n public set addColoredYarn(value: RouteLeaf) {\n this.replace(this._addColoredYarn, value);\n this._addColoredYarn = value;\n }\n\n public get duplicateColoredYarn(): RouteLeaf {\n return this._duplicateColoredYarn;\n }\n\n public set duplicateColoredYarn(value: RouteLeaf) {\n this.replace(this._duplicateColoredYarn, value);\n this._duplicateColoredYarn = value;\n }\n\n public get editColoredYarn(): RouteLeaf {\n return this._editColoredYarn;\n }\n\n public set editColoredYarn(value: RouteLeaf) {\n this.replace(this._editColoredYarn, value);\n this._editColoredYarn = value;\n }\n}\n","import {RouteBranch} from './route-branch';\n\nexport class CompanyWeaveStructureRoute extends RouteBranch {}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class CustomerRoute extends RouteBranch {\n private _addCustomer: RouteLeaf;\n private _editCustomer: RouteLeaf;\n\n public get addCustomer(): RouteLeaf {\n return this._addCustomer;\n }\n\n public set addCustomer(value: RouteLeaf) {\n this.replace(this._addCustomer, value);\n this._addCustomer = value;\n }\n\n public get editCustomer(): RouteLeaf {\n return this._editCustomer;\n }\n\n public set editCustomer(value: RouteLeaf) {\n this.replace(this._editCustomer, value);\n this._editCustomer = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class DataUnitSetupCatalogRoute extends RouteBranch {\n private _customSetting: RouteLeaf;\n private _addDataUnitSetupCatalog: RouteLeaf;\n private _editDataUnitSetupCatalog: RouteLeaf;\n private _duplicateDataUnitSetupCatalog: RouteLeaf;\n\n public get customSetting(): RouteLeaf {\n return this._customSetting;\n }\n\n public set customSetting(value: RouteLeaf) {\n this.replace(this._customSetting, value);\n this._customSetting = value;\n }\n\n public get addDataUnitSetupCatalog(): RouteLeaf {\n return this._addDataUnitSetupCatalog;\n }\n\n public set addDataUnitSetupCatalog(value: RouteLeaf) {\n this.replace(this._addDataUnitSetupCatalog, value);\n this._addDataUnitSetupCatalog = value;\n }\n\n public get editDataUnitSetupCatalog(): RouteLeaf {\n return this._editDataUnitSetupCatalog;\n }\n\n public set editDataUnitSetupCatalog(value: RouteLeaf) {\n this.replace(this._editDataUnitSetupCatalog, value);\n this._editDataUnitSetupCatalog = value;\n }\n\n public get duplicateDataUnitSetupCatalog(): RouteLeaf {\n return this._duplicateDataUnitSetupCatalog;\n }\n\n public set duplicateDataUnitSetupCatalog(value: RouteLeaf) {\n this.replace(this.duplicateDataUnitSetupCatalog, value);\n this._duplicateDataUnitSetupCatalog = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class DataUnitSetupRoute extends RouteBranch {\n private _addDataUnitSetupFromCatalog: RouteLeaf;\n private _addDataUnitSetup: RouteLeaf;\n private _editDataUnitSetup: RouteLeaf;\n private _customSetting: RouteLeaf;\n\n public get addDataUnitSetupFromCatalog(): RouteLeaf {\n return this._addDataUnitSetupFromCatalog;\n }\n\n public set addDataUnitSetupFromCatalog(value: RouteLeaf) {\n this.replace(this._addDataUnitSetupFromCatalog, value);\n this._addDataUnitSetupFromCatalog = value;\n }\n\n public get addDataUnitSetup(): RouteLeaf {\n return this._addDataUnitSetup;\n }\n\n public set addDataUnitSetup(value: RouteLeaf) {\n this.replace(this._addDataUnitSetup, value);\n this._addDataUnitSetup = value;\n }\n\n public get editDataUnitSetup(): RouteLeaf {\n return this._editDataUnitSetup;\n }\n\n public set editDataUnitSetup(value: RouteLeaf) {\n this.replace(this._editDataUnitSetup, value);\n this._editDataUnitSetup = value;\n }\n\n public get customSetting(): RouteLeaf {\n return this._customSetting;\n }\n\n public set customSetting(value: RouteLeaf) {\n this.replace(this._customSetting, value);\n this._customSetting = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class DeclarationRoute extends RouteBranch {\n private _addDeclaration: RouteLeaf;\n private _editDeclaration: RouteLeaf;\n\n public get addDeclaration(): RouteLeaf {\n return this._addDeclaration;\n }\n\n public set addDeclaration(value: RouteLeaf) {\n this.replace(this._addDeclaration, value);\n this._addDeclaration = value;\n }\n\n public get editDeclaration(): RouteLeaf {\n return this._editDeclaration;\n }\n\n public set editDeclaration(value: RouteLeaf) {\n this.replace(this._editDeclaration, value);\n this._editDeclaration = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class DeviceTemplateCatalogRoute extends RouteBranch {\n private _addDeviceTemplateCatalog: RouteLeaf;\n private _editDeviceTemplateCatalog: RouteLeaf;\n private _duplicateDeviceTemplateCatalog: RouteLeaf;\n private _addCounterCatalog: RouteLeaf;\n private _editCounterCatalog: RouteLeaf;\n private _duplicateCounterCatalog: RouteLeaf;\n private _addConfigurationCatalog: RouteLeaf;\n private _editConfigurationCatalog: RouteLeaf;\n private _duplicateConfigurationCatalog: RouteLeaf;\n\n public get addDeviceTemplateCatalog(): RouteLeaf {\n return this._addDeviceTemplateCatalog;\n }\n\n public set addDeviceTemplateCatalog(value: RouteLeaf) {\n this.replace(this._addDeviceTemplateCatalog, value);\n this._addDeviceTemplateCatalog = value;\n }\n\n public get editDeviceTemplateCatalog(): RouteLeaf {\n return this._editDeviceTemplateCatalog;\n }\n\n public set editDeviceTemplateCatalog(value: RouteLeaf) {\n this.replace(this._editDeviceTemplateCatalog, value);\n this._editDeviceTemplateCatalog = value;\n }\n\n public get duplicateDeviceTemplateCatalog(): RouteLeaf {\n return this._duplicateDeviceTemplateCatalog;\n }\n\n public set duplicateDeviceTemplateCatalog(value: RouteLeaf) {\n this.replace(this._duplicateDeviceTemplateCatalog, value);\n this._duplicateDeviceTemplateCatalog = value;\n }\n\n public get addCounterCatalog(): RouteLeaf {\n return this._addCounterCatalog;\n }\n\n public set addCounterCatalog(value: RouteLeaf) {\n this.replace(this._addCounterCatalog, value);\n this._addCounterCatalog = value;\n }\n\n public get editCounterCatalog(): RouteLeaf {\n return this._editCounterCatalog;\n }\n\n public set editCounterCatalog(value: RouteLeaf) {\n this.replace(this._editCounterCatalog, value);\n this._editCounterCatalog = value;\n }\n\n public get duplicateCounterCatalog(): RouteLeaf {\n return this._duplicateCounterCatalog;\n }\n\n public set duplicateCounterCatalog(value: RouteLeaf) {\n this.replace(this._duplicateCounterCatalog, value);\n this._duplicateCounterCatalog = value;\n }\n\n public get addConfigurationCatalog(): RouteLeaf {\n return this._addConfigurationCatalog;\n }\n\n public set addConfigurationCatalog(value: RouteLeaf) {\n this.replace(this._addConfigurationCatalog, value);\n this._addConfigurationCatalog = value;\n }\n\n public get editConfigurationCatalog(): RouteLeaf {\n return this._editConfigurationCatalog;\n }\n\n public set editConfigurationCatalog(value: RouteLeaf) {\n this.replace(this._editConfigurationCatalog, value);\n this._editConfigurationCatalog = value;\n }\n\n public get duplicateConfigurationCatalog(): RouteLeaf {\n return this._duplicateConfigurationCatalog;\n }\n\n public set duplicateConfigurationCatalog(value: RouteLeaf) {\n this.replace(this._duplicateConfigurationCatalog, value);\n this._duplicateConfigurationCatalog = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class DeviceTemplateRoute extends RouteBranch {\n private _addDeviceTemplate: RouteLeaf;\n private _editDeviceTemplate: RouteLeaf;\n private _duplicateDeviceTemplate: RouteLeaf;\n private _addCounter: RouteLeaf;\n private _editCounter: RouteLeaf;\n private _duplicateCounter: RouteLeaf;\n private _addConfiguration: RouteLeaf;\n private _editConfiguration: RouteLeaf;\n private _duplicateConfiguration: RouteLeaf;\n private _addDeviceTemplateFromCatalog: RouteLeaf;\n\n public get addDeviceTemplate(): RouteLeaf {\n return this._addDeviceTemplate;\n }\n\n public set addDeviceTemplate(value: RouteLeaf) {\n this.replace(this._addDeviceTemplate, value);\n this._addDeviceTemplate = value;\n }\n\n public get editDeviceTemplate(): RouteLeaf {\n return this._editDeviceTemplate;\n }\n\n public set editDeviceTemplate(value: RouteLeaf) {\n this.replace(this._editDeviceTemplate, value);\n this._editDeviceTemplate = value;\n }\n\n public get duplicateDeviceTemplate(): RouteLeaf {\n return this._duplicateDeviceTemplate;\n }\n\n public set duplicateDeviceTemplate(value: RouteLeaf) {\n this.replace(this._duplicateDeviceTemplate, value);\n this._duplicateDeviceTemplate = value;\n }\n\n public get addCounter(): RouteLeaf {\n return this._addCounter;\n }\n\n public set addCounter(value: RouteLeaf) {\n this.replace(this._addCounter, value);\n this._addCounter = value;\n }\n\n public get editCounter(): RouteLeaf {\n return this._editCounter;\n }\n\n public set editCounter(value: RouteLeaf) {\n this.replace(this._editCounter, value);\n this._editCounter = value;\n }\n\n public get duplicateCounter(): RouteLeaf {\n return this._duplicateCounter;\n }\n\n public set duplicateCounter(value: RouteLeaf) {\n this.replace(this._duplicateCounter, value);\n this._duplicateCounter = value;\n }\n\n public get addConfiguration(): RouteLeaf {\n return this._addConfiguration;\n }\n\n public set addConfiguration(value: RouteLeaf) {\n this.replace(this._addConfiguration, value);\n this._addConfiguration = value;\n }\n\n public get editConfiguration(): RouteLeaf {\n return this._editConfiguration;\n }\n\n public set editConfiguration(value: RouteLeaf) {\n this.replace(this._editConfiguration, value);\n this._editConfiguration = value;\n }\n\n public get duplicateConfiguration(): RouteLeaf {\n return this._duplicateConfiguration;\n }\n\n public set duplicateConfiguration(value: RouteLeaf) {\n this.replace(this._duplicateConfiguration, value);\n this._duplicateConfiguration = value;\n }\n\n public get addDeviceTemplateFromCatalog(): RouteLeaf {\n return this._addDeviceTemplateFromCatalog;\n }\n\n public set addDeviceTemplateFromCatalog(value: RouteLeaf) {\n this.replace(this._addDeviceTemplateFromCatalog, value);\n this._addDeviceTemplateFromCatalog = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class EventRoute extends RouteBranch {\n private _addEvent: RouteLeaf;\n private _duplicateEvent: RouteLeaf;\n private _editEvent: RouteLeaf;\n\n public get addEvent(): RouteLeaf {\n return this._addEvent;\n }\n\n public set addEvent(value: RouteLeaf) {\n this.replace(this._addEvent, value);\n this._addEvent = value;\n }\n\n public get duplicateEvent(): RouteLeaf {\n return this._duplicateEvent;\n }\n\n public set duplicateEvent(value: RouteLeaf) {\n this.replace(this._duplicateEvent, value);\n this._duplicateEvent = value;\n }\n\n public get editEvent(): RouteLeaf {\n return this._editEvent;\n }\n\n public set editEvent(value: RouteLeaf) {\n this.replace(this._editEvent, value);\n this._editEvent = value;\n }\n}\n","import {RouteBranch} from './route-branch';\r\nimport {RouteLeaf} from './route-leaf';\r\n\r\nexport class FixedScheduleRoute extends RouteBranch {\r\n private _addFixedSchedule: RouteLeaf;\r\n private _editFixedSchedule: RouteLeaf;\r\n private _duplicateFixedSchedule: RouteLeaf;\r\n\r\n public get addFixedSchedule(): RouteLeaf {\r\n return this._addFixedSchedule;\r\n }\r\n\r\n public set addFixedSchedule(value: RouteLeaf) {\r\n this.replace(this._addFixedSchedule, value);\r\n this._addFixedSchedule = value;\r\n }\r\n\r\n public get editFixedSchedule(): RouteLeaf {\r\n return this._editFixedSchedule;\r\n }\r\n\r\n public set editFixedSchedule(value: RouteLeaf) {\r\n this.replace(this._editFixedSchedule, value);\r\n this._editFixedSchedule = value;\r\n }\r\n\r\n public get duplicateFixedSchedule(): RouteLeaf {\r\n return this._duplicateFixedSchedule;\r\n }\r\n\r\n public set duplicateFixedSchedule(value: RouteLeaf) {\r\n this.replace(this._duplicateFixedSchedule, value);\r\n this._duplicateFixedSchedule = value;\r\n }\r\n}\r\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class GroupedWeaveStructureRoute extends RouteBranch {\n private _overviewGroupedWeaveStructure: RouteLeaf;\n private _addGroupedWeaveStructure: RouteLeaf;\n private _editGroupedWeaveStructure: RouteLeaf;\n private _duplicateGroupedWeaveStructure: RouteLeaf;\n\n public get overviewGroupedWeaveStructure(): RouteLeaf {\n return this._overviewGroupedWeaveStructure;\n }\n\n public set overviewGroupedWeaveStructure(value: RouteLeaf) {\n this.replace(this._overviewGroupedWeaveStructure, value);\n this._overviewGroupedWeaveStructure = value;\n }\n\n public get addGroupedWeaveStructure(): RouteLeaf {\n return this._addGroupedWeaveStructure;\n }\n\n public set addGroupedWeaveStructure(value: RouteLeaf) {\n this.replace(this._addGroupedWeaveStructure, value);\n this._addGroupedWeaveStructure = value;\n }\n\n public get editGroupedWeaveStructure(): RouteLeaf {\n return this._editGroupedWeaveStructure;\n }\n\n public set editGroupedWeaveStructure(value: RouteLeaf) {\n this.replace(this._editGroupedWeaveStructure, value);\n this._editGroupedWeaveStructure = value;\n }\n\n public get duplicateGroupedWeaveStructure(): RouteLeaf {\n return this._duplicateGroupedWeaveStructure;\n }\n\n public set duplicateGroupedWeaveStructure(value: RouteLeaf) {\n this.replace(this._duplicateGroupedWeaveStructure, value);\n this._duplicateGroupedWeaveStructure = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class MachineDataSourceRoute extends RouteBranch {\n private _addMachineDataSource: RouteLeaf;\n private _editMachineDataSource: RouteLeaf;\n private _settings: RouteLeaf;\n\n public get addMachineDataSource(): RouteLeaf {\n return this._addMachineDataSource;\n }\n\n public set addMachineDataSource(value: RouteLeaf) {\n this.replace(this._addMachineDataSource, value);\n this._addMachineDataSource = value;\n }\n\n public get editMachineDataSource(): RouteLeaf {\n return this._editMachineDataSource;\n }\n\n public set editMachineDataSource(value: RouteLeaf) {\n this.replace(this._editMachineDataSource, value);\n this._editMachineDataSource = value;\n }\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class OperatorRoute extends RouteBranch {\n private _addOperator: RouteLeaf;\n private _editOperator: RouteLeaf;\n private _duplicateOperator: RouteLeaf;\n private _addOperatorType: RouteLeaf;\n private _editOperatorType: RouteLeaf;\n\n public get addOperator(): RouteLeaf {\n return this._addOperator;\n }\n\n public set addOperator(value: RouteLeaf) {\n this.replace(this._addOperator, value);\n this._addOperator = value;\n }\n\n public get editOperator(): RouteLeaf {\n return this._editOperator;\n }\n\n public set editOperator(value: RouteLeaf) {\n this.replace(this._editOperator, value);\n this._editOperator = value;\n }\n\n public get duplicateOperator(): RouteLeaf {\n return this._duplicateOperator;\n }\n\n public set duplicateOperator(value: RouteLeaf) {\n this.replace(this._duplicateOperator, value);\n this._duplicateOperator = value;\n }\n\n public get addOperatorType(): RouteLeaf {\n return this._addOperatorType;\n }\n\n public set addOperatorType(value: RouteLeaf) {\n this.replace(this._addOperatorType, value);\n this._addOperatorType = value;\n }\n\n public get editOperatorType(): RouteLeaf {\n return this._editOperatorType;\n }\n\n public set editOperatorType(value: RouteLeaf) {\n this.replace(this.editOperatorType, value);\n this._editOperatorType = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class OrderbookRoute extends RouteBranch {\n private _settings: RouteLeaf;\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class PathLayoutTemplateRoute extends RouteBranch {\n private _addPathLayoutTemplate: RouteLeaf;\n private _editPathLayoutTemplate: RouteLeaf;\n private _duplicatePathLayoutTemplate: RouteLeaf;\n private _pathLayoutTemplateSettings: RouteLeaf;\n\n public get addPathLayoutTemplate(): RouteLeaf {\n return this._addPathLayoutTemplate;\n }\n\n public set addPathLayoutTemplate(value: RouteLeaf) {\n this.replace(this._addPathLayoutTemplate, value);\n this._addPathLayoutTemplate = value;\n }\n\n public get editPathLayoutTemplate(): RouteLeaf {\n return this._editPathLayoutTemplate;\n }\n\n public set editPathLayoutTemplate(value: RouteLeaf) {\n this.replace(this._editPathLayoutTemplate, value);\n this._editPathLayoutTemplate = value;\n }\n\n public get duplicatePathLayoutTemplate(): RouteLeaf {\n return this._duplicatePathLayoutTemplate;\n }\n\n public set duplicatePathLayoutTemplate(value: RouteLeaf) {\n this.replace(this._duplicatePathLayoutTemplate, value);\n this._duplicatePathLayoutTemplate = value;\n }\n\n public get pathLayoutTemplateSettings(): RouteLeaf {\n return this._pathLayoutTemplateSettings;\n }\n\n public set pathLayoutTemplateSettings(value: RouteLeaf) {\n this.replace(this._pathLayoutTemplateSettings, value);\n this._pathLayoutTemplateSettings = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class PhysicalQuantityRoute extends RouteBranch {\n private _addPhysicalQuantity: RouteLeaf;\n private _editPhysicalQuantity: RouteLeaf;\n private _duplicatePhysicalQuantity: RouteLeaf;\n\n public get addPhysicalQuantity(): RouteLeaf {\n return this._addPhysicalQuantity;\n }\n\n public set addPhysicalQuantity(value: RouteLeaf) {\n this.replace(this._addPhysicalQuantity, value);\n this._addPhysicalQuantity = value;\n }\n\n public get editPhysicalQuantity(): RouteLeaf {\n return this._editPhysicalQuantity;\n }\n\n public set editPhysicalQuantity(value: RouteLeaf) {\n this.replace(this._editPhysicalQuantity, value);\n this._editPhysicalQuantity = value;\n }\n\n public get duplicatePhysicalQuantity(): RouteLeaf {\n return this._duplicatePhysicalQuantity;\n }\n\n public set duplicatePhysicalQuantity(value: RouteLeaf) {\n this.replace(this._duplicatePhysicalQuantity, value);\n this._duplicatePhysicalQuantity = value;\n }\n}\n","import {RouteBranch} from './route-branch';\n\nexport class PlanningPrototypeRoute extends RouteBranch {}\n","import {RouteBranch} from './route-branch';\n\nexport class PlanningRoute extends RouteBranch {}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class PlasticProductRoute extends RouteBranch {\n private _addPlasticProduct: RouteLeaf;\n private _editPlasticProduct: RouteLeaf;\n private _duplicatePlasticProduct: RouteLeaf;\n\n public get addPlasticProduct(): RouteLeaf {\n return this._addPlasticProduct;\n }\n\n public set addPlasticProduct(value: RouteLeaf) {\n this.replace(this._addPlasticProduct, value);\n this._addPlasticProduct = value;\n }\n\n public get editPlasticProduct(): RouteLeaf {\n return this._editPlasticProduct;\n }\n\n public set editPlasticProduct(value: RouteLeaf) {\n this.replace(this._editPlasticProduct, value);\n this._editPlasticProduct = value;\n }\n\n public get duplicatePlasticProduct(): RouteLeaf {\n return this._duplicatePlasticProduct;\n }\n\n public set duplicatePlasticProduct(value: RouteLeaf) {\n this.replace(this._duplicatePlasticProduct, value);\n this._duplicatePlasticProduct = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class PlasticRoute extends RouteBranch {\n private _productionOrder: RouteLeaf;\n private _addProductionOrder: RouteLeaf;\n private _editProductionOrder: RouteLeaf;\n private _duplicateProductionOrder: RouteLeaf;\n private _addProductionOrderForMachine: RouteLeaf;\n\n public get productionOrder(): RouteLeaf {\n return this._productionOrder;\n }\n\n public set productionOrder(value: RouteLeaf) {\n this.replace(this._productionOrder, value);\n this._productionOrder = value;\n }\n\n public get addProductionOrder(): RouteLeaf {\n return this._addProductionOrder;\n }\n\n public set addProductionOrder(value: RouteLeaf) {\n this.replace(this._addProductionOrder, value);\n this._addProductionOrder = value;\n }\n\n public get editProductionOrder(): RouteLeaf {\n return this._editProductionOrder;\n }\n\n public set editProductionOrder(value: RouteLeaf) {\n this.replace(this._editProductionOrder, value);\n this._editProductionOrder = value;\n }\n\n public get duplicateProductionOrder(): RouteLeaf {\n return this._duplicateProductionOrder;\n }\n\n public set duplicateProductionOrder(value: RouteLeaf) {\n this.replace(this._duplicateProductionOrder, value);\n this._duplicateProductionOrder = value;\n }\n\n public get addProductionOrderForMachine(): RouteLeaf {\n return this._addProductionOrderForMachine;\n }\n\n public set addProductionOrderForMachine(value: RouteLeaf) {\n this.replace(this._addProductionOrderForMachine, value);\n this._addProductionOrderForMachine = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class ProductionOrderRoute extends RouteBranch {\n private _addProductionOrder: RouteLeaf;\n private _addProductionOrderNewView: RouteLeaf;\n private _duplicateProductionOrder: RouteLeaf;\n private _duplicateProductionOrderNewView: RouteLeaf;\n private _addProductionOrderForMachine: RouteLeaf;\n private _addProductionOrderNewViewForMachine: RouteLeaf;\n private _addProductionOrderForRun: RouteLeaf;\n private _addProductionOrderNewViewForRun: RouteLeaf;\n private _addProductionOrderForProductConfiguration: RouteLeaf;\n private _addProductionOrderNewViewForProductConfiguration: RouteLeaf;\n private _editProductionOrder: RouteLeaf;\n private _editProductionOrderNewView: RouteLeaf;\n private _settings: RouteLeaf;\n private _details: RouteLeaf;\n\n public get addProductionOrder(): RouteLeaf {\n return this._addProductionOrder;\n }\n\n public set addProductionOrder(value: RouteLeaf) {\n this.replace(this._addProductionOrder, value);\n this._addProductionOrder = value;\n }\n\n public get addProductionOrderNewView(): RouteLeaf {\n return this._addProductionOrderNewView;\n }\n\n public set addProductionOrderNewView(value: RouteLeaf) {\n this.replace(this._addProductionOrderNewView, value);\n this._addProductionOrderNewView = value;\n }\n\n public get duplicateProductionOrder(): RouteLeaf {\n return this._duplicateProductionOrder;\n }\n\n public set duplicateProductionOrder(value: RouteLeaf) {\n this.replace(this._duplicateProductionOrder, value);\n this._duplicateProductionOrder = value;\n }\n\n public get duplicateProductionOrderNewView(): RouteLeaf {\n return this._duplicateProductionOrderNewView;\n }\n\n public set duplicateProductionOrderNewView(value: RouteLeaf) {\n this.replace(this._duplicateProductionOrderNewView, value);\n this._duplicateProductionOrderNewView = value;\n }\n\n public get addProductionOrderForMachine(): RouteLeaf {\n return this._addProductionOrderForMachine;\n }\n\n public set addProductionOrderForMachine(value: RouteLeaf) {\n this.replace(this._addProductionOrderForMachine, value);\n this._addProductionOrderForMachine = value;\n }\n\n public get addProductionOrderNewViewForMachine(): RouteLeaf {\n return this._addProductionOrderNewViewForMachine;\n }\n\n public set addProductionOrderNewViewForMachine(value: RouteLeaf) {\n this.replace(this._addProductionOrderNewViewForMachine, value);\n this._addProductionOrderNewViewForMachine = value;\n }\n\n public get addProductionOrderForRun(): RouteLeaf {\n return this._addProductionOrderForRun;\n }\n\n public set addProductionOrderForRun(value: RouteLeaf) {\n this.replace(this._addProductionOrderForRun, value);\n this._addProductionOrderForRun = value;\n }\n\n public get addProductionOrderNewViewForRun(): RouteLeaf {\n return this._addProductionOrderNewViewForRun;\n }\n\n public set addProductionOrderNewViewForRun(value: RouteLeaf) {\n this.replace(this._addProductionOrderNewViewForRun, value);\n this._addProductionOrderNewViewForRun = value;\n }\n\n public get addProductionOrderForProductConfiguration(): RouteLeaf {\n return this._addProductionOrderForProductConfiguration;\n }\n\n public set addProductionOrderForProductConfiguration(value: RouteLeaf) {\n this.replace(this._addProductionOrderForProductConfiguration, value);\n this._addProductionOrderForProductConfiguration = value;\n }\n\n public get addProductionOrderNewViewForProductConfiguration(): RouteLeaf {\n return this._addProductionOrderNewViewForProductConfiguration;\n }\n\n public set addProductionOrderNewViewForProductConfiguration(value: RouteLeaf) {\n this.replace(this._addProductionOrderNewViewForProductConfiguration, value);\n this._addProductionOrderNewViewForProductConfiguration = value;\n }\n\n public get editProductionOrder(): RouteLeaf {\n return this._editProductionOrder;\n }\n\n public set editProductionOrder(value: RouteLeaf) {\n this.replace(this._editProductionOrder, value);\n this._editProductionOrder = value;\n }\n\n public get editProductionOrderNewView(): RouteLeaf {\n return this._editProductionOrderNewView;\n }\n\n public set editProductionOrderNewView(value: RouteLeaf) {\n this.replace(this._editProductionOrderNewView, value);\n this._editProductionOrderNewView = value;\n }\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n\n public get details(): RouteLeaf {\n return this._details;\n }\n\n public set details(value: RouteLeaf) {\n this.replace(this._details, value);\n this._details = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ProfileRoute extends RouteBranch {\n private _changelogMobile: RouteLeaf;\n\n public get changelogMobile(): RouteLeaf {\n return this._changelogMobile;\n }\n\n public set changelogMobile(value: RouteLeaf) {\n this.replace(this._changelogMobile, value);\n this._changelogMobile = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class RejectReasonRoute extends RouteBranch {\n private _addRejectReason: RouteLeaf;\n private _editRejectReason: RouteLeaf;\n private _duplicateRejectReason: RouteLeaf;\n\n public get addRejectReason(): RouteLeaf {\n return this._addRejectReason;\n }\n\n public set addRejectReason(value: RouteLeaf) {\n this.replace(this._addRejectReason, value);\n this._addRejectReason = value;\n }\n\n public get editRejectReason(): RouteLeaf {\n return this._editRejectReason;\n }\n\n public set editRejectReason(value: RouteLeaf) {\n this.replace(this._editRejectReason, value);\n this._editRejectReason = value;\n }\n\n public get duplicateRejectReason(): RouteLeaf {\n return this._duplicateRejectReason;\n }\n\n public set duplicateRejectReason(value: RouteLeaf) {\n this.replace(this._duplicateRejectReason, value);\n this._duplicateRejectReason = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ReportItemRoute extends RouteBranch {\n private _editReportItem: RouteLeaf;\n\n public get editReportItem(): RouteLeaf {\n return this._editReportItem;\n }\n\n public set editReportItem(value: RouteLeaf) {\n this.replace(this._editReportItem, value);\n this._editReportItem = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class ResourceTypeRoute extends RouteBranch {\n private _addResourceType: RouteLeaf;\n private _editResourceType: RouteLeaf;\n private _duplicateResourceType: RouteLeaf;\n\n public get addResourceType(): RouteLeaf {\n return this._addResourceType;\n }\n\n public set addResourceType(value: RouteLeaf) {\n this.replace(this._addResourceType, value);\n this._addResourceType = value;\n }\n\n public get editResourceType(): RouteLeaf {\n return this._editResourceType;\n }\n\n public set editResourceType(value: RouteLeaf) {\n this.replace(this._editResourceType, value);\n this._editResourceType = value;\n }\n\n public get duplicateResourceType(): RouteLeaf {\n return this._duplicateResourceType;\n }\n\n public set duplicateResourceType(value: RouteLeaf) {\n this.replace(this._duplicateResourceType, value);\n this._duplicateResourceType = value;\n }\n}\n","import {DataUnitSetupCatalogRoute} from '@application/helper/routing/data-unit-setup-catalog-route';\nimport {DataUnitSetupRoute} from '@application/helper/routing/data-unit-setup-route';\nimport {MachineDataSourceRoute} from '@application/helper/routing/machine-data-sources.route';\nimport {AlertRoute} from './alert-route';\nimport {DeclarationRoute} from './declaration-route';\nimport {DeviceTemplateCatalogRoute} from './device-template-catalog-route';\nimport {DeviceTemplateRoute} from './device-template-route';\nimport {EventRoute} from './event-route';\nimport {OperatorRoute} from './operator-route';\nimport {PhysicalQuantityRoute} from './physical-quantity-route';\nimport {ReportItemRoute} from './report-item-route';\nimport {ResourceTypeRoute} from './resource-type-route';\nimport {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\nimport {RejectReasonRoute} from './reject-reason-route';\n\nexport class SettingsRoute extends RouteBranch {\n private _machineDataSources: MachineDataSourceRoute;\n private _dataUnitSetup: DataUnitSetupRoute;\n private _dataUnitSetupCatalog: DataUnitSetupCatalogRoute;\n private _resourceType: ResourceTypeRoute;\n private _physicalQuantity: PhysicalQuantityRoute;\n private _declaration: DeclarationRoute;\n private _deviceTemplate: DeviceTemplateRoute;\n private _deviceTemplateCatalog: DeviceTemplateCatalogRoute;\n private _reportItem: ReportItemRoute;\n private _event: EventRoute;\n private _alert: AlertRoute;\n private _automaticStopGroup: RouteLeaf;\n private _operator: OperatorRoute;\n private _rejectReason: RejectReasonRoute;\n\n public get machineDataSources(): MachineDataSourceRoute {\n return this._machineDataSources;\n }\n\n public set machineDataSources(value: MachineDataSourceRoute) {\n this.replace(this._machineDataSources, value);\n this._machineDataSources = value;\n }\n\n public get dataUnitSetup(): DataUnitSetupRoute {\n return this._dataUnitSetup;\n }\n\n public set dataUnitSetup(value: DataUnitSetupRoute) {\n this.replace(this._dataUnitSetup, value);\n this._dataUnitSetup = value;\n }\n\n public get dataUnitSetupCatalog(): DataUnitSetupCatalogRoute {\n return this._dataUnitSetupCatalog;\n }\n\n public set dataUnitSetupCatalog(value: DataUnitSetupCatalogRoute) {\n this.replace(this._dataUnitSetupCatalog, value);\n this._dataUnitSetupCatalog = value;\n }\n\n public get resourceType(): ResourceTypeRoute {\n return this._resourceType;\n }\n\n public set resourceType(value: ResourceTypeRoute) {\n this.replace(this._resourceType, value);\n this._resourceType = value;\n }\n\n public get declaration(): DeclarationRoute {\n return this._declaration;\n }\n\n public set declaration(value: DeclarationRoute) {\n this.replace(this._declaration, value);\n this._declaration = value;\n }\n\n public get physicalQuantity(): PhysicalQuantityRoute {\n return this._physicalQuantity;\n }\n\n public set physicalQuantity(value: PhysicalQuantityRoute) {\n this.replace(this._physicalQuantity, value);\n this._physicalQuantity = value;\n }\n\n public get deviceTemplate(): DeviceTemplateRoute {\n return this._deviceTemplate;\n }\n\n public set deviceTemplate(value: DeviceTemplateRoute) {\n this.replace(this._deviceTemplate, value);\n this._deviceTemplate = value;\n }\n\n public get deviceTemplateCatalog(): DeviceTemplateCatalogRoute {\n return this._deviceTemplateCatalog;\n }\n\n public set deviceTemplateCatalog(value: DeviceTemplateCatalogRoute) {\n this.replace(this._deviceTemplateCatalog, value);\n this._deviceTemplateCatalog = value;\n }\n\n public get reportItem(): ReportItemRoute {\n return this._reportItem;\n }\n\n public set reportItem(value: ReportItemRoute) {\n this.replace(this._reportItem, value);\n this._reportItem = value;\n }\n\n public get event(): EventRoute {\n return this._event;\n }\n\n public set event(value: EventRoute) {\n this.replace(this._event, value);\n this._event = value;\n }\n\n public get alert(): AlertRoute {\n return this._alert;\n }\n\n public set alert(value: AlertRoute) {\n this.replace(this._alert, value);\n this._alert = value;\n }\n\n public get automaticStopGroup(): RouteLeaf {\n return this._automaticStopGroup;\n }\n\n public set automaticStopGroup(value: RouteLeaf) {\n this.replace(this._automaticStopGroup, value);\n this._automaticStopGroup = value;\n }\n\n public get operator(): OperatorRoute {\n return this._operator;\n }\n\n public set operator(value: OperatorRoute) {\n this.replace(this._operator, value);\n this._operator = value;\n }\n\n public get rejectReason(): RejectReasonRoute {\n return this._rejectReason;\n }\n\n public set rejectReason(value: RejectReasonRoute) {\n this.replace(this._rejectReason, value);\n this._rejectReason = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ShiftRoute extends RouteBranch {\n private _addShift: RouteLeaf;\n private _editShift: RouteLeaf;\n private _duplicateShift: RouteLeaf;\n\n public get addShift(): RouteLeaf {\n return this._addShift;\n }\n\n public set addShift(value: RouteLeaf) {\n this.replace(this._addShift, value);\n this._addShift = value;\n }\n\n public get editShift(): RouteLeaf {\n return this._editShift;\n }\n\n public set editShift(value: RouteLeaf) {\n this.replace(this._editShift, value);\n this._editShift = value;\n }\n\n public get duplicateShift(): RouteLeaf {\n return this._duplicateShift;\n }\n\n public set duplicateShift(value: RouteLeaf) {\n this.replace(this._duplicateShift, value);\n this._duplicateShift = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class TexBotMachineDocumentationRoute extends RouteBranch {\n private _details: RouteLeaf;\n\n public get details(): RouteLeaf {\n return this._details;\n }\n\n public set details(value: RouteLeaf) {\n this.replace(this._details, value);\n this._details = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class TexBotTrainingRoute extends RouteBranch {\n private _machineDetails: RouteLeaf;\n private _details: RouteLeaf;\n private _manage: RouteLeaf;\n private _manageTags: RouteLeaf;\n private _manageDetails: RouteLeaf;\n\n public get machineDetails(): RouteLeaf {\n return this._machineDetails;\n }\n\n public set machineDetails(value: RouteLeaf) {\n this.replace(this._machineDetails, value);\n this._machineDetails = value;\n }\n\n public get details(): RouteLeaf {\n return this._details;\n }\n\n public set details(value: RouteLeaf) {\n this.replace(this._details, value);\n this._details = value;\n }\n\n public get manage(): RouteLeaf {\n return this._manage;\n }\n\n public set manage(value: RouteLeaf) {\n this.replace(this._manage, value);\n this._manage = value;\n }\n\n public get manageTags(): RouteLeaf {\n return this._manageTags;\n }\n\n public set manageTags(value: RouteLeaf) {\n this.replace(this._manageTags, value);\n this._manageTags = value;\n }\n\n public get manageDetails(): RouteLeaf {\n return this._manageDetails;\n }\n\n public set manageDetails(value: RouteLeaf) {\n this.replace(this._manageDetails, value);\n this._manageDetails = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class ToolRoute extends RouteBranch {\n private _addTool: RouteLeaf;\n private _editTool: RouteLeaf;\n private _duplicateTool: RouteLeaf;\n\n public get addTool(): RouteLeaf {\n return this._addTool;\n }\n\n public set addTool(value: RouteLeaf) {\n this.replace(this._addTool, value);\n this._addTool = value;\n }\n\n public get editTool(): RouteLeaf {\n return this._editTool;\n }\n\n public set editTool(value: RouteLeaf) {\n this.replace(this._editTool, value);\n this._editTool = value;\n }\n\n public get duplicateTool(): RouteLeaf {\n return this._duplicateTool;\n }\n\n public set duplicateTool(value: RouteLeaf) {\n this.replace(this._duplicateTool, value);\n this._duplicateTool = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class TuftProductRoute extends RouteBranch {\n private _addTuftProduct: RouteLeaf;\n private _editTuftProduct: RouteLeaf;\n private _duplicateTuftProduct: RouteLeaf;\n\n public get addTuftProduct(): RouteLeaf {\n return this._addTuftProduct;\n }\n\n public set addTuftProduct(value: RouteLeaf) {\n this.replace(this._addTuftProduct, value);\n this._addTuftProduct = value;\n }\n\n public get editTuftProduct(): RouteLeaf {\n return this._editTuftProduct;\n }\n\n public set editTuftProduct(value: RouteLeaf) {\n this.replace(this._editTuftProduct, value);\n this._editTuftProduct = value;\n }\n\n public get duplicateTuftProduct(): RouteLeaf {\n return this._duplicateTuftProduct;\n }\n\n public set duplicateTuftProduct(value: RouteLeaf) {\n this.replace(this._duplicateTuftProduct, value);\n this._duplicateTuftProduct = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class TuftingRoute extends RouteBranch {\n private _productionOrder: RouteLeaf;\n private _addProductionOrder: RouteLeaf;\n private _editProductionOrder: RouteLeaf;\n private _duplicateProductionOrder: RouteLeaf;\n private _addProductionOrderForRun: RouteLeaf;\n private _addProductionOrderForMachine: RouteLeaf;\n private _settings: RouteLeaf;\n\n public get productionOrder(): RouteLeaf {\n return this._productionOrder;\n }\n\n public set productionOrder(value: RouteLeaf) {\n this.replace(this._productionOrder, value);\n this._productionOrder = value;\n }\n\n public get addProductionOrder(): RouteLeaf {\n return this._addProductionOrder;\n }\n\n public set addProductionOrder(value: RouteLeaf) {\n this.replace(this._addProductionOrder, value);\n this._addProductionOrder = value;\n }\n\n public get addProductionOrderForRun(): RouteLeaf {\n return this._addProductionOrderForRun;\n }\n\n public set addProductionOrderForRun(value: RouteLeaf) {\n this.replace(this._addProductionOrderForRun, value);\n this._addProductionOrderForRun = value;\n }\n\n public get addProductionOrderForMachine(): RouteLeaf {\n return this._addProductionOrderForMachine;\n }\n\n public set addProductionOrderForMachine(value: RouteLeaf) {\n this.replace(this._addProductionOrderForMachine, value);\n this._addProductionOrderForMachine = value;\n }\n\n public get editProductionOrder(): RouteLeaf {\n return this._editProductionOrder;\n }\n\n public set editProductionOrder(value: RouteLeaf) {\n this.replace(this._editProductionOrder, value);\n this._editProductionOrder = value;\n }\n\n public get duplicateProductionOrder(): RouteLeaf {\n return this._duplicateProductionOrder;\n }\n\n public set duplicateProductionOrder(value: RouteLeaf) {\n this.replace(this._duplicateProductionOrder, value);\n this._duplicateProductionOrder = value;\n }\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {ToolRoute} from './tool-route';\n\nexport class UtilitiesRoute extends RouteBranch {\n private _tool: ToolRoute;\n\n public get tool(): ToolRoute {\n return this._tool;\n }\n\n public set tool(value: ToolRoute) {\n this.replace(this._tool, value);\n this._tool = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class WeaveProductRoute extends RouteBranch {\n private _addWeaveProduct: RouteLeaf;\n private _duplicateWeaveProduct: RouteLeaf;\n private _editWeaveProduct: RouteLeaf;\n\n public get addWeaveProduct(): RouteLeaf {\n return this._addWeaveProduct;\n }\n\n public set addWeaveProduct(value: RouteLeaf) {\n this.replace(this._addWeaveProduct, value);\n this._addWeaveProduct = value;\n }\n\n public get duplicateWeaveProduct(): RouteLeaf {\n return this._duplicateWeaveProduct;\n }\n\n public set duplicateWeaveProduct(value: RouteLeaf) {\n this.replace(this._duplicateWeaveProduct, value);\n this._duplicateWeaveProduct = value;\n }\n\n public get editWeaveProduct(): RouteLeaf {\n return this._editWeaveProduct;\n }\n\n public set editWeaveProduct(value: RouteLeaf) {\n this.replace(this._editWeaveProduct, value);\n this._editWeaveProduct = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\n\nexport class WeaveStructureRoute extends RouteBranch {\n private _addWeaveStructure: RouteLeaf;\n private _duplicateWeaveStructure: RouteLeaf;\n private _editWeaveStructure: RouteLeaf;\n private _manageAddWeaveStructure: RouteLeaf;\n private _overviewWeaveStructure: RouteLeaf;\n private _manageOverviewWeaveStructure: RouteLeaf;\n private _weaveStructureSettings: RouteLeaf;\n\n public get overviewWeaveStructure(): RouteLeaf {\n return this._overviewWeaveStructure;\n }\n\n public set overviewWeaveStructure(value: RouteLeaf) {\n this.replace(this._overviewWeaveStructure, value);\n this._overviewWeaveStructure = value;\n }\n\n public get addWeaveStructure(): RouteLeaf {\n return this._addWeaveStructure;\n }\n\n public set addWeaveStructure(value: RouteLeaf) {\n this.replace(this._addWeaveStructure, value);\n this._addWeaveStructure = value;\n }\n\n public get duplicateWeaveStructure(): RouteLeaf {\n return this._duplicateWeaveStructure;\n }\n\n public set duplicateWeaveStructure(value: RouteLeaf) {\n this.replace(this._duplicateWeaveStructure, value);\n this._duplicateWeaveStructure = value;\n }\n\n public get editWeaveStructure(): RouteLeaf {\n return this._editWeaveStructure;\n }\n\n public set editWeaveStructure(value: RouteLeaf) {\n this.replace(this._editWeaveStructure, value);\n this._editWeaveStructure = value;\n }\n\n public get weaveStructureSettings(): RouteLeaf {\n return this._weaveStructureSettings;\n }\n\n public set weaveStructureSettings(value: RouteLeaf) {\n this.replace(this._weaveStructureSettings, value);\n this._weaveStructureSettings = value;\n }\n\n public get manageAddWeaveStructure(): RouteLeaf {\n return this._manageAddWeaveStructure;\n }\n\n public set manageAddWeaveStructure(value: RouteLeaf) {\n this.replace(this._manageAddWeaveStructure, value);\n this._manageAddWeaveStructure = value;\n }\n\n public get manageOverviewWeaveStructure(): RouteLeaf {\n return this._manageOverviewWeaveStructure;\n }\n\n public set manageOverviewWeaveStructure(value: RouteLeaf) {\n this.replace(this._manageOverviewWeaveStructure, value);\n this._manageOverviewWeaveStructure = value;\n }\n}\n","import {RouteBranch} from './route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class WeavingRoute extends RouteBranch {\n private _productionOrder: RouteLeaf;\n private _addProductionOrder: RouteLeaf;\n private _editProductionOrder: RouteLeaf;\n private _duplicateProductionOrder: RouteLeaf;\n private _addProductionOrderForRun: RouteLeaf;\n private _addProductionOrderForMachine: RouteLeaf;\n private _settings: RouteLeaf;\n\n public get productionOrder(): RouteLeaf {\n return this._productionOrder;\n }\n\n public set productionOrder(value: RouteLeaf) {\n this.replace(this._productionOrder, value);\n this._productionOrder = value;\n }\n\n public get addProductionOrder(): RouteLeaf {\n return this._addProductionOrder;\n }\n\n public set addProductionOrder(value: RouteLeaf) {\n this.replace(this._addProductionOrder, value);\n this._addProductionOrder = value;\n }\n\n public get addProductionOrderForRun(): RouteLeaf {\n return this._addProductionOrderForRun;\n }\n\n public set addProductionOrderForRun(value: RouteLeaf) {\n this.replace(this._addProductionOrderForRun, value);\n this._addProductionOrderForRun = value;\n }\n\n public get addProductionOrderForMachine(): RouteLeaf {\n return this._addProductionOrderForMachine;\n }\n\n public set addProductionOrderForMachine(value: RouteLeaf) {\n this.replace(this._addProductionOrderForMachine, value);\n this._addProductionOrderForMachine = value;\n }\n\n public get editProductionOrder(): RouteLeaf {\n return this._editProductionOrder;\n }\n\n public set editProductionOrder(value: RouteLeaf) {\n this.replace(this._editProductionOrder, value);\n this._editProductionOrder = value;\n }\n\n public get duplicateProductionOrder(): RouteLeaf {\n return this._duplicateProductionOrder;\n }\n\n public set duplicateProductionOrder(value: RouteLeaf) {\n this.replace(this._duplicateProductionOrder, value);\n this._duplicateProductionOrder = value;\n }\n\n public get settings(): RouteLeaf {\n return this._settings;\n }\n\n public set settings(value: RouteLeaf) {\n this.replace(this._settings, value);\n this._settings = value;\n }\n}\n","import {RouteBranch} from '@application/helper/routing/route-branch';\nimport {RouteLeaf} from './route-leaf';\n\nexport class WeftColoredYarnSetRoute extends RouteBranch {\n private _addWeftColoredYarnSet: RouteLeaf;\n private _duplicateWeftColoredYarnSet: RouteLeaf;\n private _editWeftColoredYarnSet: RouteLeaf;\n\n public get addWeftColoredYarnSet(): RouteLeaf {\n return this._addWeftColoredYarnSet;\n }\n\n public set addWeftColoredYarnSet(value: RouteLeaf) {\n this.replace(this._addWeftColoredYarnSet, value);\n this._addWeftColoredYarnSet = value;\n }\n\n public get duplicateWeftColoredYarnSet(): RouteLeaf {\n return this._duplicateWeftColoredYarnSet;\n }\n\n public set duplicateWeftColoredYarnSet(value: RouteLeaf) {\n this.replace(this._duplicateWeftColoredYarnSet, value);\n this._duplicateWeftColoredYarnSet = value;\n }\n\n public get editWeftColoredYarnSet(): RouteLeaf {\n return this._editWeftColoredYarnSet;\n }\n\n public set editWeftColoredYarnSet(value: RouteLeaf) {\n this.replace(this._editWeftColoredYarnSet, value);\n this._editWeftColoredYarnSet = value;\n }\n}\n","import {Params, PRIMARY_OUTLET, Route, Router, UrlSegment} from '@angular/router';\nimport {ArticleRoute} from '@application/helper/routing/article-route';\nimport {ColorRoute} from '@application/helper/routing/color-route';\nimport {ColorSetRoute} from '@application/helper/routing/color-set-route';\nimport {ColoredYarnSetRoute} from '@application/helper/routing/colored-yarn-set-route';\nimport {CreelRoute} from '@application/helper/routing/creel-route';\nimport {FinishingTemplateRoute} from '@application/helper/routing/finishing-template-route';\nimport {MachineQualityRoute} from '@application/helper/routing/machine-quality-route';\nimport {RootRoute} from '@application/helper/routing/root-route';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\nimport {SalesOrderRoute} from '@application/helper/routing/sales-order-route';\nimport {TexBiRoute} from '@application/helper/routing/tex-bi-route';\nimport {TexBotRoute} from '@application/helper/routing/tex-bot-route';\nimport {TexEditRoute} from '@application/helper/routing/tex-edit-route';\nimport {TexFabRoute} from '@application/helper/routing/tex-fab-route';\nimport {TexStateRoute} from '@application/helper/routing/tex-state-route';\nimport {TexStyleRoute} from '@application/helper/routing/tex-style-route';\nimport {YarnRoute} from '@application/helper/routing/yarn-route';\nimport {YarnSetRoute} from '@application/helper/routing/yarn-set-route';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {isEmpty, keys} from 'lodash-es';\nimport {AlertRoute} from './alert-route';\nimport {BuggyRoute} from './buggy-route';\nimport {CalendarRoute} from './calendar-route';\nimport {ColoredYarnRoute} from './colored-yarn-route';\nimport {CompanyWeaveStructureRoute} from './company-weave-structure-route';\nimport {CustomerRoute} from './customer-route';\nimport {DataUnitSetupCatalogRoute} from './data-unit-setup-catalog-route';\nimport {DataUnitSetupRoute} from './data-unit-setup-route';\nimport {DeclarationRoute} from './declaration-route';\nimport {DeviceTemplateCatalogRoute} from './device-template-catalog-route';\nimport {DeviceTemplateRoute} from './device-template-route';\nimport {EventRoute} from './event-route';\nimport {FixedScheduleRoute} from './fixed-schedule-route';\nimport {GroupedWeaveStructureRoute} from './grouped-weave-structure-route';\nimport {MachineDataSourceRoute} from './machine-data-sources.route';\nimport {OperatorRoute} from './operator-route';\nimport {OrderbookRoute} from './orderbook-route';\nimport {PathLayoutTemplateRoute} from './path-layout-template.route';\nimport {PhysicalQuantityRoute} from './physical-quantity-route';\nimport {PlanningPrototypeRoute} from './planning-prototype-route';\nimport {PlanningRoute} from './planning-route';\nimport {PlasticProductRoute} from './plastic-product-route';\nimport {PlasticRoute} from './plastic-route';\nimport {ProductionOrderRoute} from './production-order.route';\nimport {ProfileRoute} from './profile-route';\nimport {RejectReasonRoute} from './reject-reason-route';\nimport {ReportItemRoute} from './report-item-route';\nimport {ResourceTypeRoute} from './resource-type-route';\nimport {SettingsRoute} from './settings-route';\nimport {ShiftRoute} from './shift-route';\nimport {TexBotMachineDocumentationRoute} from './tex-bot-machine-documentation-route';\nimport {TexBotTrainingRoute} from './tex-bot-training-route';\nimport {ToolRoute} from './tool-route';\nimport {TuftProductRoute} from './tuft-product-route';\nimport {TuftingRoute} from './tufting-route';\nimport {UtilitiesRoute} from './utilities-route';\nimport {WeaveProductRoute} from './weave-product-route';\nimport {WeaveStructureRoute} from './weave-structure-route';\nimport {WeavingRoute} from './weaving.route';\nimport {WeftColoredYarnSetRoute} from './weft-colored-yarn-set-route';\n\nexport class RouteUtils {\n public static readonly paths: RootRoute = RouteUtils.initialize();\n\n public static buildPathFromSegmentsAndQueryParams(segments: UrlSegment[], params: Params): string {\n let path = segments.join('/');\n\n if (!isEmpty(params)) {\n const queryStrings = keys(params).map((key: string) => `${key}=${params[key]}`);\n path = `${path}?${queryStrings.join('&')}`;\n }\n return path;\n }\n\n public static isKnownPath(pathSegments: string[]): boolean {\n return RouteUtils.paths.isKnownPath(pathSegments);\n }\n\n public static getParentRoute(path: string, router: Router): Route {\n const tree = router.parseUrl(path);\n const urlSegmentGroup = tree.root.children[PRIMARY_OUTLET];\n\n return router.config.find((route: Route) => route.path.includes(urlSegmentGroup.segments[0].toString()));\n }\n\n public static isRoutePathMatching(routeA: string, routeB: string): boolean {\n if (AssertionUtils.isNullOrUndefined(routeA) || AssertionUtils.isNullOrUndefined(routeB)) {\n return false;\n }\n\n const patternParts = routeB\n .replace(/:\\w+/g, '*')\n .split('/')\n .map((part: string) => (part === '*' ? '.*' : part));\n\n return new RegExp(`^${patternParts.join('\\\\/')}$`).test(window?.location?.origin ? routeA.replace(window.location.origin, '') : routeA);\n }\n\n private static initialize(): RootRoute {\n const rootRoute = new RootRoute('');\n\n rootRoute.login = new RouteLeaf('login');\n\n const texEdit = new TexEditRoute('texedit', Permission.TEXEDIT_SHOW_ICON, false);\n texEdit.dataSheets = new RouteLeaf('datasheets', Permission.TEXEDIT_TUFTLINK);\n texEdit.dataSheetDetails = new RouteLeaf('datasheets/:id', Permission.TEXEDIT_TUFTLINK);\n texEdit.designLibrary = new RouteLeaf('design-library', Permission.TEXEDIT_VIEW_DRAWING_LIBRARY);\n texEdit.designLibrarySettings = new RouteLeaf('design-library/settings', Permission.TEXSTYLE_VIEW);\n texEdit.addDesign = new RouteLeaf('design-library/add', Permission.TEXEDIT_EDIT_DRAWING_LIBRARY);\n texEdit.productConfiguration = new RouteLeaf('product-configuration', Permission.TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW);\n texEdit.addProductConfiguration = new RouteLeaf('product-configuration/add', Permission.TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW);\n texEdit.editProductConfiguration = new RouteLeaf('product-configuration/edit/:id', Permission.TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW);\n texEdit.duplicateProductConfiguration = new RouteLeaf('product-configuration/add/:id', Permission.TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW);\n texEdit.productConfigurationSettings = new RouteLeaf('product-configuration/settings', Permission.TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW);\n texEdit.tuftLink = new RouteLeaf('tuft-link', Permission.TEXEDIT_TUFTLINK);\n rootRoute.texEdit = texEdit;\n\n const texState = new TexStateRoute('texstate', Permission.TEXSTATE_SHOW_ICON, true);\n texState.settings = new RouteLeaf('settings');\n texState.addTemplate = new RouteLeaf('settings/template/add', Permission.TEXSTATE_EDIT_DYNAMIC_DATA_TEMPLATE);\n texState.editTemplate = new RouteLeaf('settings/template/edit/:id', Permission.TEXSTATE_VIEW_DYNAMIC_DATA_TEMPLATE);\n texState.duplicateTemplate = new RouteLeaf('settings/template/add/:id', Permission.TEXSTATE_EDIT_DYNAMIC_DATA_TEMPLATE);\n texState.editMachine = new RouteLeaf('edit/:machineType/:id', Permission.TEXSTATE_EDIT_MACHINE);\n texState.kiosk = new RouteLeaf('kiosk');\n texState.addWeavingMachineType = new RouteLeaf('weaving-machine-type/add');\n texState.addPlasticMachineType = new RouteLeaf('plastic-machine-type/add');\n texState.addTuftingMachineType = new RouteLeaf('tufting-machine-type/add');\n texState.addWinderMachineType = new RouteLeaf('winder-machine-type/add');\n texState.addDyeingMachineType = new RouteLeaf('dyeing-machine-type/add');\n texState.prototype = new RouteLeaf('prototype', Permission.TEXSTATE_VIEW_DYNAMIC_DATA_TEMPLATE);\n rootRoute.texState = texState;\n\n const texBi = new TexBiRoute('texbi', Permission.TEXBI_SHOW_ICON, false);\n texBi.reports = new RouteLeaf('reports', Permission.TEXBI_READ_A_REPORT);\n texBi.bmsreports = new RouteLeaf('bms-reports-page');\n texBi.windervibrationreport = new RouteLeaf('bms-reports-page/windervibration', Permission.TEXBI_EXTRUSION_VIBRATION_REPORT);\n texBi.qmreports = new RouteLeaf('bms-reports-page/qualimaster', Permission.ACCESS_ALL);\n texBi.wmreports = new RouteLeaf('bms-reports-page/weavemaster', Permission.ACCESS_ALL);\n texBi.emreports = new RouteLeaf('bms-reports-page/energymaster', Permission.ACCESS_ALL);\n texBi.machineEventBoard = new RouteLeaf('machine-event-board', Permission.TEXBI_EVENT_BOARD_VIEW);\n texBi.winderVibrationForm = new RouteLeaf('winder-vibration-form', Permission.TEXBI_EXTRUSION_VIBRATION_FORM);\n rootRoute.texBi = texBi;\n\n const profile = new ProfileRoute('profile', null, true);\n profile.changelogMobile = new RouteLeaf('changelog-mobile', null, true);\n rootRoute.profile = profile;\n\n rootRoute.help = new RouteLeaf('help', null, true);\n rootRoute.unauthorized = new RouteLeaf('unauthorized');\n rootRoute.notFound = new RouteLeaf('not-found');\n rootRoute.credits = new RouteLeaf('credits', Permission.MANAGEMENT_APPLICATION, false);\n\n const texStyle = new TexStyleRoute('texstyle', Permission.TEXSTYLE_SHOW_ICON, false);\n\n const finishingTemplate = new FinishingTemplateRoute('finishing-template', Permission.TEXSTYLE_FINISHING_VIEW);\n finishingTemplate.addFinishingTemplate = new RouteLeaf('add', Permission.TEXSTYLE_FINISHING_EDIT);\n finishingTemplate.duplicateFinishingTemplate = new RouteLeaf('add/:id', Permission.TEXSTYLE_FINISHING_EDIT);\n finishingTemplate.editFinishingTemplate = new RouteLeaf('edit/:id', Permission.TEXSTYLE_FINISHING_VIEW);\n texStyle.finishingTemplate = finishingTemplate;\n\n const color = new ColorRoute('color', Permission.TEXSTYLE_COLOR_VIEW);\n color.addColor = new RouteLeaf('add', Permission.TEXSTYLE_COLOR_EDIT);\n color.duplicateColor = new RouteLeaf('add/:id', Permission.TEXSTYLE_COLOR_EDIT);\n color.editColor = new RouteLeaf('edit/:id', Permission.TEXSTYLE_COLOR_VIEW);\n color.colorSettings = new RouteLeaf('settings', Permission.TEXSTYLE_COLOR_EDIT);\n texStyle.color = color;\n\n const colorSet = new ColorSetRoute('color-set', Permission.TEXSTYLE_COLORSET_VIEW);\n colorSet.addColorSet = new RouteLeaf('add', Permission.TEXSTYLE_COLORSET_EDIT);\n colorSet.duplicateColorSet = new RouteLeaf('add/:id', Permission.TEXSTYLE_COLORSET_EDIT);\n colorSet.editColorSet = new RouteLeaf('edit/:id', Permission.TEXSTYLE_COLORSET_VIEW);\n colorSet.colorSetSettings = new RouteLeaf('settings', Permission.TEXSTYLE_COLORSET_EDIT);\n texStyle.colorSet = colorSet;\n\n const yarnSet = new YarnSetRoute('yarn-set', Permission.TEXSTYLE_YARNSET_VIEW);\n yarnSet.addYarnSet = new RouteLeaf('add', Permission.TEXSTYLE_YARNSET_EDIT);\n yarnSet.duplicateYarnSet = new RouteLeaf('add/:id', Permission.TEXSTYLE_YARNSET_EDIT);\n yarnSet.editYarnSet = new RouteLeaf('edit/:id', Permission.TEXSTYLE_YARNSET_VIEW);\n yarnSet.yarnSetSettings = new RouteLeaf('settings', Permission.TEXSTYLE_YARNSET_EDIT);\n texStyle.yarnSet = yarnSet;\n\n const coloredYarnSet = new ColoredYarnSetRoute('colored-yarn-set', Permission.TEXSTYLE_COLOREDYARNSET_VIEW);\n coloredYarnSet.addColoredYarnSet = new RouteLeaf('add', Permission.TEXSTYLE_COLOREDYARNSET_EDIT);\n coloredYarnSet.duplicateColoredYarnSet = new RouteLeaf('add/:id', Permission.TEXSTYLE_COLOREDYARNSET_EDIT);\n coloredYarnSet.editColoredYarnSet = new RouteLeaf('edit/:id', Permission.TEXSTYLE_COLOREDYARNSET_VIEW);\n texStyle.coloredYarnSet = coloredYarnSet;\n\n const weftColoredYarnSet = new WeftColoredYarnSetRoute('weft-colored-yarn-set', Permission.TEXSTYLE_WEFTCOLOREDYARNSET_VIEW);\n weftColoredYarnSet.addWeftColoredYarnSet = new RouteLeaf('add', Permission.TEXSTYLE_WEFTCOLOREDYARNSET_EDIT);\n weftColoredYarnSet.duplicateWeftColoredYarnSet = new RouteLeaf('add/:id', Permission.TEXSTYLE_WEFTCOLOREDYARNSET_EDIT);\n weftColoredYarnSet.editWeftColoredYarnSet = new RouteLeaf('edit/:id', Permission.TEXSTYLE_WEFTCOLOREDYARNSET_VIEW);\n texStyle.weftColoredYarnSet = weftColoredYarnSet;\n\n const coloredYarn = new ColoredYarnRoute('colored-yarn', Permission.ACCESS_ALL);\n coloredYarn.addColoredYarn = new RouteLeaf('add', Permission.ACCESS_ALL);\n coloredYarn.duplicateColoredYarn = new RouteLeaf('add/:id', Permission.ACCESS_ALL);\n coloredYarn.editColoredYarn = new RouteLeaf('edit/:id', Permission.ACCESS_ALL);\n texStyle.coloredYarn = coloredYarn;\n\n const yarn = new YarnRoute('yarn', Permission.TEXSTYLE_YARN_VIEW);\n yarn.addYarn = new RouteLeaf('add', Permission.TEXSTYLE_YARN_EDIT);\n yarn.duplicateYarn = new RouteLeaf('add/:id', Permission.TEXSTYLE_YARN_EDIT);\n yarn.editYarn = new RouteLeaf('edit/:id', Permission.TEXSTYLE_YARN_VIEW);\n texStyle.yarn = yarn;\n\n const fixedSchedule = new FixedScheduleRoute('fixed-schedule', Permission.FIXED_SCHEDULE_VIEW);\n fixedSchedule.addFixedSchedule = new RouteLeaf('add', Permission.FIXED_SCHEDULE_EDIT);\n fixedSchedule.duplicateFixedSchedule = new RouteLeaf('add/:id', Permission.FIXED_SCHEDULE_EDIT);\n fixedSchedule.editFixedSchedule = new RouteLeaf('edit/:id', Permission.FIXED_SCHEDULE_EDIT);\n texStyle.fixedSchedule = fixedSchedule;\n\n const machineQuality = new MachineQualityRoute('machine-quality', Permission.TEXSTYLE_MACHINE_QUALITY_VIEW);\n machineQuality.addMachineQuality = new RouteLeaf('add', Permission.TEXSTYLE_MACHINE_QUALITY_EDIT);\n machineQuality.duplicateMachineQuality = new RouteLeaf('add/:id', Permission.TEXSTYLE_MACHINE_QUALITY_EDIT);\n machineQuality.editMachineQuality = new RouteLeaf('edit/:id', Permission.TEXSTYLE_MACHINE_QUALITY_VIEW);\n machineQuality.addFinishing = new RouteLeaf('finishing/add', Permission.TEXSTYLE_FINISHING_EDIT);\n machineQuality.addFinishingFromQuality = new RouteLeaf('edit/:qualityId/finishing/add', Permission.TEXSTYLE_FINISHING_EDIT);\n machineQuality.duplicateFinishing = new RouteLeaf('finishing/add/:id', Permission.TEXSTYLE_FINISHING_EDIT);\n machineQuality.editFinishing = new RouteLeaf('finishing/edit/:id', Permission.TEXSTYLE_FINISHING_VIEW);\n machineQuality.editFinishingFromQuality = new RouteLeaf('edit/:qualityId/finishing/:id', Permission.TEXSTYLE_FINISHING_EDIT);\n texStyle.machineQuality = machineQuality;\n\n const buggy = new BuggyRoute('buggy', Permission.VIEW_BUGGIES);\n buggy.addBuggy = new RouteLeaf('add', Permission.EDIT_BUGGIES);\n buggy.duplicateBuggy = new RouteLeaf('add/:id', Permission.EDIT_BUGGIES);\n buggy.editBuggy = new RouteLeaf('edit/:id', Permission.VIEW_BUGGIES);\n texStyle.buggy = buggy;\n\n const creel = new CreelRoute('creel', Permission.TEXSTYLE_CREEL_VIEW);\n creel.addCreel = new RouteLeaf('add', Permission.TEXSTYLE_CREEL_EDIT);\n creel.duplicateCreel = new RouteLeaf('add/:id', Permission.TEXSTYLE_CREEL_EDIT);\n creel.editCreel = new RouteLeaf('edit/:id', Permission.TEXSTYLE_CREEL_VIEW);\n creel.creelSettings = new RouteLeaf('settings', Permission.TEXSTYLE_CREEL_EDIT);\n texStyle.creel = creel;\n\n const weaveProduct = new WeaveProductRoute('weave-product', Permission.TEXSTYLE_WEAVE_PRODUCT_VIEW);\n weaveProduct.addWeaveProduct = new RouteLeaf('add', Permission.TEXSTYLE_WEAVE_PRODUCT_EDIT);\n weaveProduct.duplicateWeaveProduct = new RouteLeaf('add/:id', Permission.TEXSTYLE_WEAVE_PRODUCT_EDIT);\n weaveProduct.editWeaveProduct = new RouteLeaf('edit/:id', Permission.TEXSTYLE_WEAVE_PRODUCT_VIEW);\n texStyle.weaveProduct = weaveProduct;\n\n const tuftProduct = new TuftProductRoute('tuft-product', Permission.TEXSTYLE_TUFT_PRODUCT_VIEW);\n tuftProduct.addTuftProduct = new RouteLeaf('add', Permission.TEXSTYLE_TUFT_PRODUCT_EDIT);\n tuftProduct.editTuftProduct = new RouteLeaf('edit/:id', Permission.TEXSTYLE_TUFT_PRODUCT_VIEW);\n tuftProduct.duplicateTuftProduct = new RouteLeaf('add/:id', Permission.TEXSTYLE_TUFT_PRODUCT_EDIT);\n texStyle.tuftProduct = tuftProduct;\n\n const plasticProduct = new PlasticProductRoute('plastic-product', Permission.TEXSTYLE_PLASTIC_PRODUCT_VIEW);\n plasticProduct.addPlasticProduct = new RouteLeaf('add', Permission.TEXSTYLE_PLASTIC_PRODUCT_EDIT);\n plasticProduct.editPlasticProduct = new RouteLeaf('edit/:id', Permission.TEXSTYLE_PLASTIC_PRODUCT_VIEW);\n plasticProduct.duplicatePlasticProduct = new RouteLeaf('add/:id', Permission.TEXSTYLE_TUFT_PRODUCT_EDIT);\n texStyle.plasticProduct = plasticProduct;\n\n const weaveStructure = new WeaveStructureRoute('weave-structure', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.overviewWeaveStructure = new RouteLeaf('', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.addWeaveStructure = new RouteLeaf('add', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.duplicateWeaveStructure = new RouteLeaf('add/:id', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.editWeaveStructure = new RouteLeaf('edit/:id', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.weaveStructureSettings = new RouteLeaf('settings', Permission.TEXSTYLE_VIEW_WEAVE_STRUCTURES);\n weaveStructure.manageOverviewWeaveStructure = new RouteLeaf('manage', Permission.MANAGE_WEAVE_STRUCTURE_VIEW);\n weaveStructure.manageAddWeaveStructure = new RouteLeaf('manage/add', Permission.MANAGE_WEAVE_STRUCTURE_EDIT);\n texStyle.weaveStructure = weaveStructure;\n texStyle.companyWeaveStructure = new CompanyWeaveStructureRoute('company-weave-structure', Permission.COMPANY_WEAVE_STRUCTURE_VIEW);\n rootRoute.texStyle = texStyle;\n\n const groupedWeaveStructure = new GroupedWeaveStructureRoute('grouped-weave-structure');\n groupedWeaveStructure.overviewGroupedWeaveStructure = new RouteLeaf('', Permission.ACCESS_ALL);\n groupedWeaveStructure.addGroupedWeaveStructure = new RouteLeaf('add', Permission.ACCESS_ALL);\n groupedWeaveStructure.editGroupedWeaveStructure = new RouteLeaf('edit/:id', Permission.ACCESS_ALL);\n groupedWeaveStructure.duplicateGroupedWeaveStructure = new RouteLeaf('add/:id', Permission.ACCESS_ALL);\n texStyle.groupedWeaveStructure = groupedWeaveStructure;\n\n const texFab = new TexFabRoute('texfab', Permission.TEXFAB_SHOW_ICON, false);\n texFab.planning = new PlanningRoute('planning', Permission.TEXFAB_PLANNINGBOARD);\n texFab.planningPrototype = new PlanningPrototypeRoute('planning-prototype', Permission.TEXFAB_PLANNINGBOARD_NEW);\n\n const productionOrder = new ProductionOrderRoute('production-order', Permission.TEXFAB_SCHEDULE, true);\n productionOrder.addProductionOrder = new RouteLeaf('add');\n productionOrder.addProductionOrderNewView = new RouteLeaf('add/new');\n productionOrder.addProductionOrderForMachine = new RouteLeaf('add/machine/:id');\n productionOrder.addProductionOrderNewViewForMachine = new RouteLeaf('add/machine/new/:id');\n productionOrder.addProductionOrderForRun = new RouteLeaf('add/run');\n productionOrder.addProductionOrderNewViewForRun = new RouteLeaf('add/run/new');\n productionOrder.addProductionOrderForProductConfiguration = new RouteLeaf('add/product-configuration/:id');\n productionOrder.addProductionOrderNewViewForProductConfiguration = new RouteLeaf('add/product-configuration/:id/new');\n productionOrder.duplicateProductionOrder = new RouteLeaf('add/:id');\n productionOrder.duplicateProductionOrderNewView = new RouteLeaf('add/:id/new');\n productionOrder.editProductionOrderNewView = new RouteLeaf('edit/:id/new');\n productionOrder.editProductionOrder = new RouteLeaf('edit/:id');\n productionOrder.settings = new RouteLeaf('settings');\n productionOrder.details = new RouteLeaf('details/:id');\n texFab.productionOrder = productionOrder;\n\n const pathLayoutTemplate = new PathLayoutTemplateRoute('path-layout-template', Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW);\n pathLayoutTemplate.addPathLayoutTemplate = new RouteLeaf('add', Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT);\n pathLayoutTemplate.editPathLayoutTemplate = new RouteLeaf('edit/:id', Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW);\n pathLayoutTemplate.duplicatePathLayoutTemplate = new RouteLeaf('add/:id', Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT);\n pathLayoutTemplate.pathLayoutTemplateSettings = new RouteLeaf('settings', Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW);\n texFab.pathLayoutTemplate = pathLayoutTemplate;\n\n const weaving = new WeavingRoute('weaving', Permission.TEXFAB_WEAVE_ORDER_VIEW);\n weaving.productionOrder = new RouteLeaf('production-order', Permission.TEXFAB_WEAVE_ORDER_VIEW);\n weaving.addProductionOrder = new RouteLeaf('production-order/add', Permission.TEXFAB_WEAVE_ORDER_EDIT);\n weaving.addProductionOrderForRun = new RouteLeaf('production-order/add/run', Permission.TEXFAB_WEAVE_QUEUE);\n weaving.addProductionOrderForMachine = new RouteLeaf('production-order/add/machine/:id', Permission.TEXFAB_WEAVE_ORDER_EDIT);\n weaving.editProductionOrder = new RouteLeaf('production-order/edit/:id', Permission.TEXFAB_WEAVE_ORDER_VIEW);\n weaving.duplicateProductionOrder = new RouteLeaf('production-order/add/:id', Permission.TEXFAB_WEAVE_ORDER_EDIT);\n weaving.settings = new RouteLeaf('production-order/settings', Permission.TEXFAB_WEAVE_ORDER_VIEW);\n texFab.weaving = weaving;\n\n const tufting = new TuftingRoute('tufting', Permission.TEXFAB_TUFT_ORDER_VIEW);\n tufting.productionOrder = new RouteLeaf('production-order', Permission.TEXFAB_TUFT_ORDER_VIEW);\n tufting.addProductionOrder = new RouteLeaf('production-order/add', Permission.TEXFAB_TUFT_ORDER_EDIT);\n tufting.addProductionOrderForRun = new RouteLeaf('production-order/add/run', Permission.TEXFAB_TUFT_QUEUE);\n tufting.addProductionOrderForMachine = new RouteLeaf('production-order/add/machine/:id');\n tufting.editProductionOrder = new RouteLeaf('production-order/edit/:id', Permission.TEXFAB_TUFT_ORDER_VIEW);\n tufting.duplicateProductionOrder = new RouteLeaf('production-order/add/:id', Permission.TEXFAB_TUFT_ORDER_EDIT);\n tufting.settings = new RouteLeaf('production-order/settings', Permission.TEXFAB_TUFT_ORDER_VIEW);\n texFab.tufting = tufting;\n\n const plastic = new PlasticRoute('plastic', Permission.TEXFAB_PLASTIC_ORDER_VIEW);\n plastic.productionOrder = new RouteLeaf('production-order', Permission.TEXFAB_PLASTIC_ORDER_VIEW);\n plastic.addProductionOrder = new RouteLeaf('production-order/add', Permission.TEXFAB_PLASTIC_ORDER_EDIT);\n plastic.editProductionOrder = new RouteLeaf('production-order/edit/:id', Permission.TEXFAB_PLASTIC_ORDER_VIEW);\n plastic.duplicateProductionOrder = new RouteLeaf('production-order/add/:id', Permission.TEXFAB_PLASTIC_ORDER_EDIT);\n plastic.addProductionOrderForMachine = new RouteLeaf('production-order/add/machine/:id', Permission.TEXFAB_PLASTIC_ORDER_EDIT);\n texFab.plastic = plastic;\n\n const customer = new CustomerRoute('customer', Permission.TEXFAB_CUSTOMER_VIEW, true);\n customer.addCustomer = new RouteLeaf('add', Permission.TEXFAB_CUSTOMER_EDIT);\n customer.editCustomer = new RouteLeaf('edit/:id', Permission.TEXFAB_CUSTOMER_VIEW);\n texFab.customer = customer;\n\n const article = new ArticleRoute('article', Permission.TEXFAB_ARTICLE_VIEW, true);\n article.addArticle = new RouteLeaf('add', Permission.TEXFAB_ARTICLE_EDIT);\n article.editArticle = new RouteLeaf('edit/:id', Permission.TEXFAB_ARTICLE_VIEW);\n article.duplicateArticle = new RouteLeaf('add/:id', Permission.TEXFAB_ARTICLE_EDIT);\n texFab.article = article;\n\n const salesOrder = new SalesOrderRoute('sales-order', Permission.TEXFAB_SALES_ORDER_VIEW);\n salesOrder.addSalesOrder = new RouteLeaf('add', Permission.TEXFAB_SALES_ORDER_EDIT);\n salesOrder.editSalesOrder = new RouteLeaf('edit/:id', Permission.TEXFAB_SALES_ORDER_VIEW);\n salesOrder.duplicateSalesOrder = new RouteLeaf('add/:id', Permission.TEXFAB_SALES_ORDER_EDIT);\n texFab.salesOrder = salesOrder;\n\n const orderbook = new OrderbookRoute('orderbook', Permission.TEXFAB_ORDERBOOK);\n orderbook.settings = new RouteLeaf('settings', Permission.TEXFAB_ORDERBOOK);\n\n texFab.orderbook = orderbook;\n\n rootRoute.texFab = texFab;\n\n const calendar = new CalendarRoute('calendar');\n\n const shift = new ShiftRoute('shift', Permission.SHIFT_VIEW);\n shift.addShift = new RouteLeaf('add', Permission.SHIFT_EDIT);\n shift.editShift = new RouteLeaf('edit/:id', Permission.SHIFT_VIEW);\n shift.duplicateShift = new RouteLeaf('add/:id', Permission.SHIFT_EDIT);\n calendar.shift = shift;\n\n rootRoute.calendar = calendar;\n\n const texBot = new TexBotRoute('texbot', Permission.TEXBOT_SHOW_ICON, true);\n\n const machineDocumentation = new TexBotMachineDocumentationRoute('machine-documentation', Permission.TEXBOT_DOCUMENTS_VIEW, true);\n machineDocumentation.details = new RouteLeaf('details/:id', Permission.TEXBOT_DOCUMENTS_VIEW);\n\n const training = new TexBotTrainingRoute('training', Permission.TEXBOT_TRAINING_VIEW, true);\n training.machineDetails = new RouteLeaf('details/:machineId', Permission.TEXBOT_TRAINING_VIEW);\n training.details = new RouteLeaf('details/:machineId/:id', Permission.TEXBOT_TRAINING_VIEW);\n training.manage = new RouteLeaf('manage', Permission.TEXBOT_TRAINING_MANAGE);\n training.manageTags = new RouteLeaf('manage/tags', Permission.TEXBOT_TRAINING_MANAGE);\n training.manageDetails = new RouteLeaf('manage/:id', Permission.TEXBOT_TRAINING_MANAGE);\n\n texBot.machineDocumentation = machineDocumentation;\n texBot.training = training;\n\n rootRoute.texBot = texBot;\n\n const utilities = new UtilitiesRoute('utilities', Permission.TEXSTYLE_SHOW_ICON);\n\n const tool = new ToolRoute('tool', Permission.TEXSTYLE_PLASTIC_TOOL_VIEW);\n tool.addTool = new RouteLeaf('add', Permission.TEXSTYLE_PLASTIC_TOOL_EDIT);\n tool.editTool = new RouteLeaf('edit/:id', Permission.TEXSTYLE_PLASTIC_TOOL_VIEW);\n tool.duplicateTool = new RouteLeaf('add/:id', Permission.TEXSTYLE_PLASTIC_TOOL_EDIT);\n utilities.tool = tool;\n\n rootRoute.utilities = utilities;\n\n rootRoute.loadingFile = new RouteLeaf('loading-file');\n rootRoute.logger = new RouteLeaf('logger', Permission.ACCESS_ALL);\n rootRoute.notifications = new RouteLeaf('notifications', null, true, true);\n rootRoute.processes = new RouteLeaf('processes', Permission.ACCESS_ALL, false, true);\n\n const settings = new SettingsRoute('settings', Permission.SETTINGS_SHOW_ICON);\n settings.machineDataSources = new MachineDataSourceRoute('machine-data-sources', Permission.MACHINE_DATA_SOURCE_VIEW);\n settings.machineDataSources.addMachineDataSource = new RouteLeaf('add/:machineId', Permission.MACHINE_DATA_SOURCE_EDIT);\n settings.machineDataSources.editMachineDataSource = new RouteLeaf('edit/:machineId/:id', Permission.MACHINE_DATA_SOURCE_VIEW);\n settings.machineDataSources.settings = new RouteLeaf('settings', Permission.MACHINE_DATA_SOURCE_VIEW);\n\n const dataUnitSetupCatalog = new DataUnitSetupCatalogRoute('data-unit-setups-catalog', Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW);\n dataUnitSetupCatalog.customSetting = new RouteLeaf('settings', Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW);\n dataUnitSetupCatalog.addDataUnitSetupCatalog = new RouteLeaf('add', Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_EDIT);\n dataUnitSetupCatalog.editDataUnitSetupCatalog = new RouteLeaf('edit/:id', Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW);\n dataUnitSetupCatalog.duplicateDataUnitSetupCatalog = new RouteLeaf('add/:id', Permission.SETTINGS_DATA_UNIT_SETUP_CATALOG_EDIT);\n settings.dataUnitSetupCatalog = dataUnitSetupCatalog;\n\n const dataUnitSetup = new DataUnitSetupRoute('data-unit-setups', Permission.SETTINGS_DATA_UNIT_SETUP_VIEW);\n dataUnitSetup.addDataUnitSetupFromCatalog = new RouteLeaf('add-from-catalog/:id', Permission.SETTINGS_DATA_UNIT_SETUP_EDIT);\n dataUnitSetup.addDataUnitSetup = new RouteLeaf('add', Permission.SETTINGS_DATA_UNIT_SETUP_EDIT);\n dataUnitSetup.editDataUnitSetup = new RouteLeaf('edit/:id', Permission.SETTINGS_DATA_UNIT_SETUP_VIEW);\n dataUnitSetup.customSetting = new RouteLeaf('settings', Permission.SETTINGS_DATA_UNIT_SETUP_VIEW);\n settings.dataUnitSetup = dataUnitSetup;\n\n const resourceType = new ResourceTypeRoute('resource-types', Permission.RESOURCE_TYPE_VIEW);\n resourceType.addResourceType = new RouteLeaf('add', Permission.RESOURCE_TYPE_EDIT);\n resourceType.editResourceType = new RouteLeaf('edit/:id', Permission.RESOURCE_TYPE_VIEW);\n resourceType.duplicateResourceType = new RouteLeaf('add/:id', Permission.RESOURCE_TYPE_EDIT);\n settings.resourceType = resourceType;\n\n const physicalQuantity = new PhysicalQuantityRoute('physical-quantities', Permission.PHYSICAL_QUANTITY_VIEW);\n physicalQuantity.addPhysicalQuantity = new RouteLeaf('add', Permission.PHYSICAL_QUANTITY_EDIT);\n physicalQuantity.editPhysicalQuantity = new RouteLeaf('edit/:id', Permission.PHYSICAL_QUANTITY_VIEW);\n physicalQuantity.duplicatePhysicalQuantity = new RouteLeaf('add/:id', Permission.PHYSICAL_QUANTITY_EDIT);\n settings.physicalQuantity = physicalQuantity;\n\n const declaration = new DeclarationRoute('declaration', Permission.SETTINGS_DECLARATIONS_VIEW);\n declaration.addDeclaration = new RouteLeaf('add', Permission.SETTINGS_DECLARATIONS_EDIT);\n declaration.editDeclaration = new RouteLeaf('edit/:id', Permission.SETTINGS_DECLARATIONS_VIEW);\n settings.declaration = declaration;\n\n const deviceTemplate = new DeviceTemplateRoute('device-template', Permission.DEVICE_TEMPLATE_VIEW);\n deviceTemplate.addDeviceTemplate = new RouteLeaf('add', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.editDeviceTemplate = new RouteLeaf('edit/:id', Permission.DEVICE_TEMPLATE_VIEW);\n deviceTemplate.duplicateDeviceTemplate = new RouteLeaf('add/:id', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.addCounter = new RouteLeaf('counter/add', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.editCounter = new RouteLeaf('counter/edit/:id', Permission.DEVICE_TEMPLATE_VIEW);\n deviceTemplate.duplicateCounter = new RouteLeaf('counter/add/:id', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.addConfiguration = new RouteLeaf('configuration/add', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.editConfiguration = new RouteLeaf('configuration/edit/:id', Permission.DEVICE_TEMPLATE_VIEW);\n deviceTemplate.duplicateConfiguration = new RouteLeaf('configuration/add/:id', Permission.DEVICE_TEMPLATE_EDIT);\n deviceTemplate.addDeviceTemplateFromCatalog = new RouteLeaf('add-from-catalog/:id', Permission.DEVICE_TEMPLATE_EDIT);\n settings.deviceTemplate = deviceTemplate;\n\n const deviceTemplateCatalog = new DeviceTemplateCatalogRoute('device-template-catalog', Permission.ADMIN_DEVICE_TEMPLATE_VIEW);\n deviceTemplateCatalog.addDeviceTemplateCatalog = new RouteLeaf('add', Permission.ADMIN_DEVICE_TEMPLATE_EDIT);\n deviceTemplateCatalog.editDeviceTemplateCatalog = new RouteLeaf('edit/:id', Permission.ADMIN_DEVICE_TEMPLATE_VIEW);\n deviceTemplateCatalog.duplicateDeviceTemplateCatalog = new RouteLeaf('add/:id', Permission.ADMIN_DEVICE_TEMPLATE_EDIT);\n deviceTemplateCatalog.addCounterCatalog = new RouteLeaf('counter/add', Permission.ADMIN_DEVICE_TEMPLATE_EDIT);\n deviceTemplateCatalog.editCounterCatalog = new RouteLeaf('counter/edit/:id', Permission.ADMIN_DEVICE_TEMPLATE_VIEW);\n deviceTemplateCatalog.duplicateCounterCatalog = new RouteLeaf('counter/add/:id', Permission.ADMIN_DEVICE_TEMPLATE_EDIT);\n deviceTemplateCatalog.addConfigurationCatalog = new RouteLeaf('configuration/add', Permission.ADMIN_DEVICE_TEMPLATE_EDIT);\n deviceTemplateCatalog.editConfigurationCatalog = new RouteLeaf('configuration/edit/:id', Permission.ADMIN_DEVICE_TEMPLATE_VIEW);\n deviceTemplateCatalog.duplicateConfigurationCatalog = new RouteLeaf('configuration/add/:id', Permission.ADMIN_DEVICE_TEMPLATE_VIEW);\n settings.deviceTemplateCatalog = deviceTemplateCatalog;\n\n const reportItem = new ReportItemRoute('report-items', Permission.SETTINGS_REPORT_ITEM_VIEW);\n reportItem.editReportItem = new RouteLeaf('edit/:id', Permission.SETTINGS_REPORT_ITEM_VIEW);\n settings.reportItem = reportItem;\n\n const event = new EventRoute('events', Permission.ALERT_VIEW_EVENTS);\n event.addEvent = new RouteLeaf('add', Permission.ALERT_VIEW_EVENTS);\n event.duplicateEvent = new RouteLeaf('add/:id', Permission.ALERT_VIEW_EVENTS);\n event.editEvent = new RouteLeaf('edit/:id', Permission.ALERT_VIEW_EVENTS);\n settings.event = event;\n\n const alert = new AlertRoute('alerts', Permission.ALERT_VIEW_EVENTS);\n alert.addAlert = new RouteLeaf('add', Permission.ALERT_VIEW_EVENTS);\n alert.editAlert = new RouteLeaf('edit/:id', Permission.ALERT_VIEW_EVENTS);\n settings.alert = alert;\n\n settings.automaticStopGroup = new RouteLeaf('automatic-stop-groups', Permission.SETTINGS_AUTOMATIC_STOP_GROUP_VIEW);\n\n const operator = new OperatorRoute('operators', Permission.SETTINGS_OPERATOR_VIEW);\n operator.addOperator = new RouteLeaf('add', Permission.SETTINGS_OPERATOR_EDIT);\n operator.editOperator = new RouteLeaf('edit/:id', Permission.SETTINGS_OPERATOR_VIEW);\n operator.duplicateOperator = new RouteLeaf('add/:id', Permission.SETTINGS_OPERATOR_EDIT);\n operator.addOperatorType = new RouteLeaf('operator-type/add', Permission.SETTINGS_OPERATOR_TYPE_EDIT);\n operator.editOperatorType = new RouteLeaf('operator-type/edit/:id', Permission.SETTINGS_OPERATOR_TYPE_VIEW);\n settings.operator = operator;\n\n const rejectReason = new RejectReasonRoute('reject-reasons', Permission.REJECT_REASON_VIEW);\n rejectReason.addRejectReason = new RouteLeaf('add', Permission.REJECT_REASON_EDIT);\n rejectReason.editRejectReason = new RouteLeaf('edit/:id', Permission.REJECT_REASON_VIEW);\n rejectReason.duplicateRejectReason = new RouteLeaf('add/:id', Permission.REJECT_REASON_EDIT);\n settings.rejectReason = rejectReason;\n\n rootRoute.settings = settings;\n\n return rootRoute;\n }\n}\n","import {PositionOfDialog} from '@domain/position-of-dialog';\nimport {includes, isEqual, isNil} from 'lodash-es';\n\nexport class SourceElementUtils {\n public static findSourceElementForDialog(event: MouseEvent, className: string, positionOfDialog: PositionOfDialog = null): Element {\n let source: Element = event.target as Element;\n while (!includes(source.classList, className) && !isNil(source.parentElement)) {\n source = source.parentElement;\n }\n return source.children.item(!isNil(positionOfDialog) && isEqual(positionOfDialog, PositionOfDialog.LEFT) ? 0 : source.childElementCount - 1);\n }\n}\n","import {StringUtils as CommonStringUtils, TranslateService as CommonTranslateService, TranslateService} from '@vdw/angular-component-library';\nimport {get, isEmpty, join, lowerCase, map} from 'lodash-es';\n\nexport class StringUtils extends CommonStringUtils {\n public static createStringFromColorsOrYarnTypes(colorsOrYarnTypes: any[]): string {\n return join(map(colorsOrYarnTypes, 'name'), ', ');\n }\n\n public static getPropertyValueOrGeneralPlaceholderIfEmpty(objectToInspect: any, property: string, translate: TranslateService | CommonTranslateService): string {\n const value = get(objectToInspect, property);\n return isEmpty(value) ? translate.instant('GENERAL.NO_DATA', {object: lowerCase(translate.instant('GENERAL.NAME'))}) : value;\n }\n}\n","import {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {getMappedColoredYarnSet} from './get-mapped-colored-yarn-set';\n\nexport function getMappedColoredYarnSetWithStartDent(\n coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent,\n coloredYarnSetCreelMap: CreelMap,\n sortDirection: any = 'desc'\n): OverviewListColoredYarnSetWithStartDent {\n return new OverviewListColoredYarnSetWithStartDent(\n getMappedColoredYarnSet(coloredYarnSetWithStartDent.coloredYarnSet, coloredYarnSetCreelMap, sortDirection),\n coloredYarnSetWithStartDent.startDent,\n coloredYarnSetWithStartDent.technicalWidthInDents\n );\n}\n","import {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {isEmpty, isNil, orderBy} from 'lodash-es';\n\nexport function getMappedColoredYarnSet(coloredYarnSet: OverviewListColoredYarnSet, coloredYarnSetCreelMap: CreelMap, sortDirection: any = 'desc'): OverviewListColoredYarnSet {\n let colorSet: OverviewListColorSet;\n let yarnSet: OverviewListYarnSet;\n\n if (!isNil(coloredYarnSet.overviewListColorSet)) {\n const sortedColorSetCreelPositions: OverviewListCreelPosition[] = orderBy(\n coloredYarnSet.overviewListColorSet.creelPositions,\n getCreelPositionSortingFunction(coloredYarnSetCreelMap),\n sortDirection\n );\n\n colorSet = new OverviewListColorSet(coloredYarnSet.overviewListColorSet.id, coloredYarnSet.overviewListColorSet.name, sortedColorSetCreelPositions);\n }\n\n if (!isNil(coloredYarnSet.overviewListYarnSet)) {\n const sortedYarnCreelPositions: OverviewListCreelPosition[] = orderBy(coloredYarnSet.overviewListYarnSet.creelPositions, getCreelPositionSortingFunction(coloredYarnSetCreelMap), sortDirection);\n\n yarnSet = new OverviewListYarnSet(coloredYarnSet.overviewListYarnSet.id, coloredYarnSet.overviewListYarnSet.name, sortedYarnCreelPositions);\n }\n\n return new OverviewListColoredYarnSet(coloredYarnSet.id, coloredYarnSet.name, colorSet, yarnSet, coloredYarnSet.used);\n}\n\nfunction getCreelPositionSortingFunction(creelMap: CreelMap): (creelPosition: OverviewListCreelPosition) => number {\n return !isEmpty(creelMap)\n ? (creelPosition: OverviewListCreelPosition): number =>\n creelMap.creelPositions.find((creelPositionInMap: {creelPosition: number; currentPositionOnMachine: number}) => creelPositionInMap.creelPosition === creelPosition.position)\n ?.currentPositionOnMachine\n : null;\n}\n","import {isEqual, min} from 'lodash-es';\n\nexport function leastCommonMultiple(firstValue: number, secondValue: number): number {\n let minVal = min([firstValue, secondValue]);\n\n while (!isEqual(minVal % firstValue, 0) || !isEqual(minVal % secondValue, 0)) {\n minVal++;\n }\n return minVal;\n}\n","import {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {ColorStubFactory} from '@vdw/angular-component-library';\n\nexport class OverviewListColorSetStubFactory {\n public static getRandomColorSetOverviewListWithId(id: number): OverviewListColorSet {\n return this.getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(id, 5);\n }\n\n public static getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(id: number, numberOfCreelPositions: number): OverviewListColorSet {\n const result = new OverviewListColorSet(id, `Color_Set_${id}`, []);\n\n let colorId = 0;\n\n for (let i = 0; i < numberOfCreelPositions; i++) {\n result.creelPositions.push(\n new OverviewListCreelPosition(\n [\n ColorStubFactory.getRandomColorWithIdAndColorCode(colorId++, '#1aceff'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(colorId++, '#9867bb'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(colorId++, '#ff1c1c')\n ],\n i + 1\n )\n );\n }\n\n return result;\n }\n\n public static getRandomOverviewListColorSet(id: number): OverviewListColorSet {\n const result = new OverviewListColorSet(id, `Color_Set_${id}`, []);\n\n result.creelPositions.push(\n new OverviewListCreelPosition(\n [\n ColorStubFactory.getRandomColorWithIdAndColorCode(1, '#1aceff'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(2, '#9867bb'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(3, '#ff1c1c')\n ],\n 0,\n 50,\n true\n )\n );\n\n result.creelPositions.push(\n new OverviewListCreelPosition(\n [\n ColorStubFactory.getRandomColorWithIdAndColorCode(1, '#1aceff'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(2, '#9867bb'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(3, '#ff1c1c')\n ],\n 1,\n 25,\n false\n )\n );\n\n result.creelPositions.push(\n new OverviewListCreelPosition(\n [\n ColorStubFactory.getRandomColorWithIdAndColorCode(1, '#1aceff'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(2, '#9867bb'),\n ColorStubFactory.getRandomColorWithIdAndColorCode(3, '#ff1c1c')\n ],\n 2,\n 25,\n false\n )\n );\n\n return result;\n }\n}\n","import {OverviewListYarnTypeStubFactory} from '@application/helper/textile-data/yarn-type/overview-list-yarn-type-stub-factory';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {times} from 'lodash-es';\n\nexport class OverviewListYarnSetStubFactory {\n private static readonly numberOfYarnTypes: number = 5;\n\n public static getRandomYarnSetOverviewListWithId(id: number): OverviewListYarnSet {\n return this.getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions(id, 4);\n }\n\n public static getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions(id: number, numberOfCreelPositions: number): OverviewListYarnSet {\n return new OverviewListYarnSet(\n id,\n `Yarn set ${id}`,\n times(numberOfCreelPositions, (creelPositionIndex: number) => {\n return new OverviewListCreelPosition(\n times(OverviewListYarnSetStubFactory.numberOfYarnTypes, (yarnTypeIndex: number) => {\n return OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(OverviewListYarnSetStubFactory.numberOfYarnTypes * creelPositionIndex + yarnTypeIndex + 1);\n }),\n creelPositionIndex + 1\n );\n })\n );\n }\n}\n","import {OverviewListColorSetStubFactory} from '@application/helper/textile-data/color-set/overview-list-color-set-stub-factory';\nimport {OverviewListYarnSetStubFactory} from '@application/helper/textile-data/yarn-set/overview-list-yarn-set-stub-factory';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\n\nexport class OverviewListColoredYarnSetStubFactory {\n public static getRandomColoredYarnSet(): OverviewListColoredYarnSet {\n return OverviewListColoredYarnSetStubFactory.getRandomColoredYarnSetWithId(1);\n }\n\n public static getRandomColoredYarnSetWithId(id: number): OverviewListColoredYarnSet {\n return OverviewListColoredYarnSetStubFactory.getRandomColoredYarnSetWithIdAndNumberOfCreelPositions(id, 5);\n }\n\n public static getRandomColoredYarnSetWithIdAndName(id: number, name: string): OverviewListColoredYarnSet {\n return new OverviewListColoredYarnSet(\n id,\n name,\n OverviewListColorSetStubFactory.getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(1, 3),\n OverviewListYarnSetStubFactory.getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions(1, 3),\n false\n );\n }\n\n public static getRandomColoredYarnSetWithIdAndNumberOfCreelPositions(id: number, numberOfCreelPositions: number): OverviewListColoredYarnSet {\n return new OverviewListColoredYarnSet(\n id,\n `ColoredYarnSet_${id}`,\n OverviewListColorSetStubFactory.getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(1, numberOfCreelPositions),\n OverviewListYarnSetStubFactory.getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions(1, numberOfCreelPositions),\n false\n );\n }\n}\n","import {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Unit} from '@vdw/angular-component-library';\n\nexport class OverviewListYarnTypeStubFactory {\n public static getRandomOverviewListYarnTypeWithId(id: number): OverviewListYarnType {\n return new OverviewListYarnType(\n id,\n `New yarn type ${id}`,\n 5,\n Unit.NUMBER_METRIC,\n [\n {\n rawMaterial: 'bcf'\n },\n {\n rawMaterial: 'vis'\n }\n ],\n 'Description',\n 'Group',\n 'Comment',\n {\n commercialLengthInMM: 1000.01,\n weightInKilogramPerSquareMeter: 1000,\n weightInKilogram: 1000\n }\n );\n }\n}\n","import {EventEmitter, Injectable, OnDestroy} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {Observable, Subject, takeUntil} from 'rxjs';\nimport {NavigationHelperService} from '../navigation-helper/navigation-helper.service';\nimport {NavigationUnsavedChangesNotifier} from './navigation-unsaved-changes-notifier.interface';\n\n@Injectable()\nexport class UnsavedChangesNotifierService implements OnDestroy {\n private isFormDirty = false;\n private saveEventEmitter = new EventEmitter<{action: boolean; navigateToSelectedRoute: string}>();\n\n public constructor(private readonly navigationHelperService: NavigationHelperService) {\n this.initializeBeforeUnloadListener();\n }\n\n public ngOnDestroy(): void {\n window.removeEventListener('beforeunload', this.onBeforeUnload.bind(this));\n }\n\n public hasUnsavedFormChanges(): boolean {\n return this.isFormDirty;\n }\n\n public notifyChangesToForm(hasFormChanged: boolean): void {\n this.isFormDirty = hasFormChanged;\n }\n\n public notifyChangesToOthers(): void {\n if (!this.hasUnsavedFormChanges()) {\n this.notifyChangesToForm(true);\n }\n }\n\n public setSaveEventEmitter(action: boolean, navigateToSelectedRoute: string): void {\n this.saveEventEmitter.emit({action, navigateToSelectedRoute});\n }\n\n public getSaveEventEmitter(): Observable<{action: boolean; navigateToSelectedRoute: string}> {\n return this.saveEventEmitter.asObservable();\n }\n\n public notifyChanges(form: UntypedFormGroup, unSubscribeOnViewDestroy: Subject): void {\n form.valueChanges.pipe(takeUntil(unSubscribeOnViewDestroy)).subscribe(() => {\n if (form.dirty && !this.hasUnsavedFormChanges()) {\n this.notifyChangesToForm(true);\n }\n });\n }\n\n public savePartialStateOfUnsavedChangesNotifier(): void {\n this.navigationHelperService.savePartialState({\n isFormDirty: this.hasUnsavedFormChanges()\n });\n this.notifyChangesToForm(false);\n }\n\n public getPartialStateOfUnsavedChangesNotifier(): void {\n let obj: NavigationUnsavedChangesNotifier = {isFormDirty: null};\n let prevState = this.navigationHelperService.getPartialState(Object.keys(obj));\n if (!AssertionUtils.isNullOrUndefined(prevState)) {\n this.notifyChangesToForm(prevState.isFormDirty);\n }\n }\n\n private onBeforeUnload(event: BeforeUnloadEvent): void {\n if (this.hasUnsavedFormChanges()) {\n event.preventDefault();\n event.returnValue = '';\n }\n }\n\n private initializeBeforeUnloadListener(): void {\n window.addEventListener('beforeunload', this.onBeforeUnload.bind(this));\n }\n}\n","import {Location} from '@angular/common';\nimport {Injectable, OnDestroy} from '@angular/core';\nimport {Event, NavigationEnd, Router, RouterEvent} from '@angular/router';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {filter} from 'rxjs/operators';\nimport {NavigationHistory} from './navigation-history.interface';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationHistoryService implements NavigationHistory, OnDestroy {\n private previousUrl: string;\n private currentUrl: string;\n private _stateUpdates = new BehaviorSubject(this.getState());\n\n private readonly router: Router;\n\n public get stateUpdates(): Observable {\n return this._stateUpdates.asObservable();\n }\n\n public constructor(\n router: Router,\n private readonly location: Location\n ) {\n this.router = router;\n this.location = location;\n }\n\n public subscribeToRouterEvents(): void {\n this.router.events.pipe(filter((event: RouterEvent | Event): boolean => event instanceof NavigationEnd)).subscribe((event: RouterEvent) => {\n this.previousUrl = this.currentUrl;\n this.currentUrl = event.url;\n this._stateUpdates.next(this.getState());\n });\n }\n\n public getCurrentUrl(): string {\n return this.currentUrl;\n }\n\n public getPreviousUrl(): string {\n return this.previousUrl;\n }\n\n public replaceState(path: string, query?: string, state?: any, navigate: boolean = true): void {\n this.currentUrl = path;\n\n if (navigate) {\n const navigateExtras = AssertionUtils.isNullOrUndefined(state) ? {replaceUrl: true} : {replaceUrl: true, ...state};\n this.router.navigate([path], navigateExtras);\n }\n this.location.replaceState(path, query, state);\n\n this._stateUpdates.next(this.getState());\n }\n\n public getState(): unknown {\n return this.location.getState();\n }\n\n public ngOnDestroy(): void {\n this._stateUpdates.complete();\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {moment} from '@vdw/angular-component-library';\nimport {isNaN} from 'lodash-es';\nimport {unitOfTime} from 'moment';\nimport 'moment-duration-format';\n\n@Pipe({\n name: 'durationFormat'\n})\nexport class DurationFormatPipe implements PipeTransform {\n public transform(time: number, timeUnit: unitOfTime.DurationConstructor, format: string): string {\n let result = '';\n\n if (!isNaN(time)) {\n result = moment.duration(time, timeUnit).format(format, {trim: 'both'});\n }\n\n return result;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'highlight'\n})\nexport class HighlightSearchPipe implements PipeTransform {\n public transform(value: string, args: string): string {\n if (!args) {\n return value;\n }\n const regExp = new RegExp(args, 'gi');\n return value.replace(regExp, '$&');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {ReportItemTemplateField} from '@domain/report-data-set/report-item-template-field.enum';\nimport {ReportItem} from '@presentation/pages/machine-overview/report-item';\nimport {AssertionUtils, moment, Unit} from '@vdw/angular-component-library';\nimport {interval, map, Observable, of, startWith} from 'rxjs';\n\n@Pipe({\n name: 'reportItemFormat'\n})\nexport class ReportItemFormatPipe implements PipeTransform {\n public transform(reportItem: ReportItem): Observable {\n if (AssertionUtils.isNullOrUndefined(reportItem?.value) || reportItem?.value === '') {\n return of('');\n } else if (reportItem.field === ReportItemTemplateField.RUN_TIMESTAMP || reportItem.field === ReportItemTemplateField.STOP_TIMESTAMP) {\n return this.startTimer(reportItem.value);\n } else if (reportItem.field === ReportItemTemplateField.REMAINING_TIME) {\n return of(this.convertToTimeSpan(reportItem.value.toString()));\n } else if (reportItem.field === ReportItemTemplateField.ESTIMATED_TIME_OF_COMPLETION) {\n return of(this.convertToDateTime(reportItem.value.toString()));\n } else if (!isNaN(+reportItem.value)) {\n return of(this.formatReportItem(+reportItem.value, reportItem.field));\n } else {\n return of(reportItem.value?.toString());\n }\n }\n\n private startTimer(value: string): Observable {\n return interval(1000).pipe(\n startWith('0'),\n map(() => {\n const duration = moment().diff(value);\n return this.convertToTimeSpan(duration.toString());\n })\n );\n }\n\n private convertToTimeSpan(value: string): string {\n const momentDuration = moment.duration(value);\n\n if (momentDuration.asSeconds() === 0) {\n return '';\n } else if (momentDuration.asSeconds() < 60) {\n return '0:' + momentDuration.seconds().toString().padStart(2, '0');\n } else {\n return momentDuration.format('d.hh:mm:ss');\n }\n }\n\n private convertToDateTime(value: string): string {\n return moment(value).format('DD MMM. HH:mm').toString();\n }\n\n private formatReportItem(value: number, field: ReportItemTemplateField): string {\n switch (field) {\n case ReportItemTemplateField.MACHINE_EFFICIENCY_VALUE:\n case ReportItemTemplateField.GROUP_EFFICIENCY_VALUE:\n case ReportItemTemplateField.OPERATOR_EFFICIENCY:\n case ReportItemTemplateField.SPEED_EFFICIENCY:\n case ReportItemTemplateField.ORDER_PROGRESS:\n case ReportItemTemplateField.SPINDLE_EFFICIENCY:\n case ReportItemTemplateField.SYSTEM_EFFICIENCY:\n case ReportItemTemplateField.OVERALL_EFFICIENCY:\n case ReportItemTemplateField.PUMP_SPEED:\n if (value >= 100) {\n return `100 ${Unit.PERCENTAGE}`;\n }\n return `${this.convertToDecimals(value, 1)} ${Unit.PERCENTAGE}`;\n case ReportItemTemplateField.PRODUCTION:\n return `${this.convertToDecimals(value, 2)} ${Unit.METER}`;\n case ReportItemTemplateField.CUTS_PER_10KM:\n case ReportItemTemplateField.JOINTS_PER_10KM:\n case ReportItemTemplateField.YARN_FAULTS_PER_10KM:\n return `${this.convertToDecimals(value, 3)}`;\n case ReportItemTemplateField.STOP_GROUPS:\n case ReportItemTemplateField.QTY_PRODUCED:\n case ReportItemTemplateField.QTY_REQUIRED:\n return `${this.convertToDecimals(value, 2)}`;\n case ReportItemTemplateField.WATER_CONSUMPTION:\n case ReportItemTemplateField.STEAM_CONSUMPTION:\n return `${this.convertToDecimals(value, 2)} ${Unit.CUBIC_METERS}`;\n case ReportItemTemplateField.SEC_AIR:\n return `${this.convertToDecimals(value, 2)} ${Unit.NORMAL_CUBIC_METER_PER_SQUARE_METER}`;\n case ReportItemTemplateField.SEC_POWER:\n return `${this.convertToDecimals(value, 2)} ${Unit.KILOWATT_HOUR_PER_SQUARE_METER}`;\n case ReportItemTemplateField.LIQUOR_RATIO:\n case ReportItemTemplateField.STANDARD_RPM:\n return `${this.convertToDecimals(value, 1)}`;\n case ReportItemTemplateField.WEIGHT:\n return `${this.convertToDecimals(value, 1)} ${Unit.KILOGRAM}`;\n case ReportItemTemplateField.POWER_CONSUMPTION:\n return `${this.convertToDecimals(value, 1)} ${Unit.KILOWATT_HOUR}`;\n case ReportItemTemplateField.AIR_CONSUMPTION:\n return `${this.convertToDecimals(value, 1)} ${Unit.NORMAL_CUBIC_METER}`;\n case ReportItemTemplateField.PRODUCTIVE_SPEED:\n case ReportItemTemplateField.REEL_SPEED:\n return `${this.convertToDecimals(value, 1)} ${Unit.METER_PER_MINUTE}`;\n case ReportItemTemplateField.TEMP_MAIN_TANK:\n case ReportItemTemplateField.TEMP_SIDE_TANK:\n return `${this.convertToDecimals(value, 1)} ${Unit.DEGREES_CELSIUS}`;\n case ReportItemTemplateField.AVERAGE_RPM:\n case ReportItemTemplateField.ACTUAL_ROTATIONS_PER_MINUTE:\n case ReportItemTemplateField.PACKAGES:\n return `${this.convertToDecimals(value, 0)}`;\n case ReportItemTemplateField.BATCH_LOAD:\n return `${this.convertToDecimals(value, 0)} ${Unit.KILOGRAM}`;\n\n default:\n return `${value}`;\n }\n }\n\n private convertToDecimals(value: number, amountOfDecimals: number): string {\n return value === 0 ? value.toString() : value.toFixed(amountOfDecimals);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\n\n@Pipe({name: 'weave-structure-column-pipe'})\nexport class WeaveStructureColumnPipe implements PipeTransform {\n public transform(machineQuality: OverviewListMachineQuality): string {\n if (machineQuality.singleWidth) {\n return `${machineQuality.singleWidth.weaveStructure.name} (v${machineQuality.singleWidth.weaveStructure.version})`;\n } else {\n return `bg: ${machineQuality.doubleWidth.backgroundWeaveStructure.name} (v${machineQuality.doubleWidth.backgroundWeaveStructure.version}), t: ${machineQuality.doubleWidth.topWeaveStructure.name} (v${machineQuality.doubleWidth.topWeaveStructure.version}), b: ${machineQuality.doubleWidth.bottomWeaveStructure.name} (v${machineQuality.doubleWidth.bottomWeaveStructure.version})`;\n }\n }\n}\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\n\nexport const canActivatePermissionGuard = (route: ActivatedRouteSnapshot): boolean => {\n const router = inject(Router);\n const authentication = inject(AUTHENTICATION);\n const navigationService = inject(NavigationService);\n\n const currentSubscription: Subscription = authentication.getCurrentSubscription();\n\n let requiredPermission: Permission = route.data.requiredPermission;\n if (route.data?.requiredPermissionFactory) {\n requiredPermission = route.data.requiredPermissionFactory(route);\n }\n\n const hasRequiredPermission = currentSubscription?.hasPermission(requiredPermission) ?? false;\n\n if (!hasRequiredPermission && !navigationService.checkIsSwitchingSubscription(currentSubscription)) {\n router.navigateByUrl(RouteUtils.paths.unauthorized.absolutePath);\n }\n\n return hasRequiredPermission;\n};\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, CanDeactivateFn, RouterStateSnapshot} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {AlertDialogResult, DialogBuilderFactoryService, DialogType} from '@vdw/angular-component-library';\nimport {Observable, Observer} from 'rxjs';\n\nexport interface CanComponentDeactivate {\n canDeactivate: () => boolean | Observable;\n}\n\nexport const canDeactivateRouteWithUnsavedChanges: CanDeactivateFn = (\n component: CanComponentDeactivate,\n activatedRoute: ActivatedRouteSnapshot,\n currentState: RouterStateSnapshot,\n nextState: RouterStateSnapshot\n): Observable => {\n const dialogBuilderFactoryService = inject(DialogBuilderFactoryService);\n const unsavedChangesNotifierService = inject(UnsavedChangesNotifierService);\n const navigationHelperService = inject(NavigationHelperService);\n const currentRouteLeaf = navigationHelperService.getCurrentRouteLeaf(currentState.url);\n\n return new Observable((observer: Observer) => {\n if (unsavedChangesNotifierService.hasUnsavedFormChanges() && !navigationHelperService.isNextRouteRelatedToCurrent(currentRouteLeaf, nextState.url)) {\n dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n type: DialogType.DISCARD_AND_SAVE\n })\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.DISCARD) {\n unsavedChangesNotifierService.notifyChangesToForm(false);\n observer.next(true);\n } else if (result === AlertDialogResult.SAVE) {\n observer.next(false);\n unsavedChangesNotifierService.setSaveEventEmitter(true, nextState.url);\n navigationHelperService.onDestroy();\n } else {\n observer.next(false);\n navigationHelperService.onDestroy();\n }\n observer.complete();\n });\n } else {\n observer.next(true);\n observer.complete();\n }\n });\n};\n","import {Injectable} from '@angular/core';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {ApplicationLayoutService, AssertionUtils, BaseComponent, MenuItemEntry, TranslateService} from '@vdw/angular-component-library';\nimport {cloneDeep} from 'lodash-es';\nimport {BehaviorSubject, Subject, takeUntil} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationBreadcrumbsService extends BaseComponent {\n public onNameChangedSubject: Subject = new Subject();\n public isUsingBreadcrumbFormLinkerSubject = new BehaviorSubject(false);\n\n public menuItems: MenuItemEntry[] = [];\n\n public constructor(\n private readonly translate: TranslateService,\n public readonly applicationLayoutService: ApplicationLayoutService\n ) {\n super();\n\n this.menuItems = this.getAllMenuItemsDetails();\n this.applicationLayoutService.menuItemsChanged.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => (this.menuItems = this.getAllMenuItemsDetails()));\n }\n\n private getAllMenuItemsDetails(): MenuItemEntry[] {\n const defaultMenuItems = cloneDeep(this.applicationLayoutService.menuItems?.filter((menuItem: MenuItemEntry) => menuItem.navigationKey !== 'GENERAL.NAVIGATION.FAVOURITES') ?? []);\n\n this.setMachineQualityChildEntries(defaultMenuItems);\n this.setMachineChildEntries(defaultMenuItems);\n\n return [\n ...defaultMenuItems,\n {navigationKey: this.translate.instant('PROFILE.PROFILE'), route: RouteUtils.paths.profile.absolutePath},\n {\n navigationKey: this.translate.instant('SETTINGS.MENU_NAME'),\n route: RouteUtils.paths.settings.absolutePath,\n childEntries: [\n {\n navigationKey: this.translate.instant('BMSCONFIG.AUTOMATIC_STOP_GROUPS.CARD_TITLE'),\n route: RouteUtils.paths.settings.automaticStopGroup.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES.CARD_TITLE'),\n route: RouteUtils.paths.settings.deviceTemplate.absolutePath,\n childEntries: [\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES.COUNTERS.COUNTERS', {count: 2}),\n route: RouteUtils.paths.settings.deviceTemplate.addCounter.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES.CONFIGURATION.CONFIGURATIONS', {count: 1}),\n route: RouteUtils.paths.settings.deviceTemplate.addConfiguration.absolutePath.replace('/add', '')\n }\n ]\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES_CATALOG.DEVICE_TEMPLATES_CATALOG'),\n route: RouteUtils.paths.settings.deviceTemplateCatalog.absolutePath,\n childEntries: [\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES.COUNTERS.COUNTERS', {count: 2}),\n route: RouteUtils.paths.settings.deviceTemplateCatalog.addCounterCatalog.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DEVICE_TEMPLATES.CONFIGURATION.CONFIGURATIONS', {count: 1}),\n route: RouteUtils.paths.settings.deviceTemplateCatalog.addConfigurationCatalog.absolutePath.replace('/add', '')\n }\n ]\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.PHYSICAL_QUANTITIES.CARD_TITLE'),\n route: RouteUtils.paths.settings.physicalQuantity.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DECLARATIONS.CARD_TITLE'),\n route: RouteUtils.paths.settings.declaration.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.REJECT_REASON.REJECT_REASON', {count: 2}),\n route: RouteUtils.paths.settings.rejectReason.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.REPORT_ITEMS.CARD_TITLE'),\n route: RouteUtils.paths.settings.reportItem.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.OPERATORS.CARD_TITLE'),\n route: RouteUtils.paths.settings.operator.absolutePath,\n childEntries: [\n {\n navigationKey: this.translate.instant('MACHINE.OPERATOR_TYPES.OPERATOR_TYPE', {count: 1}),\n route: RouteUtils.paths.settings.operator.addOperatorType.absolutePath.replace('/add', '')\n }\n ]\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.RESOURCE_TYPES.CARD_TITLE'),\n route: RouteUtils.paths.settings.resourceType.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DATA_UNIT_SETUP.CARD_TITLE'),\n route: RouteUtils.paths.settings.dataUnitSetup.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.DATA_UNIT_SETUP_CATALOG.CARD_TITLE'),\n route: RouteUtils.paths.settings.dataUnitSetupCatalog.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.MACHINE_DATA_SOURCES.CARD_TITLE'),\n route: RouteUtils.paths.settings.machineDataSources.absolutePath\n },\n {\n navigationKey: this.translate.instant('BMSCONFIG.EVENTS.CARD_TITLE'),\n route: RouteUtils.paths.settings.event.absolutePath,\n childEntries: [{navigationKey: this.translate.instant('BMSCONFIG.ALERTS.ALERT', {count: 2}), route: ''}]\n }\n ]\n },\n {navigationKey: this.translate.instant('ONBOARDING.NAVIGATION.HELP.TITLE'), route: RouteUtils.paths.help.absolutePath}\n ];\n }\n\n public onNameChanged(name: string): void {\n this.onNameChangedSubject.next(name);\n }\n\n public updateBreadcrumbFormLinkerUsed(isUsingBreadcrumbFormLinker: boolean): void {\n this.isUsingBreadcrumbFormLinkerSubject.next(isUsingBreadcrumbFormLinker);\n }\n\n public findChildEntryByPath(menuItems: MenuItemEntry[], path: string, currentActiveMenuItems: MenuItemEntry[] = []): MenuItemEntry[] {\n let result: MenuItemEntry[] = null;\n\n menuItems?.forEach((menuItem: MenuItemEntry) => {\n const activeMenuItems = [...currentActiveMenuItems, menuItem];\n\n if (menuItem.route === path || (AssertionUtils.isString(menuItem.route) && AssertionUtils.isEmpty(menuItem.route))) {\n result = activeMenuItems;\n }\n\n if (!result && menuItem.childEntries) {\n result = this.findChildEntryByPath(menuItem.childEntries, path, activeMenuItems);\n }\n });\n\n return result;\n }\n\n private setMachineQualityChildEntries(menuItems: MenuItemEntry[]): void {\n const childEntries = [\n {\n navigationKey: this.translate.instant('TEXTILE_DATA.FINISHING.FINISHING', {count: 1}),\n route: RouteUtils.paths.texStyle.machineQuality.addFinishing.absolutePath.replace('/add', '')\n }\n ];\n const machineQuality = this.findChildEntryByPath(menuItems, RouteUtils.paths.texStyle.machineQuality.absolutePath);\n\n if (!AssertionUtils.isEmpty(machineQuality)) {\n machineQuality[machineQuality.length - 1].childEntries = childEntries;\n }\n }\n\n private setMachineChildEntries(menuItems: MenuItemEntry[]): void {\n const childEntries = [\n {\n navigationKey: this.translate.instant('MACHINE.DETAILS.MACHINE_TYPES.WEAVING'),\n route: RouteUtils.paths.texState.addWeavingMachineType.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('MACHINE.DETAILS.MACHINE_TYPES.PLASTIC'),\n route: RouteUtils.paths.texState.addPlasticMachineType.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('MACHINE.DETAILS.MACHINE_TYPES.TUFTING'),\n route: RouteUtils.paths.texState.addTuftingMachineType.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('MACHINE.DETAILS.MACHINE_TYPES.WINDER'),\n route: RouteUtils.paths.texState.addWinderMachineType.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('MACHINE.DETAILS.MACHINE_TYPES.DYEING'),\n route: RouteUtils.paths.texState.addDyeingMachineType.absolutePath.replace('/add', '')\n },\n {\n navigationKey: this.translate.instant('SETTINGS.MENU_NAME'),\n route: RouteUtils.paths.texState.settings.absolutePath,\n childEntries: [\n {\n navigationKey: this.translate.instant('MACHINE.SETTINGS.REPORT_TEMPLATE'),\n route: RouteUtils.paths.texState.addTemplate.absolutePath.replace('/add', '')\n }\n ]\n }\n ];\n const machine = this.findChildEntryByPath(menuItems, RouteUtils.paths.texState.absolutePath);\n\n if (!AssertionUtils.isEmpty(machine)) {\n machine[machine.length - 1].childEntries = childEntries;\n }\n }\n}\n","export enum OnboardingNavigationStep {\n NOTIFICATIONS = 'NOTIFICATIONS',\n TEXSTATE = 'TEXSTATE',\n TEXBOT = 'TEXBOT',\n TEXEDIT = 'TEXEDIT',\n TEXSTYLE = 'TEXSTYLE',\n TEXFAB = 'TEXFAB',\n TEXBI = 'TEXBI',\n TEXCREDITS = 'TEXCREDITS',\n PROFILE = 'PROFILE',\n HELP = 'HELP',\n PROCESSES = 'PROCESSES'\n}\n","import {Command} from '@application/command/command';\nimport {NavigationState} from '@domain/navigation/navigation-state.enum';\nimport {SideNavigationStateService} from '@presentation/navigation/side-navigation-state.service';\nimport {Observable} from 'rxjs/internal/Observable';\n\nexport class OpenMobileNavigationBarCommand implements Command {\n public constructor(private readonly sideNavigationState: SideNavigationStateService) {}\n\n public execute(): Observable {\n this.sideNavigationState.changeNavigationStateToOpen();\n return this.sideNavigationState.onNavigationStateChanged.asObservable();\n }\n}\n","export enum MobileNavigationBarItemMobilePosition {\n QUICK_ACCESS,\n MENU\n}\n","export enum MobileNavigationBarItemPosition {\n TOP,\n BOTTOM,\n NONE\n}\n","import {Injectable} from '@angular/core';\nimport {MobileNavigationBarExternalLinkItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-external-link-item';\nimport {Subscription} from '@domain/profile/subscription';\nimport {environment} from '@environments/environment';\nimport {OnboardingNavigationStep} from '@presentation/components/onboarding-dialog/onboarding-navigation-step.enum';\nimport {SideNavigationStateService} from '@presentation/navigation/side-navigation-state.service';\nimport {NotificationsService} from '@presentation/pages/notifications/notifications.service';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {OpenMobileNavigationBarCommand} from '../../helper/mobile-navigation/commands/open-mobile-navigation-bar-command';\nimport {MobileNavigationBarActionItem} from '../../helper/mobile-navigation/mobile-navigation-bar-action-item';\nimport {MobileNavigationBarItem} from '../../helper/mobile-navigation/mobile-navigation-bar-item';\nimport {MobileNavigationBarItemMobilePosition} from '../../helper/mobile-navigation/mobile-navigation-bar-item-mobile-position.enum';\nimport {MobileNavigationBarItemPosition} from '../../helper/mobile-navigation/mobile-navigation-bar-item-position.enum';\nimport {MobileNavigationBarItemSize} from '../../helper/mobile-navigation/mobile-navigation-bar-item-size.enum';\nimport {MobileNavigationBarRouteLinkItem} from '../../helper/mobile-navigation/mobile-navigation-bar-route-link-item';\nimport {RouteUtils} from '../../helper/routing/route-utils';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MobileNavigationService {\n private readonly navigationBarItems: MobileNavigationBarItem[];\n private readonly openNavigationBarCommand: OpenMobileNavigationBarCommand;\n\n public constructor(\n protected readonly sidenavigationState: SideNavigationStateService,\n private readonly notificationsService: NotificationsService\n ) {\n this.openNavigationBarCommand = new OpenMobileNavigationBarCommand(sidenavigationState);\n this.navigationBarItems = this.composeMobileNavigationBarItems();\n }\n\n public getQuickAccessBarItems(subscription: Subscription): MobileNavigationBarItem[] {\n const navigationBarItems = this.navigationBarItems.filter((item: MobileNavigationBarItem) => item.mobilePositions.includes(MobileNavigationBarItemMobilePosition.QUICK_ACCESS));\n\n return navigationBarItems.filter((item: MobileNavigationBarItem) => this.hasRequiredPermission(item, subscription));\n }\n\n public getDefaultMobileRoute(subscription: Subscription): string {\n const navigationBarRouteLinkItems = this.navigationBarItems.filter((item: MobileNavigationBarItem) => this.hasRequiredPermission(item, subscription)) as MobileNavigationBarRouteLinkItem[];\n const texStateNavigationItem = navigationBarRouteLinkItems.find((item: MobileNavigationBarItem) => item instanceof MobileNavigationBarRouteLinkItem && item.id === 'texState');\n\n return texStateNavigationItem ? texStateNavigationItem.path : navigationBarRouteLinkItems.find((item: MobileNavigationBarItem) => item instanceof MobileNavigationBarRouteLinkItem).path;\n }\n\n public getNavigationBarItems(subscription: Subscription): MobileNavigationBarItem[] {\n const available = this.navigationBarItems.filter((item: MobileNavigationBarItem) => this.hasRequiredPermission(item, subscription));\n\n return [\n ...available.filter((item: MobileNavigationBarItem) => item.position === MobileNavigationBarItemPosition.TOP),\n ...available.filter((item: MobileNavigationBarItem) => item.position === MobileNavigationBarItemPosition.BOTTOM)\n ];\n }\n\n private hasRequiredPermission(navigationBarItem: MobileNavigationBarItem, subscription: Subscription): boolean {\n return AssertionUtils.isNullOrUndefined(navigationBarItem.requiredPermission) || subscription.hasPermission(navigationBarItem.requiredPermission);\n }\n\n private composeMobileNavigationBarItems(): MobileNavigationBarItem[] {\n return [\n new MobileNavigationBarRouteLinkItem({\n name: 'NOTIFICATIONS.MENU_NAME',\n icon: 'solid-notifications',\n position: MobileNavigationBarItemPosition.TOP,\n mobilePositions: [MobileNavigationBarItemMobilePosition.QUICK_ACCESS, MobileNavigationBarItemMobilePosition.MENU],\n id: 'notifications',\n onboardingStep: OnboardingNavigationStep.NOTIFICATIONS,\n badge: this.notificationsService.unreadCount,\n route: RouteUtils.paths.notifications\n }),\n new MobileNavigationBarRouteLinkItem({\n route: RouteUtils.paths.texState,\n name: 'GENERAL.NAVIGATION.PLANT_VIEW',\n icon: 'solid-monitoring',\n position: MobileNavigationBarItemPosition.TOP,\n mobilePositions: [MobileNavigationBarItemMobilePosition.QUICK_ACCESS, MobileNavigationBarItemMobilePosition.MENU],\n id: 'texState',\n onboardingStep: OnboardingNavigationStep.TEXSTATE,\n canSearch: true\n }),\n new MobileNavigationBarRouteLinkItem({\n route: RouteUtils.paths.texBot,\n name: 'GENERAL.NAVIGATION.DOCUMENTS_AND_TRAINING',\n icon: 'solid-article',\n position: MobileNavigationBarItemPosition.TOP,\n mobilePositions: [MobileNavigationBarItemMobilePosition.QUICK_ACCESS, MobileNavigationBarItemMobilePosition.MENU],\n id: 'texBot',\n onboardingStep: OnboardingNavigationStep.TEXBOT\n }),\n new MobileNavigationBarActionItem({\n name: 'PRODUCTION_ORDER.NAVIGATION.OVERVIEW',\n icon: 'solid-menu',\n position: MobileNavigationBarItemPosition.NONE,\n mobilePositions: [MobileNavigationBarItemMobilePosition.QUICK_ACCESS],\n requiredPermission: null,\n id: 'menu',\n command: this.openNavigationBarCommand,\n size: MobileNavigationBarItemSize.SMALL\n }),\n new MobileNavigationBarExternalLinkItem({\n link: `${environment.helpUrl}`,\n name: 'HELP.HELP',\n icon: 'solid-help',\n position: MobileNavigationBarItemPosition.BOTTOM,\n mobilePositions: [MobileNavigationBarItemMobilePosition.MENU],\n requiredPermission: null,\n id: 'help',\n size: MobileNavigationBarItemSize.SMALL\n })\n ];\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AssertionUtils, LocalStorageService, MenuItemEntry, TranslateService} from '@vdw/angular-component-library';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationService {\n public cachedMenuItems: MenuItemEntry[];\n private readonly IS_SWITCHING_SUBSCRIPTION_KEY = 'isSwitchingSubscription';\n\n public constructor(\n private readonly router: Router,\n private readonly localStorage: LocalStorageService,\n private readonly translate: TranslateService\n ) {\n this.cachedMenuItems = this.composeMenuItems(null);\n }\n\n public getDefaultRoute(subscription: Subscription): string {\n const navigationBarRouteLinkItems = this.cachedMenuItems\n .flatMap((item: MenuItemEntry) => item.childEntries)\n .filter((item: MenuItemEntry) => this.hasRequiredPermission(item, subscription) && !AssertionUtils.isNullOrUndefined(item.route));\n\n const texStateNavigationItem = navigationBarRouteLinkItems.find((item: MenuItemEntry) => item.route === RouteUtils.paths.texState.absolutePath);\n\n return texStateNavigationItem ? texStateNavigationItem.route : navigationBarRouteLinkItems[0]?.route;\n }\n\n public composeMenuItems(subscription: Subscription): MenuItemEntry[] {\n return [\n {navigationKey: 'GENERAL.NAVIGATION.FAVOURITES', childEntries: [], isExpanded: true},\n {\n navigationKey: 'GENERAL.NAVIGATION.MONITORING',\n childEntries: [\n {\n navigationKey: 'GENERAL.NAVIGATION.PLANT_VIEW',\n icon: 'solid-monitoring',\n route: RouteUtils.paths.texState.absolutePath,\n requiredPermission: RouteUtils.paths.texState.requiredPermission\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.EVENT_BOARD',\n icon: 'solid-analytics',\n route: RouteUtils.paths.texBi.machineEventBoard.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.machineEventBoard.requiredPermission\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.TRENDS_REPORTS',\n icon: 'solid-insights',\n childEntries: [\n {navigationKey: 'TEXBI.REPORTS', route: RouteUtils.paths.texBi.reports.absolutePath, requiredPermission: RouteUtils.paths.texBi.reports.requiredPermission},\n {\n navigationKey: 'TEXBI.WINDERVIBRATIONREPORT',\n route: RouteUtils.paths.texBi.windervibrationreport.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.windervibrationreport.requiredPermission\n },\n {\n navigationKey: 'TEXBI.WMREPORTS',\n route: RouteUtils.paths.texBi.wmreports.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.wmreports.requiredPermission\n },\n {\n navigationKey: 'TEXBI.QMREPORTS',\n route: RouteUtils.paths.texBi.qmreports.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.qmreports.requiredPermission\n },\n {\n navigationKey: 'TEXBI.EMREPORTS',\n route: RouteUtils.paths.texBi.emreports.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.emreports.requiredPermission\n },\n {\n navigationKey: 'MACHINE.WINDER_VIBRATION_FORM.TITLE',\n route: RouteUtils.paths.texBi.winderVibrationForm.absolutePath,\n requiredPermission: RouteUtils.paths.texBi.winderVibrationForm.requiredPermission\n }\n ]\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.SCHEDULING',\n childEntries: [\n {\n ...(NavigationUtils.getAbsoluteNavigationData(NavigationId.PLANNING_MODULE) as MenuItemEntry),\n shouldHide: subscription?.hasPermission(RouteUtils.paths.texFab.planningPrototype.requiredPermission)\n ? true\n : !subscription?.hasPermission(RouteUtils.paths.texFab.planning.requiredPermission)\n },\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PLANNING_PROTOTYPE_MODULE) as MenuItemEntry,\n {\n navigationKey: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n icon: 'solid-list-alt',\n shouldHide: !subscription?.hasAtLeastOneOfThePermissions([\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PRODUCTION_SCHEDULE_MODULE).requiredPermission,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.WEAVING_PRODUCTION_ORDER_MODULE).requiredPermission,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.TUFT_PRODUCTION_ORDER_MODULE).requiredPermission,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE).requiredPermission\n ]),\n childEntries: [\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PRODUCTION_SCHEDULE_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.WEAVING_PRODUCTION_ORDER_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.TUFT_PRODUCTION_ORDER_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE) as MenuItemEntry\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.DEFINITIONS',\n icon: 'solid-edit-document',\n childEntries: [\n {\n navigationKey: 'TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT',\n childEntries: [\n NavigationUtils.getAbsoluteNavigationData(NavigationId.WEAVE_PRODUCT_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.TUFT_PRODUCT_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PLASTIC_PRODUCT_MODULE) as MenuItemEntry\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.QUALITY_RELATED',\n childEntries: [\n {\n navigationKey: 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY',\n route: RouteUtils.paths.texStyle.machineQuality.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.machineQuality.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE',\n route: RouteUtils.paths.texStyle.weaveStructure.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.weaveStructure.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.COMPANY_WEAVE_STRUCTURE.COMPANY_WEAVE_STRUCTURE',\n route: RouteUtils.paths.texStyle.companyWeaveStructure.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.companyWeaveStructure.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.WEAVE_STRUCTURE.MANAGE_WEAVE_STRUCTURE',\n route: RouteUtils.paths.texStyle.weaveStructure.manageOverviewWeaveStructure.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.weaveStructure.manageOverviewWeaveStructure.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.GROUPED_WEAVESTRUCTURE.GROUPED_WEAVESTRUCTURE',\n route: RouteUtils.paths.texStyle.groupedWeaveStructure.overviewGroupedWeaveStructure.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.groupedWeaveStructure.overviewGroupedWeaveStructure.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE',\n route: RouteUtils.paths.texStyle.finishingTemplate.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.finishingTemplate.requiredPermission\n },\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PATH_LAYOUT_TEMPLATE_MODULE) as MenuItemEntry,\n {\n navigationKey: 'TEXTILE_DATA.FIXED_ORDER.FIXED_ORDER',\n route: RouteUtils.paths.texStyle.fixedSchedule.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.fixedSchedule.requiredPermission\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.YARN_RELATED',\n childEntries: [\n {\n navigationKey: 'TEXTILE_DATA.COLOR.COLOR',\n route: RouteUtils.paths.texStyle.color.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.color.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.COLOR_SET.COLOR_SET',\n route: RouteUtils.paths.texStyle.colorSet.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.colorSet.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE',\n route: RouteUtils.paths.texStyle.yarn.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.yarn.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.YARN_SET.YARN_SET',\n route: RouteUtils.paths.texStyle.yarnSet.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.yarnSet.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.COLORED_YARN.COLORED_YARN',\n route: RouteUtils.paths.texStyle.coloredYarn.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.coloredYarn.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET',\n route: RouteUtils.paths.texStyle.coloredYarnSet.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.coloredYarnSet.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET',\n route: RouteUtils.paths.texStyle.weftColoredYarnSet.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.weftColoredYarnSet.requiredPermission\n },\n {\n navigationKey: 'TEXTILE_DATA.CREEL.CREEL',\n route: RouteUtils.paths.texStyle.creel.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.creel.requiredPermission\n }\n ]\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.DESIGNS',\n icon: 'solid-image',\n shouldHide: !subscription?.hasPermission(Permission.DESIGNS_VIEW),\n childEntries: [\n {\n navigationKey: 'DESIGN_LIBRARY.DESIGN_LIBRARY',\n route: RouteUtils.paths.texEdit.designLibrary.absolutePath,\n requiredPermission: RouteUtils.paths.texEdit.designLibrary.requiredPermission\n },\n {\n navigationKey: 'TECHNICAL_DATASHEETS.DATASHEET',\n route: RouteUtils.paths.texEdit.dataSheets.absolutePath,\n requiredPermission: RouteUtils.paths.texEdit.dataSheets.requiredPermission\n },\n {\n navigationKey: 'TEXEDIT_CARDS.EXTERNAL_APPLICATIONS.TUFTLINK.TITLE',\n route: RouteUtils.paths.texEdit.tuftLink.absolutePath,\n requiredPermission: RouteUtils.paths.texEdit.tuftLink.requiredPermission\n },\n {\n navigationKey: 'PRODUCT_CONFIGURATION.PRODUCT_CONFIGURATION',\n route: RouteUtils.paths.texEdit.productConfiguration.absolutePath,\n requiredPermission: RouteUtils.paths.texEdit.productConfiguration.requiredPermission\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.SALES',\n icon: 'solid-storefront',\n shouldHide: !subscription?.hasPermission(Permission.SALES_VIEW),\n childEntries: [\n NavigationUtils.getAbsoluteNavigationData(NavigationId.CUSTOMER_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.ARTICLE_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.SALES_ORDER_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.ORDERBOOK_MODULE) as MenuItemEntry\n ]\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.RESOURCES',\n childEntries: [\n {\n navigationKey: 'GENERAL.NAVIGATION.CALENDAR',\n icon: 'solid-calendar-month',\n childEntries: [\n NavigationUtils.getAbsoluteNavigationData(NavigationId.SCHEDULE_MODULE) as MenuItemEntry,\n NavigationUtils.getAbsoluteNavigationData(NavigationId.PATTERN_MODULE) as MenuItemEntry,\n {\n navigationKey: 'CALENDAR.SHIFT.SHIFT',\n route: RouteUtils.paths.calendar.shift.absolutePath,\n requiredPermission: RouteUtils.paths.calendar.shift.requiredPermission\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.DOCUMENTS_AND_TRAINING',\n icon: 'solid-article',\n requiredPermission: RouteUtils.paths.texBot.requiredPermission,\n childEntries: [\n {\n navigationKey: 'MACHINE_DOCUMENTATION.DOCUMENTATION',\n route: RouteUtils.paths.texBot.machineDocumentation.absolutePath,\n requiredPermission: RouteUtils.paths.texBot.machineDocumentation.requiredPermission\n },\n {\n navigationKey: 'TRAINING.TITLE',\n route: RouteUtils.paths.texBot.training.absolutePath,\n requiredPermission: RouteUtils.paths.texBot.training.requiredPermission\n },\n {\n navigationKey: this.translate.instant('GENERAL.ACTIONS.MANAGE_OBJECT', {object: 'TRAINING.TITLE'}),\n route: RouteUtils.paths.texBot.training.manage.absolutePath,\n requiredPermission: RouteUtils.paths.texBot.training.manage.requiredPermission\n }\n ]\n },\n {\n navigationKey: 'GENERAL.NAVIGATION.EQUIPMENT',\n icon: 'solid-forklift',\n requiredPermission: RouteUtils.paths.utilities.requiredPermission,\n childEntries: [\n NavigationUtils.getAbsoluteNavigationData(NavigationId.TOOL_MODULE) as MenuItemEntry,\n {\n navigationKey: 'PLANNING.BUGGY.BUGGIES',\n route: RouteUtils.paths.texStyle.buggy.absolutePath,\n requiredPermission: RouteUtils.paths.texStyle.buggy.requiredPermission\n }\n ]\n }\n ]\n }\n ];\n }\n\n public composeProcessItem(): MenuItemEntry {\n return {navigationKey: 'BACKGROUND_JOBS.PROCESSES', requiredPermission: Permission.JOB_VIEW};\n }\n\n public setIsSwitchingSubscription(): void {\n this.localStorage.set(this.IS_SWITCHING_SUBSCRIPTION_KEY, true);\n }\n\n public removeIsSwitchingSubscription(): void {\n this.localStorage.remove(this.IS_SWITCHING_SUBSCRIPTION_KEY);\n }\n\n public checkIsSwitchingSubscription(subscription: Subscription): boolean {\n if (this.localStorage.get(this.IS_SWITCHING_SUBSCRIPTION_KEY)) {\n this.removeIsSwitchingSubscription();\n this.router.navigateByUrl(this.getDefaultRoute(subscription));\n return true;\n }\n return false;\n }\n\n private hasRequiredPermission(item: MenuItemEntry, subscription: Subscription): boolean {\n return AssertionUtils.isNullOrUndefined(item.requiredPermission) || subscription?.hasPermission(item.requiredPermission);\n }\n}\n","export enum SidebarSize {\n SMALL = 'sidebar-small',\n LARGE = 'sidebar-large'\n}\n","import {AbstractControl, AsyncValidatorFn, ValidationErrors} from '@angular/forms';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {AssertionUtils, CheckName} from '@vdw/angular-component-library';\nimport {Observable, Observer, of as observableOf} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, map, switchMap, take} from 'rxjs/operators';\n\nexport class AsyncUniqueValidator {\n public static createValidator(repository: UniqueIdentifierObjectRepository, originalIdentifier: string | number, version: number = 1): AsyncValidatorFn {\n return this.createValidatorForFunc((value: string) => repository.isIdentifierAvailable(value, version), originalIdentifier);\n }\n\n public static createValidatorForFunc(isIdentifierAvailable: (value: any) => Observable, originalIdentifier: string | number): AsyncValidatorFn {\n return (control: AbstractControl): Observable => {\n return new Observable((observer: Observer) => observer.next(control.value)).pipe(\n debounceTime(500),\n distinctUntilChanged(),\n take(1),\n switchMap((value: any) => {\n if (!control.dirty && !control.touched) {\n return observableOf(null);\n }\n\n let result;\n value = AssertionUtils.isNullOrWhitespace(value.toString()) ? null : value.toString().trim().toLowerCase();\n\n if (AssertionUtils.isNullOrUndefined(value) || (!AssertionUtils.isNullOrUndefined(originalIdentifier) && originalIdentifier.toString().trim().toLowerCase() === value)) {\n result = observableOf(null);\n } else {\n result = isIdentifierAvailable(value).pipe(map(this.processCheckName()));\n }\n\n return result;\n })\n );\n };\n }\n\n private static processCheckName(): any {\n return (res: boolean | CheckName) => {\n if (typeof res === 'boolean') {\n return res ? null : {identifierTaken: true};\n } else {\n const checkName: CheckName = res;\n return checkName.isAvailable ? null : {identifierTaken: true, entityId: checkName.id};\n }\n };\n }\n}\n","import {UntypedFormControl, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {isEqual} from 'lodash-es';\n\nexport function isMultipleOfValidator(multiple: number): ValidatorFn {\n return (formControl: UntypedFormControl): ValidationErrors => {\n let result = null;\n\n if (!isMultipleOf(formControl.value, multiple)) {\n result = {multiple: true};\n }\n\n return result;\n };\n}\n\nexport function isMultipleOf(value: number, multiple: number): boolean {\n return isEqual(value % multiple, 0);\n}\n","import {FinishingForArticle} from '@domain/article/finishing-for-article';\nimport {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {isNil} from 'lodash-es';\n\nexport class Article {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _design: Drawing;\n private readonly _finishing: FinishingForArticle;\n private readonly _used: boolean;\n\n public constructor(id: number, name: string, design: Drawing, finishing: FinishingForArticle, used?: boolean) {\n this._id = id;\n this._name = name;\n this._design = design;\n this._finishing = finishing;\n this._used = used;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get design(): Drawing {\n return this._design;\n }\n\n public get finishing(): FinishingForArticle {\n return this._finishing;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public static fromJSON(articleJSON: any): Article {\n return new Article(\n articleJSON.id,\n articleJSON.name,\n !isNil(articleJSON.design) && articleJSON.design.drawingType === DrawingType.BMP ? BmpDrawing.fromJSON(articleJSON.design) : null,\n !isNil(articleJSON.finishing) ? FinishingForArticle.fromJSON(articleJSON.finishing) : null,\n articleJSON.used\n );\n }\n\n public static createEmptyArticle(): Article {\n return new Article(null, null, null, null, false);\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n finishingId: !isNil(this.finishing) ? this.finishing.id : null,\n design: {\n id: this.design.id,\n configuration: this.design.configurations[0].toJSON()\n }\n } as any as JSON;\n }\n}\n","export class CreelPositionForArticle {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(creelPositionForArticleJSON: any): CreelPositionForArticle {\n return new CreelPositionForArticle(creelPositionForArticleJSON.id, creelPositionForArticleJSON.name);\n }\n}\n","export class DrawingForArticle {\n private _id: number;\n private _name: string;\n private _shape: string;\n private _repeated: boolean;\n\n public constructor(id: number, name: string, shape: string, repeated: boolean) {\n this._id = id;\n this._name = name;\n this._shape = shape;\n this._repeated = repeated;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get shape(): string {\n return this._shape;\n }\n\n public get repeated(): boolean {\n return this._repeated;\n }\n\n public static fromJSON(drawingForArticleJSON: any): DrawingForArticle {\n return new DrawingForArticle(drawingForArticleJSON.id, drawingForArticleJSON.name, drawingForArticleJSON.shape, drawingForArticleJSON.repeated);\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\n\nexport class FinishingForArticle {\n private _id: number;\n private _name: string;\n private _version: number;\n\n public constructor(id: number, name: string, version: number) {\n this._id = id;\n this._name = name;\n this._version = version;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._name, this._version);\n }\n\n public static fromJSON(finishingForArticleJSON: any): FinishingForArticle {\n return new FinishingForArticle(finishingForArticleJSON.id, finishingForArticleJSON.name, finishingForArticleJSON.version);\n }\n\n public static fromOverviewListFinishing(overviewListFinishing: OverviewListFinishing): FinishingForArticle {\n return new FinishingForArticle(overviewListFinishing.id, overviewListFinishing.name, overviewListFinishing.version);\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\n\nexport class MachineQualityForArticle {\n private _id: number;\n private _name: string;\n private _version: number;\n private _yarnSet: OverviewListYarnSet;\n\n public constructor(id: number, name: string, version: number, yarnSet?: OverviewListYarnSet) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._yarnSet = yarnSet;\n }\n\n public get id(): number {\n return this._id;\n }\n\n private get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get yarnSet(): OverviewListYarnSet {\n return this._yarnSet;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.name, this.version);\n }\n\n public static fromJSON(machineQualityForArticleJSON: any): MachineQualityForArticle {\n return new MachineQualityForArticle(\n machineQualityForArticleJSON.id,\n machineQualityForArticleJSON.name,\n machineQualityForArticleJSON.version,\n machineQualityForArticleJSON.yarnSet ? OverviewListYarnSet.fromJSON(machineQualityForArticleJSON.yarnSet) : null\n );\n }\n\n public static fromOverviewListMachineQuality(overviewListMachineQuality: OverviewListMachineQuality): MachineQualityForArticle {\n return new MachineQualityForArticle(overviewListMachineQuality.id, overviewListMachineQuality.technicalName, overviewListMachineQuality.version);\n }\n}\n","export enum BackgroundJobType {\n COMPLETE_ORDER,\n REMOVE_FILES,\n PROCESS_SINGLE_BMP,\n GENERATE_SCHEDULE_ZIP,\n ERP_CREATE_SCHEDULE\n}\n","export enum BackgroundStatus {\n NOT_STARTED,\n STARTED,\n COMPLETED,\n FAILED,\n CANCELLED\n}\n\nconst backgroundStatusIconMap: Map = new Map([\n [BackgroundStatus.NOT_STARTED, 'draft'],\n [BackgroundStatus.STARTED, 'execute'],\n [BackgroundStatus.COMPLETED, 'completed'],\n [BackgroundStatus.FAILED, 'failed'],\n [BackgroundStatus.CANCELLED, 'cancelled']\n]);\n\nexport namespace BackgroundStatus {\n export function getStatusIconName(status: BackgroundStatus): string {\n return backgroundStatusIconMap.get(status);\n }\n}\n","export enum BackgroundTaskAction {\n CREATE_ORDER,\n PROCESS_ORDER,\n TRANSLATE_ORDER,\n SEND_ORDER,\n QUEUE_ORDER,\n REMOVE_FILES,\n GENERATE_SCHEDULE_ZIP,\n CPS_QUERY_MACHINE_INFO,\n CPS_CREATE_AND_GET_QUALITIES,\n CPS_CREATE_AND_GET_DEFAULT_CREEL,\n CPS_GET_DESIGNS,\n CPS_CREATE_ORDERLINES,\n CPS_CREATE_SCHEDULE,\n CPS_VERIFY_SCHEDULE,\n CPS_CREATE_PRODUCTION_ORDER\n}\n","import {EnumUtils, PresetColors} from '@vdw/angular-component-library';\n\nexport class Shift {\n private _id: number;\n private _name: string;\n private _color: PresetColors;\n\n public constructor(id: number, name: string, color: PresetColors) {\n this._id = id;\n this._name = name;\n this._color = color;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get color(): PresetColors {\n return this._color;\n }\n\n public set color(value: PresetColors) {\n this._color = value;\n }\n\n public static fromJSON(shiftJSON: any): Shift {\n return new Shift(shiftJSON.id, shiftJSON.name, PresetColors[shiftJSON.color]);\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n color: EnumUtils.getKeyFromValue(PresetColors, this._color)\n } as any as JSON;\n }\n}\n","import {ColorRGBRepresentation} from '@vdw/angular-component-library';\nimport {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport class ColorPatternVisualisation extends PatternVisualisation {\n private _rgb: ColorRGBRepresentation;\n\n public constructor(rgb: ColorRGBRepresentation) {\n super(PatternVisualisationType.COLOR);\n\n this._rgb = rgb;\n }\n\n public get rgb(): ColorRGBRepresentation {\n return this._rgb;\n }\n\n public static fromJSON(patternVisualisationJSON: any): ColorPatternVisualisation {\n return new ColorPatternVisualisation(patternVisualisationJSON.pattern);\n }\n\n public toJSON(): JSON {\n return {\n pattern: this._rgb,\n patternType: PatternVisualisationType[this.type]\n } as any as JSON;\n }\n}\n","import {Router} from '@angular/router';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {Conflict, EnumUtils} from '@vdw/angular-component-library';\n\nexport enum ConflictType {\n MACHINE = 'MACHINE',\n COLOR_SET = 'COLOR_SET',\n YARN_SET = 'YARN_SET',\n COLORED_YARN_SET = 'COLORED_YARN_SET',\n CREEL = 'CREEL',\n ARTICLE = 'ARTICLE',\n PRODUCTION_SCHEDULE = 'PRODUCTION_SCHEDULE',\n PRODUCTION_ORDER_LITE = 'PRODUCTION_ORDER_LITE',\n DESIGN = 'DESIGN',\n MACHINE_QUALITY = 'MACHINE_QUALITY',\n PRODUCT_CONFIGURATION = 'PRODUCT_CONFIGURATION',\n SALES_ORDER = 'SALES_ORDER',\n ORDER_LINE = 'ORDER_LINE',\n OPERATOR = 'OPERATOR',\n TUFT_PRODUCT = 'TUFT_PRODUCT',\n PRODUCTION_ORDER_TUFT = 'PRODUCTION_ORDER_TUFT',\n PRODUCTION_ORDER_WEAVING = 'PRODUCTION_ORDER_WEAVING',\n YARN_TYPE = 'YARN_TYPE',\n FIXED_SCHEDULE = 'FIXED_SCHEDULE',\n WEFT_COLORED_YARN_SET = 'WEFT_COLORED_YARN_SET',\n TOOL = 'TOOL',\n PRODUCTION_ORDER_PLASTIC = 'PRODUCTION_ORDER_PLASTIC',\n STOCK_LOCATION = 'STOCK_LOCATION',\n PATTERN = 'PATTERN'\n}\n\nexport namespace ConflictType {\n const PRODUCTION_ORDER_TRANSLATION_KEY = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n\n const translationKeysForConflictType: Map = new Map([\n [ConflictType.MACHINE, 'MACHINE.MACHINE'],\n [ConflictType.COLOR_SET, 'TEXTILE_DATA.COLOR_SET.COLOR_SET'],\n [ConflictType.YARN_SET, 'TEXTILE_DATA.YARN_SET.YARN_SET'],\n [ConflictType.COLORED_YARN_SET, 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET'],\n [ConflictType.CREEL, 'TEXTILE_DATA.CREEL.CREEL'],\n [ConflictType.ARTICLE, 'ARTICLES.ARTICLE'],\n [ConflictType.DESIGN, 'DESIGN_LIBRARY.DESIGN'],\n [ConflictType.MACHINE_QUALITY, 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\n [ConflictType.PRODUCT_CONFIGURATION, 'PRODUCT_CONFIGURATION.PRODUCT_CONFIGURATION'],\n [ConflictType.SALES_ORDER, 'SALES_ORDERS.SALES_ORDER'],\n [ConflictType.ORDER_LINE, 'SALES_ORDERS.ORDER_LINES.ORDER_LINE'],\n [ConflictType.OPERATOR, 'MACHINE.OPERATORS.OPERATOR'],\n [ConflictType.TUFT_PRODUCT, 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT'],\n [ConflictType.PRODUCTION_SCHEDULE, PRODUCTION_ORDER_TRANSLATION_KEY],\n [ConflictType.PRODUCTION_ORDER_LITE, PRODUCTION_ORDER_TRANSLATION_KEY],\n [ConflictType.PRODUCTION_ORDER_TUFT, PRODUCTION_ORDER_TRANSLATION_KEY],\n [ConflictType.PRODUCTION_ORDER_WEAVING, PRODUCTION_ORDER_TRANSLATION_KEY],\n [ConflictType.YARN_TYPE, 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE'],\n [ConflictType.FIXED_SCHEDULE, 'TEXTILE_DATA.FIXED_ORDER.FIXED_ORDER'],\n [ConflictType.WEFT_COLORED_YARN_SET, 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET'],\n [ConflictType.TOOL, 'UTILITIES.TOOL.TOOL'],\n [ConflictType.PRODUCTION_ORDER_PLASTIC, PRODUCTION_ORDER_TRANSLATION_KEY],\n [ConflictType.PATTERN, 'GENERAL.PATTERN.PATTERN']\n ]);\n\n const pathsForConflictType: Map = new Map([\n [ConflictType.MACHINE, RouteUtils.paths.texState.editMachine.absolutePath],\n [ConflictType.COLOR_SET, RouteUtils.paths.texStyle.colorSet.editColorSet.absolutePath],\n [ConflictType.YARN_SET, RouteUtils.paths.texStyle.yarnSet.editYarnSet.absolutePath],\n [ConflictType.COLORED_YARN_SET, RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet.absolutePath],\n [ConflictType.CREEL, RouteUtils.paths.texStyle.creel.editCreel.absolutePath],\n [ConflictType.ARTICLE, RouteUtils.paths.texFab.article.editArticle.absolutePath],\n [ConflictType.PRODUCTION_SCHEDULE, RouteUtils.paths.texFab.productionOrder.editProductionOrder.absolutePath],\n [ConflictType.PRODUCTION_ORDER_LITE, RouteUtils.paths.texFab.weaving.editProductionOrder.absolutePath],\n [ConflictType.DESIGN, RouteUtils.paths.texEdit.designLibrary.absolutePath],\n [ConflictType.MACHINE_QUALITY, RouteUtils.paths.texStyle.machineQuality.editMachineQuality.absolutePath],\n [ConflictType.PRODUCT_CONFIGURATION, RouteUtils.paths.texEdit.editProductConfiguration.absolutePath],\n [ConflictType.SALES_ORDER, RouteUtils.paths.texFab.salesOrder.editSalesOrder.absolutePath],\n [ConflictType.ORDER_LINE, RouteUtils.paths.texFab.orderbook.absolutePath],\n [ConflictType.OPERATOR, RouteUtils.paths.settings.operator.editOperator.absolutePath],\n [ConflictType.TUFT_PRODUCT, RouteUtils.paths.texStyle.tuftProduct.editTuftProduct.absolutePath],\n [ConflictType.PRODUCTION_ORDER_TUFT, RouteUtils.paths.texFab.tufting.editProductionOrder.absolutePath],\n [ConflictType.PRODUCTION_ORDER_WEAVING, RouteUtils.paths.texFab.weaving.editProductionOrder.absolutePath],\n [ConflictType.YARN_TYPE, RouteUtils.paths.texStyle.yarn.editYarn.absolutePath],\n [ConflictType.FIXED_SCHEDULE, RouteUtils.paths.texStyle.fixedSchedule.editFixedSchedule.absolutePath],\n [ConflictType.WEFT_COLORED_YARN_SET, RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet.absolutePath],\n [ConflictType.TOOL, RouteUtils.paths.utilities.tool.editTool.absolutePath],\n [ConflictType.PRODUCTION_ORDER_PLASTIC, RouteUtils.paths.texFab.plastic.editProductionOrder.absolutePath],\n [ConflictType.PATTERN, NavigationId.EDIT_PATTERN]\n ]);\n\n export function getTranslationKeyForConflictType(conflictType: ConflictType): string {\n return translationKeysForConflictType.get(conflictType);\n }\n\n export function getPathForConflictType(conflict: Conflict, router: Router, currentSubscription?: Subscription): string {\n let path = pathsForConflictType.get(conflict.type);\n let conflictUrl = '';\n\n if (typeof path !== 'string') {\n path = NavigationUtils.getAbsolutePath(path);\n }\n\n if (conflict.type === ConflictType.PRODUCTION_SCHEDULE && this.hasPermissionToGoToNewBuilder(currentSubscription)) {\n path = RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView.absolutePath;\n }\n\n if (conflict.type === ConflictType.MACHINE) {\n conflictUrl = router.serializeUrl(router.createUrlTree([path.replace(':machineType', EnumUtils.getKeyFromValue(MachineType, MachineType.CARPET_LOOM).toLowerCase())]));\n } else if (conflict.type === ConflictType.DESIGN) {\n conflictUrl = router.serializeUrl(\n router.createUrlTree([path], {\n queryParams: {\n id: conflict.id\n }\n })\n );\n } else {\n conflictUrl = router.serializeUrl(router.createUrlTree([path.replace(':id', `${conflict.id}`)]));\n }\n\n return conflictUrl;\n }\n\n export function hasPermissionToGoToNewBuilder(currentSubscription: Subscription): boolean {\n return currentSubscription?.hasPermission(Permission.TEXFAB_NEW_BUILDER);\n }\n}\n","import {NameGenerator} from './name-generator';\r\n\r\nexport class CustomSettings {\r\n private _id: number;\r\n private _nameGenerator: NameGenerator;\r\n\r\n public constructor(id: number, nameGenerator: NameGenerator) {\r\n this.id = id;\r\n this.nameGenerator = nameGenerator;\r\n }\r\n\r\n public get id(): number {\r\n return this._id;\r\n }\r\n\r\n public set id(value: number) {\r\n this._id = value;\r\n }\r\n\r\n public get nameGenerator(): NameGenerator {\r\n return this._nameGenerator;\r\n }\r\n\r\n public set nameGenerator(value: NameGenerator) {\r\n this._nameGenerator = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n nameGenerator: this.nameGenerator.toJSON()\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): CustomSettings {\r\n return new CustomSettings(json.id, NameGenerator.fromJSON(json.nameGenerator));\r\n }\r\n}\r\n","import {NameGeneratorPartType} from './name-generator-part-type.enum';\r\n\r\nexport class NameGeneratorProperty {\r\n private _type: NameGeneratorPartType;\r\n private _name: string;\r\n\r\n public constructor(type: NameGeneratorPartType, name: string = null) {\r\n this.type = type;\r\n this.name = name;\r\n }\r\n\r\n public get type(): NameGeneratorPartType {\r\n return this._type;\r\n }\r\n\r\n public set type(value: NameGeneratorPartType) {\r\n this._type = value;\r\n }\r\n\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n public static fromJSON(json: any): NameGeneratorProperty {\r\n return new NameGeneratorProperty(NameGeneratorPartType[json.type], json.name);\r\n }\r\n}\r\n","export enum NameGeneratorPartType {\r\n ALPHABETIC_SERIAL_NUMBER = 'ALPHABETIC_SERIAL_NUMBER',\r\n NUMERIC_SERIAL_NUMBER = 'NUMERIC_SERIAL_NUMBER',\r\n PROPERTY_VALUE = 'PROPERTY_VALUE',\r\n CUSTOM_TEXT = 'CUSTOM_TEXT',\r\n CALCULATED_VALUE = 'CALCULATED_VALUE'\r\n}\r\n","import {NameGeneratorPartType} from './name-generator-part-type.enum';\r\n\r\nexport abstract class NameGeneratorPart {\r\n private _type: NameGeneratorPartType;\r\n\r\n public get type(): NameGeneratorPartType {\r\n return this._type;\r\n }\r\n\r\n public set type(value: NameGeneratorPartType) {\r\n this._type = value;\r\n }\r\n\r\n public abstract toJSON(): JSON;\r\n}\r\n","import {NameGeneratorPart} from '../name-generator-part';\r\nimport {NameGeneratorPartType} from '../name-generator-part-type.enum';\r\n\r\nexport class CalculatedValuePart extends NameGeneratorPart {\r\n private _name: string;\r\n\r\n public constructor(name: string) {\r\n super();\r\n this.type = NameGeneratorPartType.CALCULATED_VALUE;\r\n this.name = name;\r\n }\r\n\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n type: this.type,\r\n name: this.name\r\n } as any as JSON;\r\n }\r\n}\r\n","import {NameGeneratorPart} from '../name-generator-part';\r\nimport {NameGeneratorPartType} from '../name-generator-part-type.enum';\r\n\r\nexport class CustomTextPart extends NameGeneratorPart {\r\n private _customText: string;\r\n\r\n public constructor(customText: string) {\r\n super();\r\n this.type = NameGeneratorPartType.CUSTOM_TEXT;\r\n this.customText = customText;\r\n }\r\n\r\n public get customText(): string {\r\n return this._customText;\r\n }\r\n\r\n public set customText(value: string) {\r\n this._customText = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n type: this.type,\r\n customText: this.customText\r\n } as any as JSON;\r\n }\r\n}\r\n","import {CutFrom} from '../../name-generator/enums/cut-from.enum';\r\nimport {NameGeneratorPart} from '../name-generator-part';\r\nimport {NameGeneratorPartType} from '../name-generator-part-type.enum';\r\n\r\nexport class EntityPropertyPart extends NameGeneratorPart {\r\n private _name: string;\r\n private _cutFromDirection: CutFrom;\r\n private _cutStartCharacter: number;\r\n private _cutLength: number;\r\n\r\n public constructor(name: string, cutFromDirection: CutFrom, cutStartCharacter: number, cutLength: number) {\r\n super();\r\n this.type = NameGeneratorPartType.PROPERTY_VALUE;\r\n this.name = name;\r\n this.cutFromDirection = cutFromDirection;\r\n this.cutStartCharacter = cutStartCharacter;\r\n this.cutLength = cutLength;\r\n }\r\n\r\n public get name(): string {\r\n return this._name;\r\n }\r\n\r\n public set name(value: string) {\r\n this._name = value;\r\n }\r\n\r\n public get cutFromDirection(): CutFrom {\r\n return this._cutFromDirection;\r\n }\r\n\r\n public set cutFromDirection(value: CutFrom) {\r\n this._cutFromDirection = value;\r\n }\r\n\r\n public get cutStartCharacter(): number {\r\n return this._cutStartCharacter;\r\n }\r\n\r\n public set cutStartCharacter(value: number) {\r\n this._cutStartCharacter = value;\r\n }\r\n\r\n public get cutLength(): number {\r\n return this._cutLength;\r\n }\r\n\r\n public set cutLength(value: number) {\r\n this._cutLength = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n type: this.type,\r\n name: this.name,\r\n cutFromDirection: this.cutFromDirection,\r\n cutStartCharacter: this.cutStartCharacter,\r\n cutLength: this.cutLength\r\n } as any as JSON;\r\n }\r\n}\r\n","import {NameGeneratorPart} from '../name-generator-part';\r\nimport {NameGeneratorPartType} from '../name-generator-part-type.enum';\r\n\r\nexport class SerialNumberPart extends NameGeneratorPart {\r\n private _maxLength: number;\r\n private _startValue: string;\r\n private _stepSize: number;\r\n\r\n public constructor(type: NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER | NameGeneratorPartType.NUMERIC_SERIAL_NUMBER, maxLength: number, startValue: string, stepSize: number) {\r\n super();\r\n this.type = type;\r\n this.maxLength = maxLength;\r\n this.startValue = startValue;\r\n this.stepSize = stepSize;\r\n }\r\n\r\n public get maxLength(): number {\r\n return this._maxLength;\r\n }\r\n\r\n public set maxLength(value: number) {\r\n this._maxLength = value;\r\n }\r\n\r\n public get startValue(): string {\r\n return this._startValue;\r\n }\r\n\r\n public set startValue(value: string) {\r\n this._startValue = value;\r\n }\r\n\r\n public get stepSize(): number {\r\n return this._stepSize;\r\n }\r\n\r\n public set stepSize(value: number) {\r\n this._stepSize = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n type: this.type,\r\n maxLength: this.maxLength,\r\n startValue: this.startValue,\r\n stepSize: this.stepSize\r\n } as any as JSON;\r\n }\r\n}\r\n","import {AssertionUtils} from '@vdw/angular-component-library';\r\nimport {NameGeneratorProperty} from './name-generation-property';\r\nimport {NameGeneratorPartType} from './name-generator-part-type.enum';\r\n\r\nexport namespace NameGeneratorPropertyTranslate {\r\n const MACHINE_NAME_TRANSLATION_KEY = 'MACHINE.MACHINE';\r\n const ENTITY_PROPERTY_TRANSLATION_KEY_MAP = new Map([\r\n ['WeaveStructureName', 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE'],\r\n ['ReedDensityInDentsPerMM', 'TEXTILE_DATA.MACHINE_QUALITY.REEDDENSITY'],\r\n ['WeftDensityInDentsPerMM', 'TEXTILE_DATA.MACHINE_QUALITY.WEFTDENSITY'],\r\n ['TechnicalCode', 'GENERAL.TECHNICAL_CODE'],\r\n ['Type', 'GENERAL.TYPE'],\r\n ['YarnSetName', 'TEXTILE_DATA.YARN_SET.YARN_SET'],\r\n ['Rgb.Red', 'TEXTILE_DATA.COLOR.RED'],\r\n ['Rgb.Green', 'TEXTILE_DATA.COLOR.GREEN'],\r\n ['Rgb.Blue', 'TEXTILE_DATA.COLOR.BLUE'],\r\n ['YarnCount', 'TEXTILE_DATA.YARN_TYPE.YARN_COUNT'],\r\n ['YarnCountUnit', 'GENERAL.UNIT.UNIT'],\r\n ['Threads.RawMaterial', 'TEXTILE_DATA.YARN_TYPE.RAW_MATERIAL'],\r\n ['AmountOfCreelPositions', 'TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS'],\r\n ['ColorSetsWithStartDents.Name', 'TEXTILE_DATA.COLOR_SET.COLOR_SET'],\r\n ['NrPositions', 'TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS'],\r\n ['Equipment.Name', MACHINE_NAME_TRANSLATION_KEY],\r\n ['Quality.Name', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\r\n ['FinishingType', 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHINGTYPE'],\r\n ['FinishingTemplateName', 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE'],\r\n ['CutbarsInformation.CutbarBeforeProperties.CommercialLengthInMM', 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_BEFORE'],\r\n ['CutbarsInformation.CutbarAfterProperties.CommercialLengthInMM', 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_AFTER'],\r\n ['LoomType', 'PATH_LAYOUT_TEMPLATE.LOOM_GROUP'],\r\n ['PathLayoutTemplatePaths.WidthInMM', 'TEXTILE_DATA.MACHINE_QUALITY.OPTIONAL_SETTINGS.PATH_WIDTHS'],\r\n ['TotalWidthInMM', 'PATH_LAYOUT_TEMPLATE.TOTAL_WIDTH'],\r\n ['Machine.Name', MACHINE_NAME_TRANSLATION_KEY],\r\n ['MachineQuality.TechnicalName', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\r\n ['MachineQualityName', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\r\n ['Creel.Name', 'TEXTILE_DATA.CREEL.CREEL'],\r\n ['CreelName', 'TEXTILE_DATA.CREEL.CREEL'],\r\n ['Buggy.Name', 'PLANNING.BUGGY.BUGGY'],\r\n ['BuggyName', 'PLANNING.BUGGY.BUGGY'],\r\n ['NumberOfYarns', 'TEXTILE_DATA.YARN_SET.NUMBER_OF_YARNS'],\r\n ['OrderId', 'MACHINE.DETAILS.ORDER_ID'],\r\n ['NumberOfCreelPositions', 'MACHINE.DETAILS.NR_CREEL_POSITIONS'],\r\n ['DentsForFabric', 'MACHINE.DETAILS.NR_DENTS'],\r\n ['MachineName', MACHINE_NAME_TRANSLATION_KEY],\r\n ['WeaveProductName', 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT'],\r\n ['TuftProduct.Name', 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT'],\r\n ['CreelName', 'TEXTILE_DATA.CREEL.ENTITY'],\r\n ['MachineQualityName', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\r\n ['Name', 'GENERAL.NAME'],\r\n ['Comment', 'GENERAL.COMMENT'],\r\n ['PATH_NUMBER', 'PRODUCTION_ORDER.CUSTOM_SETTINGS.PATH_LABELS.NAME_GENERATOR_PARTS.PATH_NUMBER'],\r\n ['BOTTOM_OR_TOP_PATH', 'PRODUCTION_ORDER.CUSTOM_SETTINGS.PATH_LABELS.NAME_GENERATOR_PARTS.BOTTOM_OR_TOP_PATH'],\r\n ['START_OR_FINISH_PATH', 'PRODUCTION_ORDER.CUSTOM_SETTINGS.PATH_LABELS.NAME_GENERATOR_PARTS.START_OR_FINISH_PATH'],\r\n ['AUTO_INCREMENT', 'PRODUCTION_ORDER.CUSTOM_SETTINGS.PATH_LABELS.NAME_GENERATOR_PARTS.AUTO_INCREMENT']\r\n ]);\r\n\r\n export function getKeyForProperty(property: NameGeneratorProperty): string {\r\n return getKey(property.type, property.name);\r\n }\r\n\r\n export function getKey(type: NameGeneratorPartType, name: string): string {\r\n if (AssertionUtils.isNullOrUndefined(name)) {\r\n return `GENERAL.PLACEHOLDER.${NameGeneratorPartType[type]}`;\r\n }\r\n return ENTITY_PROPERTY_TRANSLATION_KEY_MAP.get(name);\r\n }\r\n}\r\n","import {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\r\nimport {NameGeneratorPart} from './name-generator-part';\r\nimport {nameGeneratorPartFromJSON} from './name-generator-parts/part-from-json';\r\n\r\nexport class NameGenerator {\r\n private _id: number;\r\n private _separatorName: NameGeneratorSeparator;\r\n private _separatorSymbol: string;\r\n private _parts: NameGeneratorPart[];\r\n\r\n public constructor(id: number, separatorName: string, separatorSymbol: string, parts: NameGeneratorPart[]) {\r\n this.id = id;\r\n this.separatorName = separatorName;\r\n this.separatorSymbol = separatorSymbol;\r\n this.parts = parts;\r\n }\r\n\r\n public get id(): number {\r\n return this._id;\r\n }\r\n\r\n public set id(value: number) {\r\n this._id = value;\r\n }\r\n\r\n public get separatorName(): NameGeneratorSeparator {\r\n return this._separatorName;\r\n }\r\n\r\n public set separatorName(value: string) {\r\n this._separatorName = NameGeneratorSeparator[value];\r\n }\r\n\r\n public get separatorSymbol(): string {\r\n return this._separatorSymbol;\r\n }\r\n\r\n public set separatorSymbol(value: string) {\r\n this._separatorSymbol = value;\r\n }\r\n\r\n public get parts(): NameGeneratorPart[] {\r\n return this._parts;\r\n }\r\n\r\n public set parts(value: NameGeneratorPart[]) {\r\n this._parts = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n separatorName: this.separatorName,\r\n parts: this.parts.map((part: NameGeneratorPart) => part.toJSON())\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): NameGenerator {\r\n return new NameGenerator(\r\n json.id,\r\n json.separatorName,\r\n json.separatorSymbol,\r\n json.parts.map((jsonPart: any) => nameGeneratorPartFromJSON(jsonPart))\r\n );\r\n }\r\n}\r\n","import {NameGeneratorPart} from '../name-generator-part';\r\nimport {NameGeneratorPartType} from '../name-generator-part-type.enum';\r\nimport {CalculatedValuePart} from './calculated-value-part';\r\nimport {CustomTextPart} from './custom-text-part';\r\nimport {EntityPropertyPart} from './entity-property-part';\r\nimport {SerialNumberPart} from './serial-number-part';\r\n\r\nexport function nameGeneratorPartFromJSON(json: any): NameGeneratorPart {\r\n const type: NameGeneratorPartType = NameGeneratorPartType[json.type];\r\n\r\n switch (type) {\r\n case NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER:\r\n case NameGeneratorPartType.NUMERIC_SERIAL_NUMBER:\r\n return new SerialNumberPart(type, json.maxLength, json.startValue, json.stepSize);\r\n case NameGeneratorPartType.PROPERTY_VALUE:\r\n return new EntityPropertyPart(json.name, json.cutFromDirection, json.cutStartCharacter, json.cutLength);\r\n case NameGeneratorPartType.CUSTOM_TEXT:\r\n return new CustomTextPart(json.customText);\r\n case NameGeneratorPartType.CALCULATED_VALUE:\r\n return new CalculatedValuePart(json.name);\r\n default:\r\n return null;\r\n }\r\n}\r\n","export class CustomerAddressDetails {\n private _streetName: string;\n private _country: string;\n private _streetNumber: number;\n private _postalCode: string;\n private _city: string;\n\n public constructor(streetName: string, country: string, streetNumber: number, postalCode: string, city: string) {\n this._streetName = streetName;\n this._country = country;\n this._streetNumber = streetNumber;\n this._postalCode = postalCode;\n this._city = city;\n }\n\n public static fromJSON(customerAddressJSON: any): CustomerAddressDetails {\n return new CustomerAddressDetails(customerAddressJSON.streetName, customerAddressJSON.country, customerAddressJSON.streetNumber, customerAddressJSON.postalCode, customerAddressJSON.city);\n }\n\n public toJSON(): JSON {\n return {\n streetName: this._streetName,\n country: this._country,\n streetNumber: this._streetNumber,\n postalCode: this._postalCode,\n city: this._city\n } as any as JSON;\n }\n\n public get streetName(): string {\n return this._streetName;\n }\n\n public get country(): string {\n return this._country;\n }\n\n public get streetNumber(): number {\n return this._streetNumber;\n }\n\n public get postalCode(): string {\n return this._postalCode;\n }\n\n public get city(): string {\n return this._city;\n }\n}\n","export class CustomerContactDetails {\n private _email: string;\n private _telephone: string;\n private _fax: string;\n\n public constructor(email: string, telephone: string, fax: string) {\n this._email = email;\n this._telephone = telephone;\n this._fax = fax;\n }\n\n public static fromJSON(customerContactJSON: any): CustomerContactDetails {\n return new CustomerContactDetails(customerContactJSON.email, customerContactJSON.telephone, customerContactJSON.fax);\n }\n\n public toJSON(): JSON {\n return {\n email: this._email,\n telephone: this._telephone,\n fax: this._fax\n } as any as JSON;\n }\n\n public get email(): string {\n return this._email;\n }\n\n public get telephone(): string {\n return this._telephone;\n }\n\n public get fax(): string {\n return this._fax;\n }\n}\n","import {CustomerAddressDetails} from './customer-address-details';\nimport {CustomerContactDetails} from './customer-contact-details';\n\nexport class Customer {\n private _id: number;\n private _number: number;\n private _name: string;\n private _contactDetails: CustomerContactDetails;\n private _addressDetails: CustomerAddressDetails;\n private _comments: string;\n private _used: boolean;\n\n public constructor(id: number, number: number, name: string, contactDetails: CustomerContactDetails, addressDetails: CustomerAddressDetails, comments: string, used?: boolean) {\n this._id = id;\n this._number = number;\n this._name = name;\n this._contactDetails = contactDetails;\n this._addressDetails = addressDetails;\n this._comments = comments;\n this._used = used;\n }\n\n public static fromJSON(customerJSON: any): Customer {\n const customerContactDetails = CustomerContactDetails.fromJSON(customerJSON);\n const customerAddressDetails = CustomerAddressDetails.fromJSON(customerJSON.address);\n return new Customer(customerJSON.id, customerJSON.customerNumber, customerJSON.name, customerContactDetails, customerAddressDetails, customerJSON.comments, customerJSON.used);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n customerNumber: this._number,\n name: this._name,\n comments: this._comments,\n address: this.addressDetails.toJSON(),\n ...this.contactDetails.toJSON()\n } as any as JSON;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get number(): number {\n return this._number;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get addressDetails(): CustomerAddressDetails {\n return this._addressDetails;\n }\n\n public get contactDetails(): CustomerContactDetails {\n return this._contactDetails;\n }\n\n public get comments(): string {\n return this._comments;\n }\n\n public get used(): boolean {\n return this._used;\n }\n}\n","import {EnumUtils, TranslateService} from '@vdw/angular-component-library';\n\nexport enum FixedShape {\n RECTANGULAR,\n OVAL,\n ECLIPSE,\n CIRCLE,\n RUNNER,\n WALL_TO_WALL\n}\n\nexport namespace FixedShape {\n export function getTranslationKeyForShape(drawingShape: string, translate: TranslateService): string {\n return EnumUtils.getEnumNames(FixedShape).includes(drawingShape) ? translate.instant(`DESIGN_LIBRARY.DETAILS.SHAPES.${drawingShape}`) : drawingShape;\n }\n}\n","import {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport class DrawingPatternVisualisation extends PatternVisualisation {\n private _image: string;\n\n public constructor(image: string) {\n super(PatternVisualisationType.DRAWING);\n\n this._image = image;\n }\n\n public get image(): string {\n return this._image;\n }\n\n public static fromJSON(patternVisualisationJSON: any): DrawingPatternVisualisation {\n return new DrawingPatternVisualisation(patternVisualisationJSON.pattern);\n }\n\n public toJSON(): JSON {\n return {\n pattern: this._image,\n patternType: PatternVisualisationType[this.type]\n } as any as JSON;\n }\n}\n","export enum PriorityLevel {\n INFORMATION = 'INFORMATION',\n WARNING = 'WARNING',\n ALARM = 'ALARM',\n CRITICAL = 'CRITICAL'\n}\n","export enum FontFamily {\r\n ARIAL = 'ARIAL',\r\n BITSTREAM_VERA_SANS_MONO = 'BITSTREAM_VERA_SANS_MONO',\r\n VERDANA = 'VERDANA',\r\n COURIER = 'COURIER',\r\n TIMES = 'TIMES'\r\n}\r\n","export enum FontStyle {\r\n NORMAL = 'NORMAL',\r\n ITALIC = 'ITALIC'\r\n}\r\n","export enum FontWeight {\r\n REGULAR = 'REGULAR',\r\n BOLD = 'BOLD'\r\n}\r\n","import {IdName} from './id-name';\n\nexport class IdNameDescription extends IdName {\n private readonly _description: string;\n\n public constructor(id: number, name: string, description: string) {\n super(id, name);\n this._description = description;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public static fromJSON(object: any): IdNameDescription {\n return new IdNameDescription(object.id, object.name, object.description);\n }\n}\n","import {IdName} from './id-name';\n\nexport class IdNameUsed extends IdName {\n private readonly _used: boolean;\n\n public constructor(id: number, name: string, used: boolean) {\n super(id, name);\n this._used = used;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public static fromJSON(object: any): IdNameUsed {\n return new IdNameUsed(object.id, object.name, object.used);\n }\n}\n","import {IdName} from './id-name';\n\nexport class IdNameVersion extends IdName {\n private readonly _version: number;\n\n public constructor(id: number, name: string, version: number) {\n super(id, name);\n this._version = version;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public static fromJSON(object: any): IdNameVersion {\n return new IdNameVersion(object.id, object.name, object.version);\n }\n\n public static fromMachineQuality(object: any): IdNameVersion {\n return new IdNameVersion(object.id, object.technicalName, object.version);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n version: this.version\n } as any as JSON;\n }\n}\n","export class IdName {\n protected _id: number;\n protected _name: string;\n\n public constructor(id: number, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public static fromJSON(object: any): IdName {\n return new IdName(object.id, object.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name\n } as any as JSON;\n }\n}\n","import {EquipmentManufacturer} from '@domain/machine/equipment-manufacturer';\n\nexport abstract class BaseMachineType {\n private _id: number;\n private _name: string;\n private _manufacturer: EquipmentManufacturer;\n private _model: string;\n\n protected constructor(id: number, name: string, manufacturer: EquipmentManufacturer, model: string) {\n this._id = id;\n this._name = name;\n this._manufacturer = manufacturer;\n this._model = model;\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n manufacturerId: this.manufacturer?.id,\n model: this.model\n } as any as JSON;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get manufacturer(): EquipmentManufacturer {\n return this._manufacturer;\n }\n\n public set manufacturer(manufacturer: EquipmentManufacturer) {\n this._manufacturer = manufacturer;\n }\n\n public get model(): string {\n return this._model;\n }\n\n public set model(model: string) {\n this._model = model;\n }\n}\n","export enum BuilderType {\n BUGGIES,\n ROLLS\n}\n","import {IdName} from '@domain/id-name';\n\nexport class ControllerType extends IdName {\n public constructor(id: number, name: string = null) {\n super(id, name);\n }\n\n public static fromJSON(object: any): ControllerType {\n return new ControllerType(object.id, object.name);\n }\n}\n","import {BaseMachineType} from '@domain/machine/base-machine-type';\nimport {ControllerType} from '@domain/machine/controller-type';\nimport {EquipmentManufacturer} from '@domain/machine/equipment-manufacturer';\nimport {Technology} from '@domain/machine/technology';\n\nexport class DyeingMachineType extends BaseMachineType {\n private _technology: Technology;\n private _controllerType: ControllerType;\n private _minimumLoadInKg: number;\n private _maximumLoadInKg: number;\n private _maximumTemperatureInCelsius: number;\n\n public constructor(\n id: number,\n name: string,\n technology: Technology,\n manufacturer: EquipmentManufacturer,\n model: string,\n controllerType: ControllerType,\n minimumLoadInKg: number,\n maximumLoadInKg: number,\n maximumTemperatureInCelsius: number\n ) {\n super(id, name, manufacturer, model);\n this._technology = technology;\n this._controllerType = controllerType;\n this._minimumLoadInKg = minimumLoadInKg;\n this._maximumLoadInKg = maximumLoadInKg;\n this._maximumTemperatureInCelsius = maximumTemperatureInCelsius;\n }\n\n public static fromJSON(dyeingMachineTypeJSON: any): DyeingMachineType {\n return new DyeingMachineType(\n dyeingMachineTypeJSON.id,\n dyeingMachineTypeJSON.name,\n new Technology(dyeingMachineTypeJSON.technologyId, dyeingMachineTypeJSON.technologyName),\n new EquipmentManufacturer(dyeingMachineTypeJSON.manufacturerId, dyeingMachineTypeJSON.manufacturerName),\n dyeingMachineTypeJSON.model,\n new ControllerType(dyeingMachineTypeJSON.controllerTypeId, dyeingMachineTypeJSON.controllerTypeName),\n dyeingMachineTypeJSON.minimumLoadInKg,\n dyeingMachineTypeJSON.maximumLoadInKg,\n dyeingMachineTypeJSON.maximumTemperatureInCelsius\n );\n }\n\n public get technology(): Technology {\n return this._technology;\n }\n\n public set technology(technology: Technology) {\n this._technology = technology;\n }\n\n public get controllerType(): ControllerType {\n return this._controllerType;\n }\n\n public set controllerType(controllerType: ControllerType) {\n this._controllerType = controllerType;\n }\n\n public get minimumLoadInKg(): number {\n return this._minimumLoadInKg;\n }\n\n public set minimumLoadInKg(minimumLoadInKg: number) {\n this._minimumLoadInKg = minimumLoadInKg;\n }\n\n public get maximumLoadInKg(): number {\n return this._maximumLoadInKg;\n }\n\n public set maximumLoadInKg(value: number) {\n this._maximumLoadInKg = value;\n }\n\n public get maximumTemperatureInCelsius(): number {\n return this._maximumTemperatureInCelsius;\n }\n\n public set maximumTemperatureInCelsius(value: number) {\n this._maximumTemperatureInCelsius = value;\n }\n\n public toJSON(): JSON {\n const machineTypeJSON = super.toJSON();\n machineTypeJSON['technologyId'] = this.technology?.id;\n machineTypeJSON['controllerTypeId'] = this.controllerType?.id;\n machineTypeJSON['minimumLoadInKg'] = this.minimumLoadInKg;\n machineTypeJSON['maximumLoadInKg'] = this.maximumLoadInKg;\n machineTypeJSON['maximumTemperatureInCelsius'] = this.maximumTemperatureInCelsius;\n return machineTypeJSON;\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {DyeingMachineType} from './dyeing-machine-type';\nimport {MachineType} from './machine-type.enum';\n\nexport class DyeingMachine extends Equipment {\n private _dyeingMachineType: DyeingMachineType;\n\n public constructor(id: number, name: string, orderId: string, dyeingMachineType: DyeingMachineType) {\n super(id, MachineType.DYEING, name, orderId);\n this._dyeingMachineType = dyeingMachineType;\n }\n\n public static fromJSON(dyeingMachineJSON: any): DyeingMachine {\n return new DyeingMachine(\n dyeingMachineJSON.id,\n dyeingMachineJSON.name,\n dyeingMachineJSON.orderId,\n AssertionUtils.isNullOrUndefined(dyeingMachineJSON.dyeingMachineType) ? null : DyeingMachineType.fromJSON(dyeingMachineJSON.dyeingMachineType)\n );\n }\n\n public toJSON(): JSON {\n const dyeingMachineJSON = super.toJSON();\n dyeingMachineJSON['dyeingMachineTypeId'] = this.dyeingMachineType?.id;\n\n return dyeingMachineJSON;\n }\n\n public get dyeingMachineType(): DyeingMachineType {\n return this._dyeingMachineType;\n }\n\n public set dyeingMachineType(value: DyeingMachineType) {\n this._dyeingMachineType = value;\n }\n}\n","import {IdName} from '@domain/id-name';\n\nexport class EquipmentManufacturer extends IdName {\n private readonly _models: string[];\n private readonly _technologyIds: number[];\n\n public constructor(id: number, name: string = null, models: string[] = [], technologyIds: number[] = []) {\n super(id, name);\n this._models = models;\n this._technologyIds = technologyIds;\n }\n\n public get models(): string[] {\n return this._models;\n }\n\n public get technologyIds(): number[] {\n return this._technologyIds;\n }\n\n public static fromJSON(equipmentManufacturerJSON: any): EquipmentManufacturer {\n return new EquipmentManufacturer(equipmentManufacturerJSON.id, equipmentManufacturerJSON.name, equipmentManufacturerJSON.models, equipmentManufacturerJSON.technologyIds);\n }\n}\n","import {MachineType} from './machine-type.enum';\n\nexport class Equipment {\n private _id: number;\n private _machineType: MachineType;\n private _name: string;\n private _orderId: string;\n\n public constructor(id: number, machineType: MachineType, name: string, orderId: string) {\n this._id = id;\n this._machineType = machineType;\n this._name = name;\n this._orderId = orderId;\n }\n\n public static fromJSON(machineJSON: any): Equipment {\n return new Equipment(machineJSON.id, MachineType[`${machineJSON.machineType}`], machineJSON.name, machineJSON.orderId);\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get machineType(): MachineType {\n return this._machineType;\n }\n\n public set machineType(machineType: MachineType) {\n this._machineType = machineType;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get orderId(): string {\n return this._orderId;\n }\n\n public set orderId(orderId: string) {\n this._orderId = orderId;\n }\n\n public toJSON(): JSON {\n return {\n machineType: `${MachineType[this.machineType]}`,\n name: this.name,\n orderId: this.orderId\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\n\nexport class Gauge extends IdName {\n private readonly _fractionalValueAsString: string;\n\n public constructor(id: number, name: string) {\n super(id, name);\n this._fractionalValueAsString = name.split(' ')?.[0];\n }\n\n public static fromJSON(object: any): Gauge {\n return new Gauge(object.id, object.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n fractionalValueAsString: this._fractionalValueAsString\n } as any as JSON;\n }\n\n public get fractionalValueAsString(): string {\n return this._fractionalValueAsString;\n }\n\n public get fractionalValue(): number {\n const parts = this._fractionalValueAsString.split('/');\n const numerator = parseFloat(parts[0]);\n const denominator = parseFloat(parts[1]);\n\n return numerator / denominator;\n }\n}\n","export enum JacquardMachineLoomLayoutZoneRepeatType {\n NONE,\n INLINE,\n MIRROR\n}\n","export enum JacquardMachineLoomLayoutZoneType {\n SELVEDGE,\n DESIGN\n}\n","import {JacquardMachineLoomLayoutZoneRepeatType} from './jacquard-machine-loom-layout-zone-repeat-type.enum';\nimport {JacquardMachineLoomLayoutZoneType} from './jacquard-machine-loom-layout-zone-type.enum';\n\nexport class JacquardMachineLoomLayoutZone {\n private _type: JacquardMachineLoomLayoutZoneType;\n private _numberOfDents: number;\n private _repeatType: JacquardMachineLoomLayoutZoneRepeatType;\n private _startDent: number;\n private _startDentRepeat: number;\n private _position: number;\n\n public constructor(\n type: JacquardMachineLoomLayoutZoneType,\n numberOfDents: number,\n repeatType: JacquardMachineLoomLayoutZoneRepeatType,\n startDent: number,\n startDentRepeat: number,\n position: number\n ) {\n this._type = type;\n this._numberOfDents = numberOfDents;\n this._repeatType = repeatType;\n this._startDent = startDent;\n this._startDentRepeat = startDentRepeat;\n this._position = position;\n }\n\n public get type(): JacquardMachineLoomLayoutZoneType {\n return this._type;\n }\n\n public get numberOfDents(): number {\n return this._numberOfDents;\n }\n\n public get repeatType(): JacquardMachineLoomLayoutZoneRepeatType {\n return this._repeatType;\n }\n\n public get startDent(): number {\n return this._startDent;\n }\n\n public get startDentRepeat(): number {\n return this._startDentRepeat;\n }\n\n public get position(): number {\n return this._position;\n }\n\n public toJSON(): any {\n return {\n type: JacquardMachineLoomLayoutZoneType[this._type],\n numberOfDents: this._numberOfDents,\n repeatType: JacquardMachineLoomLayoutZoneRepeatType[this._repeatType],\n startDent1Based: this._startDent,\n startDentRepeat: this._startDentRepeat,\n position: this._position\n };\n }\n\n public static fromJSON(jacquardMachineLoomLayoutZoneJSON: any): JacquardMachineLoomLayoutZone {\n return new JacquardMachineLoomLayoutZone(\n JacquardMachineLoomLayoutZoneType[jacquardMachineLoomLayoutZoneJSON.type as keyof typeof JacquardMachineLoomLayoutZone],\n jacquardMachineLoomLayoutZoneJSON.numberOfDents,\n JacquardMachineLoomLayoutZoneRepeatType[jacquardMachineLoomLayoutZoneJSON.repeatType as keyof typeof JacquardMachineLoomLayoutZoneRepeatType],\n jacquardMachineLoomLayoutZoneJSON.startDent1Based,\n jacquardMachineLoomLayoutZoneJSON.startDentRepeat,\n jacquardMachineLoomLayoutZoneJSON.position\n );\n }\n}\n","export enum MachineEfficiencyLevel {\n HIGH = 'HIGH',\n AVERAGE = 'AVERAGE',\n LOW = 'LOW'\n}\n","import {AssertionUtils, StringUtils} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\n\nexport class MachineGroup {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string = null) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(machineGroupJSON: any): MachineGroup {\n return isNil(machineGroupJSON) ? null : new MachineGroup(machineGroupJSON.id, machineGroupJSON.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name\n } as any as JSON;\n }\n\n public static compare(machineGroupA: MachineGroup, machineGroupB: MachineGroup): number {\n if (machineGroupA?.id === machineGroupB?.id) {\n return 0;\n }\n\n if (AssertionUtils.isNullOrUndefined(machineGroupA)) {\n return 1;\n }\n\n if (AssertionUtils.isNullOrUndefined(machineGroupB)) {\n return -1;\n }\n\n return StringUtils.stringComparator(machineGroupA.name, machineGroupB.name);\n }\n}\n","export class MachineManufacturer {\n private _id: number;\n private _name: string;\n private _jacquardTypes: string[];\n\n public constructor(id: number, name: string = null, jacquardTypes: string[] = []) {\n this._id = id;\n this._name = name;\n this._jacquardTypes = jacquardTypes;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get jacquardTypes(): string[] {\n return this._jacquardTypes;\n }\n\n public static getRandomMachineManufacturerWithId(id: number): MachineManufacturer {\n return new MachineManufacturer(id, `Machine Manufacturer_0${id}`, []);\n }\n\n public static fromJSON(machineManufacturerJSON: any): MachineManufacturer {\n return new MachineManufacturer(machineManufacturerJSON.id, machineManufacturerJSON.name, machineManufacturerJSON.jacquardTypes);\n }\n}\n","import {ReportItemTemplateField} from '@domain/report-data-set/report-item-template-field.enum';\nimport {OverviewMachine} from '@presentation/pages/machine-overview/overview-machine';\nimport {ReportItem} from '@presentation/pages/machine-overview/report-item';\nimport {AssertionUtils, ColorConstants} from '@vdw/angular-component-library';\nimport {isNil, toLower} from 'lodash-es';\n\nexport enum MachineStatus {\n RUNNING = 'RUNNING',\n STOPPED_MANUAL = 'STOPPED_MANUAL',\n STOPPED_CRITICAL = 'STOPPED_CRITICAL',\n DISCONNECTED = 'DISCONNECTED',\n CONNECTED = 'CONNECTED'\n}\n\nexport namespace MachineStatus {\n export function getMachineStatusByLabel(label: string): MachineStatus {\n return !isNil(label) && !isNil(MachineStatus[`${label}`]) ? MachineStatus[`${label}`] : null;\n }\n\n export function getMachineStatusClass(machineStatus: MachineStatus, canSeeStatus: boolean = true): string {\n if (canSeeStatus) {\n return toLower(`${MachineStatus[machineStatus]}`).replace('_', '-');\n }\n const status = machineStatus !== MachineStatus.DISCONNECTED ? MachineStatus.CONNECTED : machineStatus;\n return toLower(`${status}`).replace('_', '-');\n }\n\n export function getMachineStatusColor(machine: OverviewMachine, canSeeStatus: boolean, canSeeDeclarationMessages: boolean, isStatusBar: boolean = true): string {\n if (!canSeeStatus) {\n return '';\n }\n\n const isDisconnected = !AssertionUtils.isNullOrUndefined(machine.status) && machine.status === MachineStatus.DISCONNECTED;\n const reportItemStopReasonColor = machine.reportItems.find((reportItem: ReportItem) => reportItem.field === ReportItemTemplateField.DECLARATION_COLOR);\n\n if (reportItemStopReasonColor?.value && canSeeDeclarationMessages) {\n return reportItemStopReasonColor.value;\n }\n\n switch (machine.status) {\n case MachineStatus.STOPPED_CRITICAL:\n return ColorConstants.FUNCTIONAL_COLOR_RED;\n case MachineStatus.STOPPED_MANUAL:\n return ColorConstants.PRIMARY_COLOR_VDW_BLUE;\n case MachineStatus.RUNNING:\n return isStatusBar && !isDisconnected ? ColorConstants.FUNCTIONAL_COLOR_GREEN : '';\n default:\n return '';\n }\n }\n}\n","import {isEqual, isNil, replace, toLower} from 'lodash-es';\n\nexport enum MachineType {\n CARPET_LOOM = 'CARPET_LOOM',\n CARPET_LOOM_NO_JQ = 'CARPET_LOOM_NO_JQ',\n WEAVING_MACHINE = 'WEAVING_MACHINE',\n TUFT = 'TUFT',\n MYRIAD = 'MYRIAD',\n COLORTEC = 'COLORTEC',\n COLORTECLPLUS = 'COLORTECLPLUS',\n EXTRUSION = 'EXTRUSION',\n FINISHING = 'FINISHING',\n DYEING = 'DYEING',\n SUPERBADYE = 'SUPERBADYE',\n SUPERBAHEAT = 'SUPERBAHEAT',\n WINDER = 'WINDER',\n SUPERBAWINDER = 'SUPERBAWINDER',\n VELVET = 'VELVET',\n VELVET_NO_JQ = 'VELVET_NO_JQ',\n JACQUARD = 'JACQUARD',\n PLASTIC_MACHINE = 'PLASTIC_MACHINE',\n UNDEFINED = 'UNDEFINED'\n}\n\nexport namespace MachineType {\n export function getIconNameForMachineType(machineType: MachineType): string {\n if (isEqual(machineType, MachineType.UNDEFINED) || isNil(machineType)) {\n return 'new-machine';\n } else if (machineType !== MachineType.WEAVING_MACHINE && machineType !== MachineType.VELVET_NO_JQ && machineType !== MachineType.PLASTIC_MACHINE) {\n return `${replace(toLower(MachineType[machineType]), /_/g, '-')}-machine`;\n } else {\n return machineType === MachineType.PLASTIC_MACHINE ? 'plastic-machine' : 'weaving-machine';\n }\n }\n}\n","export enum NumberingMode {\n BOTTOM_TOP_LEFT_RIGHT = 'BOTTOM_TOP_LEFT_RIGHT',\n BOTTOM_TOP_RIGHT_LEFT = 'BOTTOM_TOP_RIGHT_LEFT',\n LEFT_RIGHT_BOTTOM_TOP = 'LEFT_RIGHT_BOTTOM_TOP',\n LEFT_RIGHT_TOP_BOTTOM = 'LEFT_RIGHT_TOP_BOTTOM',\n RIGHT_LEFT_BOTTOM_TOP = 'RIGHT_LEFT_BOTTOM_TOP',\n RIGHT_LEFT_TOP_BOTTOM = 'RIGHT_LEFT_TOP_BOTTOM',\n TOP_BOTTOM_LEFT_RIGHT = 'TOP_BOTTOM_LEFT_RIGHT',\n TOP_BOTTOM_RIGHT_LEFT = 'TOP_BOTTOM_RIGHT_LEFT'\n}\n","import {BaseMachineType} from './base-machine-type';\nimport {EquipmentManufacturer} from './equipment-manufacturer';\nimport {StandardSpeed} from './standard-speed.enum';\nimport {Technology} from './technology';\n\nexport class PlasticsMachineType extends BaseMachineType {\n private _standardSpeed: StandardSpeed;\n private _technology: Technology;\n\n public constructor(id: number, name: string, standardSpeed: StandardSpeed, manufacturer: EquipmentManufacturer, technology: Technology) {\n super(id, name, manufacturer, '');\n this._standardSpeed = standardSpeed;\n this._technology = technology;\n }\n\n public get standardSpeed(): StandardSpeed {\n return this._standardSpeed;\n }\n\n public set standardSpeed(standardSpeed: StandardSpeed) {\n this._standardSpeed = standardSpeed;\n }\n\n public get technology(): Technology {\n return this._technology;\n }\n\n public set technology(technology: Technology) {\n this._technology = technology;\n }\n\n public static fromJSON(plasticsMachineTypeJSON: any): PlasticsMachineType {\n return new PlasticsMachineType(\n plasticsMachineTypeJSON.id,\n plasticsMachineTypeJSON.name,\n plasticsMachineTypeJSON.speedKind,\n new EquipmentManufacturer(plasticsMachineTypeJSON.manufacturerId, plasticsMachineTypeJSON.manufacturerName, []),\n new Technology(plasticsMachineTypeJSON.technologyId, plasticsMachineTypeJSON.technologyName)\n );\n }\n\n public toJSON(): JSON {\n const machineTypeJSON = super.toJSON();\n machineTypeJSON['speedKind'] = this.standardSpeed;\n machineTypeJSON['technologyId'] = this.technology?.id;\n return machineTypeJSON;\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {AssertionUtils, convertSpeedAndCycleTime} from '@vdw/angular-component-library';\nimport {MachineGroup} from './machine-group';\nimport {MachineType} from './machine-type.enum';\nimport {PlasticsMachineType} from './plastics-machine-type';\nimport {StandardSpeed} from './standard-speed.enum';\n\nexport class PlasticsMachine extends Equipment {\n private _machineGroup: MachineGroup;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _plasticsMachineType: PlasticsMachineType;\n\n public constructor(id: number, name: string, orderId: string, machineGroup: MachineGroup, standardSpeed: number, standardEfficiency: number, plasticsMachineType: PlasticsMachineType) {\n super(id, MachineType.PLASTIC_MACHINE, name, orderId);\n this._machineGroup = machineGroup;\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._plasticsMachineType = plasticsMachineType;\n }\n\n public get machineGroup(): MachineGroup {\n return this._machineGroup;\n }\n\n public set machineGroup(machineGroup: MachineGroup) {\n this._machineGroup = machineGroup;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public set standardSpeed(standardSpeed: number) {\n this._standardSpeed = standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public set standardEfficiency(standardEfficiency: number) {\n this._standardEfficiency = standardEfficiency;\n }\n\n public get plasticsMachineType(): PlasticsMachineType {\n return this._plasticsMachineType;\n }\n\n public set plasticsMachineType(plasticsMachineType: PlasticsMachineType) {\n this._plasticsMachineType = plasticsMachineType;\n }\n\n public static fromJSON(plasticsMachineJSON: any): PlasticsMachine {\n if (plasticsMachineJSON.plasticMachineType.speedKind === StandardSpeed.SPEED) {\n plasticsMachineJSON.standardSpeedInCycleTime = convertSpeedAndCycleTime(plasticsMachineJSON.standardSpeedInCycleTime);\n }\n\n return new PlasticsMachine(\n plasticsMachineJSON.id,\n plasticsMachineJSON.name,\n plasticsMachineJSON.orderId,\n MachineGroup.fromJSON(plasticsMachineJSON.machineGroup),\n plasticsMachineJSON.standardSpeedInCycleTime,\n plasticsMachineJSON.standardEfficiency,\n AssertionUtils.isNullOrUndefined(plasticsMachineJSON.plasticMachineType) ? null : PlasticsMachineType.fromJSON(plasticsMachineJSON.plasticMachineType)\n );\n }\n\n public toJSON(): JSON {\n if (this.plasticsMachineType.standardSpeed === StandardSpeed.SPEED) {\n this.standardSpeed = convertSpeedAndCycleTime(this.standardSpeed);\n }\n\n const plasticsMachineJSON = super.toJSON();\n plasticsMachineJSON['standardSpeedInCycleTime'] = this.standardSpeed;\n plasticsMachineJSON['standardEfficiency'] = this.standardEfficiency;\n plasticsMachineJSON['machineGroupId'] = this.machineGroup?.id;\n plasticsMachineJSON['machineGroup'] = this.machineGroup?.toJSON();\n plasticsMachineJSON['plasticMachineTypeId'] = this.plasticsMachineType?.id;\n\n return plasticsMachineJSON;\n }\n}\n","export enum StandardSpeed {\n SPEED = 'SPEED',\n CYCLE_TIME = 'CYCLE_TIME'\n}\n","import {IdName} from '@domain/id-name';\n\nexport class Technology extends IdName {\n public constructor(id: number, name: string = null) {\n super(id, name);\n }\n\n public static fromJSON(object: any): Technology {\n return new Technology(object.id, object.name);\n }\n}\n","export enum ToolStatus {\n ASSEMBLING = 'ASSEMBLING',\n FREE = 'FREE',\n IN_MAINTENANCE = 'IN_MAINTENANCE',\n IN_USE = 'IN_USE',\n NOT_AVAILABLE = 'NOT_AVAILABLE'\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {TuftingMachineType} from '@domain/machine/tufting-machine-type';\nimport {MachineType} from './machine-type.enum';\n\nexport class TuftMachine extends Equipment {\n private readonly _standardSpeed: number;\n private readonly _standardEfficiency: number;\n private readonly _tuftingMachineType: TuftingMachineType;\n\n public constructor(id: number, name: string, orderId: string, standardSpeed: number, standardEfficiency: number, tuftingMachineType: TuftingMachineType) {\n super(id, MachineType.TUFT, name, orderId);\n this._standardEfficiency = standardEfficiency;\n this._standardSpeed = standardSpeed;\n this._tuftingMachineType = tuftingMachineType;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public get tuftingMachineType(): TuftingMachineType {\n return this._tuftingMachineType;\n }\n\n public static fromJSON(tuftingMachineJSON: any): TuftMachine {\n return new TuftMachine(\n tuftingMachineJSON.id,\n tuftingMachineJSON.name,\n tuftingMachineJSON.orderId,\n tuftingMachineJSON.standardSpeed,\n tuftingMachineJSON.standardEfficiency,\n tuftingMachineJSON.tuftingMachineType === undefined ? null : TuftingMachineType.fromJSON(tuftingMachineJSON.tuftingMachineType)\n );\n }\n\n public toJSON(): JSON {\n const tuftingMachineJSON = super.toJSON();\n tuftingMachineJSON['standardSpeed'] = this._standardSpeed;\n tuftingMachineJSON['standardEfficiency'] = this._standardEfficiency;\n tuftingMachineJSON['tuftingMachineTypeId'] = this._tuftingMachineType?.id;\n return tuftingMachineJSON;\n }\n}\n","import {BaseMachineType} from '@domain/machine/base-machine-type';\nimport {Gauge} from '@domain/machine/gauge';\nimport {EquipmentManufacturer} from './equipment-manufacturer';\n\nexport class TuftingMachineType extends BaseMachineType {\n private _width: number;\n private _gauge: Gauge;\n\n public constructor(id: number, name: string, width: number, gauge: Gauge, manufacturer: EquipmentManufacturer, model: string) {\n super(id, name, manufacturer, model);\n this._width = width;\n this._gauge = gauge;\n }\n\n public static fromJSON(tuftingMachineTypeJSON: any): TuftingMachineType {\n return new TuftingMachineType(\n tuftingMachineTypeJSON.id,\n tuftingMachineTypeJSON.name,\n tuftingMachineTypeJSON.widthInCm,\n new Gauge(tuftingMachineTypeJSON.gaugeId, tuftingMachineTypeJSON.gaugeName),\n new EquipmentManufacturer(tuftingMachineTypeJSON.manufacturerId, tuftingMachineTypeJSON.manufacturerName, []),\n tuftingMachineTypeJSON.model\n );\n }\n\n public toJSON(): JSON {\n const machineTypeJSON = super.toJSON();\n machineTypeJSON['widthInCm'] = this.width;\n machineTypeJSON['gaugeId'] = this.gauge?.id;\n return machineTypeJSON;\n }\n\n public get width(): number {\n return this._width;\n }\n\n public set width(width: number) {\n this._width = width;\n }\n\n public get gauge(): Gauge {\n return this._gauge;\n }\n\n public set gauge(gauge: Gauge) {\n this._gauge = gauge;\n }\n}\n","import {Equipment} from './equipment';\nimport {MachineType} from './machine-type.enum';\n\nexport class UnconfiguredMachine extends Equipment {\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.UNDEFINED, name, orderId);\n }\n\n public static fromJSON(machineJSON: any): UnconfiguredMachine {\n return new UnconfiguredMachine(machineJSON.id, machineJSON.name, machineJSON.orderId);\n }\n}\n","export enum VelvetMachineDrawingInType {\n PILE,\n GROUND\n}\n","import {VelvetMachineDrawingInType} from './velvet-machine-drawing-in-type.enum';\n\nexport abstract class VelvetMachineDrawingIn {\n private _number: number;\n private _type: VelvetMachineDrawingInType;\n private _position: number;\n\n public constructor(number: number, type: VelvetMachineDrawingInType, position: number) {\n this._number = number;\n this._type = type;\n this._position = position;\n }\n\n public get number(): number {\n return this._number;\n }\n\n public get type(): VelvetMachineDrawingInType {\n return this._type;\n }\n\n public get position(): number {\n return this._position;\n }\n\n public abstract toJSON(): any;\n}\n","import {VelvetMachineDrawingIn} from './velvet-machine-drawing-in';\nimport {VelvetMachineDrawingInType} from './velvet-machine-drawing-in-type.enum';\n\nexport class VelvetMachineGroundDrawingIn extends VelvetMachineDrawingIn {\n private _bottomCloth: boolean;\n\n public constructor(number: number, bottomCloth: boolean, position: number) {\n super(number, VelvetMachineDrawingInType.GROUND, position);\n\n this._bottomCloth = bottomCloth;\n }\n\n public get bottomCloth(): boolean {\n return this._bottomCloth;\n }\n\n public toJSON(): any {\n return {\n number: this.number,\n type: VelvetMachineDrawingInType[this.type],\n bottomCloth: this._bottomCloth,\n position: this.position\n };\n }\n\n public static fromJSON(velvetMachineGroundDrawingInJSON: any): VelvetMachineGroundDrawingIn {\n return new VelvetMachineGroundDrawingIn(velvetMachineGroundDrawingInJSON.number, velvetMachineGroundDrawingInJSON.bottomCloth, velvetMachineGroundDrawingInJSON.position);\n }\n}\n","import {VelvetMachineDrawingIn} from './velvet-machine-drawing-in';\nimport {VelvetMachineDrawingInType} from './velvet-machine-drawing-in-type.enum';\n\nexport class VelvetMachinePileDrawingIn extends VelvetMachineDrawingIn {\n public constructor(number: number, position: number) {\n super(number, VelvetMachineDrawingInType.PILE, position);\n }\n\n public toJSON(): any {\n return {\n number: this.number,\n type: VelvetMachineDrawingInType[this.type],\n position: this.position\n };\n }\n\n public static fromJSON(velvetMachinePileDrawingInJSON: any): VelvetMachinePileDrawingIn {\n return new VelvetMachinePileDrawingIn(velvetMachinePileDrawingInJSON.number, velvetMachinePileDrawingInJSON.position);\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {isNil} from 'lodash-es';\nimport {BuilderType} from './builder-type.enum';\nimport {JacquardMachineLoomLayoutZone} from './jacquard-machine-loom-layout-zone';\nimport {MachineGroup} from './machine-group';\nimport {MachineManufacturer} from './machine-manufacturer';\nimport {MachineType} from './machine-type.enum';\nimport {VelvetMachineDrawingIn} from './velvet-machine-drawing-in';\nimport {VelvetMachineDrawingInType} from './velvet-machine-drawing-in-type.enum';\nimport {VelvetMachineGroundDrawingIn} from './velvet-machine-ground-drawing-in';\nimport {VelvetMachinePileDrawingIn} from './velvet-machine-pile-drawing-in';\n\nexport class VelvetMachine extends Equipment {\n private _machineGroup: MachineGroup;\n private _remote: boolean;\n private _manufacturer: MachineManufacturer;\n private _jacquardType: string;\n private _minNumberOfPicks: number;\n private _pickDensityInSchedule: boolean;\n private _possibleQualities: OverviewListMachineQuality[];\n private _possibleCreels: OverviewListCreel[];\n private _numberOfCreelPositions: number;\n private _dentsForFabric: number;\n private _sendReport: number;\n private _builderType: BuilderType;\n private _loomLayoutZones: JacquardMachineLoomLayoutZone[];\n private _groundYarnsPerDent: number;\n private _drawingIn: VelvetMachineDrawingIn[];\n\n public constructor(id: number, name: string, orderId: string) {\n super(id, MachineType.VELVET, name, orderId);\n\n this._machineGroup = null;\n this._remote = false;\n this._loomLayoutZones = [];\n this._drawingIn = [];\n }\n\n public static fromJSON(velvetMachineJSON: any): VelvetMachine {\n const machineQualities: OverviewListMachineQuality[] =\n velvetMachineJSON.possibleMachineQualities.length > 0\n ? velvetMachineJSON.possibleMachineQualities.map((possibleMachineQuality: any) => {\n return OverviewListMachineQuality.fromJSON(possibleMachineQuality);\n })\n : null;\n\n const creels: OverviewListCreel[] =\n velvetMachineJSON.possibleCreels.length > 0\n ? velvetMachineJSON.possibleCreels.map((possibleCreel: any) => {\n return OverviewListCreel.fromJSON(possibleCreel);\n })\n : null;\n\n const machineGroup: MachineGroup = isNil(velvetMachineJSON.machineGroup) ? null : MachineGroup.fromJSON(velvetMachineJSON.machineGroup);\n\n const velvetMachine = new VelvetMachine(velvetMachineJSON.id, velvetMachineJSON.name, velvetMachineJSON.orderId);\n velvetMachine.manufacturer = isNil(velvetMachineJSON.manufacturerId) ? null : new MachineManufacturer(velvetMachineJSON.manufacturerId);\n velvetMachine.jacquardType = velvetMachineJSON.jacquardType;\n velvetMachine.minNumberOfPicks = velvetMachineJSON.minNumberOfPicks;\n velvetMachine.pickDensityInSchedule = velvetMachineJSON.pickDensityInSchedule;\n velvetMachine.possibleQualities = machineQualities;\n velvetMachine.possibleCreels = creels;\n velvetMachine.numberOfCreelPositions = velvetMachineJSON.numberOfCreelPositions;\n velvetMachine.dentsForFabric = velvetMachineJSON.dentsForFabric;\n velvetMachine.sendReport = velvetMachineJSON.sendReport;\n velvetMachine.builderType = velvetMachineJSON.builderType ? BuilderType[velvetMachineJSON.builderType as string] : null;\n velvetMachine.remote = velvetMachineJSON.remoteMachine;\n velvetMachine.machineGroup = machineGroup;\n velvetMachine.loomLayoutZones = velvetMachineJSON.loomLayoutZones\n ? velvetMachineJSON.loomLayoutZones\n .map(JacquardMachineLoomLayoutZone.fromJSON)\n .sort((firstLoomLayoutZone: JacquardMachineLoomLayoutZone, secondLoomLayoutZone: JacquardMachineLoomLayoutZone) => firstLoomLayoutZone.position - secondLoomLayoutZone.position)\n : [];\n velvetMachine.groundYarnsPerDent = velvetMachineJSON.groundYarnsPerDent;\n velvetMachine.drawingIn =\n velvetMachineJSON.drawingIn\n ?.map((drawingInJSON: any) => {\n return VelvetMachineDrawingInType[`${drawingInJSON.type}`] === VelvetMachineDrawingInType.PILE\n ? VelvetMachinePileDrawingIn.fromJSON(drawingInJSON)\n : VelvetMachineGroundDrawingIn.fromJSON(drawingInJSON);\n })\n .sort((firstDrawingIn: VelvetMachineDrawingIn, secondDrawingIn: VelvetMachineDrawingIn) => firstDrawingIn.position - secondDrawingIn.position) ?? [];\n\n return velvetMachine;\n }\n\n public get machineGroup(): MachineGroup {\n return this._machineGroup;\n }\n\n public set machineGroup(machineGroup: MachineGroup) {\n this._machineGroup = machineGroup;\n }\n\n public get remote(): boolean {\n return this._remote;\n }\n\n public set remote(remote: boolean) {\n this._remote = remote;\n }\n\n public get manufacturer(): MachineManufacturer {\n return this._manufacturer;\n }\n\n public set manufacturer(manufacturer: MachineManufacturer) {\n this._manufacturer = manufacturer;\n }\n\n public get jacquardType(): string {\n return this._jacquardType;\n }\n\n public set jacquardType(jacquardType: string) {\n this._jacquardType = jacquardType;\n }\n\n public get minNumberOfPicks(): number {\n return this._minNumberOfPicks;\n }\n\n public set minNumberOfPicks(minNumberOfPicks: number) {\n this._minNumberOfPicks = minNumberOfPicks;\n }\n\n public get pickDensityInSchedule(): boolean {\n return this._pickDensityInSchedule;\n }\n\n public set pickDensityInSchedule(pickDensityInSchedule: boolean) {\n this._pickDensityInSchedule = pickDensityInSchedule;\n }\n\n public get possibleQualities(): OverviewListMachineQuality[] {\n return this._possibleQualities;\n }\n\n public set possibleQualities(possibleQualities: OverviewListMachineQuality[]) {\n this._possibleQualities = possibleQualities;\n }\n\n public get possibleCreels(): OverviewListCreel[] {\n return this._possibleCreels;\n }\n\n public set possibleCreels(possibleCreels: OverviewListCreel[]) {\n this._possibleCreels = possibleCreels;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public set numberOfCreelPositions(numberOfCreelPositions: number) {\n this._numberOfCreelPositions = numberOfCreelPositions;\n }\n\n public get dentsForFabric(): number {\n return this._dentsForFabric;\n }\n\n public set dentsForFabric(dentsForFabric: number) {\n this._dentsForFabric = dentsForFabric;\n }\n\n public get sendReport(): number {\n return this._sendReport;\n }\n\n public set sendReport(sendReport: number) {\n this._sendReport = sendReport;\n }\n\n public get builderType(): BuilderType {\n return this._builderType;\n }\n\n public set builderType(builderType: BuilderType) {\n this._builderType = builderType;\n }\n\n public get loomLayoutZones(): JacquardMachineLoomLayoutZone[] {\n return this._loomLayoutZones;\n }\n\n public set loomLayoutZones(loomLayoutZones: JacquardMachineLoomLayoutZone[]) {\n this._loomLayoutZones = loomLayoutZones;\n }\n\n public get groundYarnsPerDent(): number {\n return this._groundYarnsPerDent;\n }\n\n public set groundYarnsPerDent(groundYarnsPerDent: number) {\n this._groundYarnsPerDent = groundYarnsPerDent;\n }\n\n public get drawingIn(): VelvetMachineDrawingIn[] {\n return this._drawingIn;\n }\n\n public set drawingIn(drawingIn: VelvetMachineDrawingIn[]) {\n this._drawingIn = drawingIn;\n }\n\n public toJSON(): JSON {\n const velvetMachineJSON = super.toJSON();\n\n velvetMachineJSON['jacquardType'] = this.jacquardType;\n velvetMachineJSON['manufacturerId'] = this.manufacturer?.id;\n velvetMachineJSON['minNumberOfPicks'] = this.minNumberOfPicks;\n velvetMachineJSON['numberOfCreelPositions'] = this.numberOfCreelPositions;\n velvetMachineJSON['pickDensityInSchedule'] = this.pickDensityInSchedule;\n velvetMachineJSON['possibleCreelIds'] = this.possibleCreels?.map((possibleCreel: OverviewListCreel) => possibleCreel.id) ?? [];\n velvetMachineJSON['possibleMachineQualityIds'] = this.possibleQualities?.map((possibleQuality: OverviewListMachineQuality) => possibleQuality.id) ?? [];\n velvetMachineJSON['dentsForFabric'] = this.dentsForFabric;\n velvetMachineJSON['sendReport'] = this.sendReport;\n velvetMachineJSON['machineGroupId'] = this.machineGroup?.id;\n velvetMachineJSON['machineGroup'] = this.machineGroup?.toJSON();\n velvetMachineJSON['remoteMachine'] = this.remote;\n velvetMachineJSON['builderType'] = BuilderType[this.builderType];\n velvetMachineJSON['loomLayoutZones'] = this._loomLayoutZones.map((loomLayoutZone: JacquardMachineLoomLayoutZone) => loomLayoutZone.toJSON());\n velvetMachineJSON['groundYarnsPerDent'] = this._groundYarnsPerDent;\n velvetMachineJSON['drawingIn'] = this._drawingIn.map((drawingIn: VelvetMachineDrawingIn) => drawingIn.toJSON());\n\n return velvetMachineJSON;\n }\n}\n","import {BaseMachineType} from '@domain/machine/base-machine-type';\nimport {EquipmentManufacturer} from './equipment-manufacturer';\nimport {Technology} from './technology';\n\nexport class WeavingMachineType extends BaseMachineType {\n private _width: number;\n private _technology: Technology;\n\n public constructor(id: number, name: string, width: number, manufacturer: EquipmentManufacturer, model: string, technology: Technology) {\n super(id, name, manufacturer, model);\n this._width = width;\n this._technology = technology;\n }\n\n public static fromJSON(weavingMachineTypeJSON: any): WeavingMachineType {\n return new WeavingMachineType(\n weavingMachineTypeJSON.id,\n weavingMachineTypeJSON.name,\n weavingMachineTypeJSON.widthInCm,\n new EquipmentManufacturer(weavingMachineTypeJSON.manufacturerId, weavingMachineTypeJSON.manufacturerName, []),\n weavingMachineTypeJSON.model,\n new Technology(weavingMachineTypeJSON.technologyId, weavingMachineTypeJSON.technologyName)\n );\n }\n\n public toJSON(): JSON {\n const machineTypeJSON = super.toJSON();\n machineTypeJSON['widthInCm'] = this.width;\n machineTypeJSON['technologyId'] = this.technology?.id;\n return machineTypeJSON;\n }\n\n public get width(): number {\n return this._width;\n }\n\n public set width(width: number) {\n this._width = width;\n }\n\n public get technology(): Technology {\n return this._technology;\n }\n\n public set technology(technology: Technology) {\n this._technology = technology;\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineGroup} from './machine-group';\nimport {MachineType} from './machine-type.enum';\nimport {WeavingMachineType} from './weaving-machine-type';\n\nexport class WeavingMachine extends Equipment {\n private _machineGroup: MachineGroup;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _numberOfFeeders: number;\n private _numberOfShafts: number;\n private _weavingMachineType: WeavingMachineType;\n\n public constructor(\n id: number,\n name: string,\n orderId: string,\n machineGroup: MachineGroup,\n standardSpeed: number,\n standardEfficiency: number,\n numberOfFeeders: number,\n numberOfShafts: number,\n weavingMachineType: WeavingMachineType\n ) {\n super(id, MachineType.WEAVING_MACHINE, name, orderId);\n this._machineGroup = machineGroup;\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._numberOfFeeders = numberOfFeeders;\n this._numberOfShafts = numberOfShafts;\n this._weavingMachineType = weavingMachineType;\n }\n\n public static fromJSON(weavingMachineJSON: any): WeavingMachine {\n return new WeavingMachine(\n weavingMachineJSON.id,\n weavingMachineJSON.name,\n weavingMachineJSON.orderId,\n MachineGroup.fromJSON(weavingMachineJSON.machineGroup),\n weavingMachineJSON.standardSpeed,\n weavingMachineJSON.standardEfficiency,\n weavingMachineJSON.numberOfFeeders,\n weavingMachineJSON.numberOfShafts,\n weavingMachineJSON.weavingMachineType === undefined ? null : WeavingMachineType.fromJSON(weavingMachineJSON.weavingMachineType)\n );\n }\n\n public toJSON(): JSON {\n const weavingMachineJSON = super.toJSON();\n weavingMachineJSON['standardSpeed'] = this.standardSpeed;\n weavingMachineJSON['standardEfficiency'] = this.standardEfficiency;\n weavingMachineJSON['numberOfFeeders'] = this.numberOfFeeders;\n weavingMachineJSON['numberOfShafts'] = this.numberOfShafts;\n weavingMachineJSON['machineGroupId'] = this.machineGroup?.id;\n weavingMachineJSON['machineGroup'] = this.machineGroup?.toJSON();\n weavingMachineJSON['weavingMachineTypeId'] = this.weavingMachineType?.id;\n\n return weavingMachineJSON;\n }\n\n public get machineGroup(): MachineGroup {\n return this._machineGroup;\n }\n\n public set machineGroup(machineGroup: MachineGroup) {\n this._machineGroup = machineGroup;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public set standardSpeed(standardSpeed: number) {\n this._standardSpeed = standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public set standardEfficiency(standardEfficiency: number) {\n this._standardEfficiency = standardEfficiency;\n }\n\n public get numberOfFeeders(): number {\n return this._numberOfFeeders;\n }\n\n public set numberOfFeeders(numberOfFeeders: number) {\n this._numberOfFeeders = numberOfFeeders;\n }\n\n public get numberOfShafts(): number {\n return this._numberOfShafts;\n }\n\n public set numberOfShafts(numberOfShafts: number) {\n this._numberOfShafts = numberOfShafts;\n }\n\n public get weavingMachineType(): WeavingMachineType {\n return this._weavingMachineType;\n }\n\n public set weavingMachineType(weavingMachineType: WeavingMachineType) {\n this._weavingMachineType = weavingMachineType;\n }\n}\n","import {BaseMachineType} from '@domain/machine/base-machine-type';\nimport {EquipmentManufacturer} from '@domain/machine/equipment-manufacturer';\n\nexport class WinderMachineType extends BaseMachineType {\n public constructor(id: number, name: string, model: string, manufacturer: EquipmentManufacturer) {\n super(id, name, manufacturer, model);\n }\n\n public static fromJSON(winderMachineTypeJSON: any): WinderMachineType {\n return new WinderMachineType(\n winderMachineTypeJSON.id,\n winderMachineTypeJSON.name,\n winderMachineTypeJSON.model,\n new EquipmentManufacturer(winderMachineTypeJSON.manufacturerId, winderMachineTypeJSON.manufacturerName)\n );\n }\n}\n","import {Equipment} from '@domain/machine/equipment';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {WinderMachineType} from '@domain/machine/winder-machine-type';\n\nexport class WinderMachine extends Equipment {\n private readonly _maxNumberOfSpindles: number;\n private readonly _winderMachineType: WinderMachineType;\n\n public constructor(id: number, name: string, orderId: string, maxNumberOfSpindles: number, winderMachineType: WinderMachineType) {\n super(id, MachineType.WINDER, name, orderId);\n this._maxNumberOfSpindles = maxNumberOfSpindles;\n this._winderMachineType = winderMachineType;\n }\n\n public get maxNumberOfSpindles(): number {\n return this._maxNumberOfSpindles;\n }\n\n public get winderMachineType(): WinderMachineType {\n return this._winderMachineType;\n }\n\n public static fromJSON(winderMachineJSON: any): WinderMachine {\n return new WinderMachine(\n winderMachineJSON.id,\n winderMachineJSON.name,\n winderMachineJSON.orderId,\n winderMachineJSON.maxNumberOfSpindles,\n winderMachineJSON.winderMachineType === undefined ? null : WinderMachineType.fromJSON(winderMachineJSON.winderMachineType)\n );\n }\n\n public toJSON(): JSON {\n const winderMachineJSON = super.toJSON();\n winderMachineJSON['winderMachineTypeId'] = this.winderMachineType?.id;\n winderMachineJSON['maxNumberOfSpindles'] = this.maxNumberOfSpindles;\n\n return winderMachineJSON;\n }\n}\n","export enum CutFrom {\n NONE = 'NONE',\n LEFT = 'LEFT',\n RIGHT = 'RIGHT'\n}\n","export enum NameGeneratorSeparator {\n NO_SEPARATOR = 'NO_SEPARATOR',\n POINT = 'POINT',\n COMMA = 'COMMA',\n DASH = 'DASH',\n UNDERSCORE = 'UNDERSCORE',\n SPACE = 'SPACE',\n VERTICAL_BAR = 'VERTICAL_BAR',\n TAB = 'TAB'\n}\n","export enum NavigationState {\n CLOSED,\n OPEN\n}\n","import {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {Notification} from './notification';\n\nexport class HighestSeverityNotification {\n private readonly _equipmentId?: number;\n private readonly _groupId?: number;\n private _alertLogId: number;\n private _highestPriorityLevel: PriorityLevel;\n\n public constructor(equipmentId?: number, groupId?: number, alertLogId?: number, highestPriorityLevel?: PriorityLevel) {\n this._equipmentId = equipmentId;\n this._groupId = groupId;\n this._alertLogId = alertLogId;\n this._highestPriorityLevel = highestPriorityLevel;\n }\n\n public get equipmentId(): number {\n return this._equipmentId;\n }\n\n public get groupId(): number {\n return this._groupId;\n }\n\n public get alertLogId(): number {\n return this._alertLogId;\n }\n\n public get highestPriorityLevel(): PriorityLevel {\n return this._highestPriorityLevel;\n }\n\n public static fromJSON(notificationJSON: any): HighestSeverityNotification {\n return new HighestSeverityNotification(notificationJSON.equipmentId, notificationJSON.groupId, notificationJSON.alertLogId, PriorityLevel[notificationJSON.highestPriorityLevel]);\n }\n\n public updateWithNotification(notification: Notification): void {\n if (this.getPriorityLevelSeveritiy(notification.priority) > this.getPriorityLevelSeveritiy(this.highestPriorityLevel)) {\n this._alertLogId = notification.id;\n this._highestPriorityLevel = notification.priority;\n }\n }\n\n public getCurrentPriorityLevelSeveritiy(): number {\n return this.getPriorityLevelSeveritiy(this.highestPriorityLevel);\n }\n\n private getPriorityLevelSeveritiy(prioritylevel: PriorityLevel): number {\n switch (prioritylevel) {\n case PriorityLevel.CRITICAL:\n return 3;\n case PriorityLevel.ALARM:\n return 2;\n case PriorityLevel.WARNING:\n return 1;\n case PriorityLevel.INFORMATION:\n return 0;\n }\n }\n}\n","import {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {IdName} from '@domain/id-name';\n\nexport class Notification {\n private readonly _id: number;\n private readonly _equipment: IdName;\n private readonly _equipmentGroup: IdName;\n private readonly _message: string;\n private readonly _description: string;\n private readonly _priority: PriorityLevel;\n private readonly _timestamp: string;\n private _read: boolean;\n\n public constructor(id: number, equipment: IdName, message: string, priority: PriorityLevel, timestamp: string, read: boolean, description: string) {\n this._id = id;\n this._equipment = equipment;\n this._message = message;\n this._priority = priority;\n this._timestamp = timestamp;\n this._read = read;\n this._description = description;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get equipment(): IdName {\n return this._equipment;\n }\n\n public get message(): string {\n return this._message;\n }\n\n public get priority(): PriorityLevel {\n return this._priority;\n }\n\n public get timestamp(): string {\n return this._timestamp;\n }\n\n public get read(): boolean {\n return this._read;\n }\n\n public set read(read: boolean) {\n this._read = read;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public static fromJSON(notificationJSON: any): Notification {\n return new Notification(\n notificationJSON.id,\n notificationJSON.equipment,\n notificationJSON.message,\n PriorityLevel[notificationJSON.priority as string],\n notificationJSON.timestamp,\n notificationJSON.read,\n notificationJSON.description\n );\n }\n\n public static compare(notificationA: Notification, notificationB: Notification): number {\n return new Date(notificationB.timestamp).getTime() - new Date(notificationA.timestamp).getTime();\n }\n}\n","export enum OrderLinesTarget {\n ORDER_BOOK = 'order-book',\n PRODUCTION_SCHEDULE = 'production-schedule'\n}\n","export class OrderLineAdditionalInfo {\n private _key: string;\n private _value: string;\n\n public constructor(key: string, value: string) {\n this._key = key;\n this._value = value;\n }\n\n public get key(): string {\n return this._key;\n }\n\n public get value(): string {\n return this._value;\n }\n}\n","import {replace, toLower} from 'lodash-es';\n\nexport enum OrderLineStatus {\n TO_PLAN = 'TO_PLAN',\n PLANNED = 'PLANNED',\n PRODUCED = 'PRODUCED',\n PARTIALLY_PLANNED = 'PARTIALLY_PLANNED'\n}\n\nexport namespace OrderLineStatus {\n export function getOrderLineStatusClass(orderLineStatus: OrderLineStatus): string {\n return replace(toLower(`${OrderLineStatus[orderLineStatus]}`), '_', '-');\n }\n}\n","import {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\n\nexport class ColoredYarnSetForArticle {\n private _id: number;\n private _name: string;\n private _colorSet: ColorSet;\n\n public constructor(id: number, name: string, colorSet: ColorSet) {\n this._id = id;\n this._name = name;\n this._colorSet = colorSet;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get colorSet(): ColorSet {\n return this._colorSet;\n }\n\n public static fromJSON(coloredYarnSetForArticleJSON: any): ColoredYarnSetForArticle {\n return new ColoredYarnSetForArticle(coloredYarnSetForArticleJSON.id, coloredYarnSetForArticleJSON.name, coloredYarnSetForArticleJSON.colorSet ?? null);\n }\n\n public static fromOverviewListColoredYarnSet(overviewListColoredYarnSet: OverviewListColoredYarnSet): ColoredYarnSetForArticle {\n return new ColoredYarnSetForArticle(overviewListColoredYarnSet.id, overviewListColoredYarnSet.name, null);\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {TechnicalDimensions} from '@domain/technical-dimensions';\nimport {isNil} from 'lodash-es';\n\nexport class DesignForOrderLine {\n private _id: number;\n private _image: DrawingImage;\n private _name: string;\n private _shape: string;\n private _commercialDimensions: CommercialDimensions;\n private _technicalDimensions: TechnicalDimensions;\n private _dimensionsInPixels: DimensionsInPx;\n\n public constructor(\n id: number,\n image: DrawingImage,\n name: string,\n shape: string,\n commercialDimensions: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n dimensionsInPixels: DimensionsInPx\n ) {\n this._id = id;\n this._image = image;\n this._name = name;\n this._shape = shape;\n this._commercialDimensions = commercialDimensions;\n this._technicalDimensions = technicalDimensions;\n this._dimensionsInPixels = dimensionsInPixels;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get image(): DrawingImage {\n return this._image;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get shape(): string {\n return this._shape;\n }\n\n public get commercialDimensions(): CommercialDimensions {\n return this._commercialDimensions;\n }\n\n public get technicalDimensions(): TechnicalDimensions {\n return this._technicalDimensions;\n }\n\n public get dimensionsInPixels(): DimensionsInPx {\n return this._dimensionsInPixels;\n }\n\n public static fromJSON(designForOrderLineJSON: any): DesignForOrderLine {\n const image: DrawingImage = isNil(designForOrderLineJSON.image)\n ? {}\n : {\n id: designForOrderLineJSON.image.id || null,\n data: designForOrderLineJSON.image.data || null\n };\n\n return new DesignForOrderLine(\n designForOrderLineJSON.id,\n image,\n designForOrderLineJSON.name,\n designForOrderLineJSON.shape,\n designForOrderLineJSON.commercialDimensions,\n designForOrderLineJSON.technicalDimensions,\n designForOrderLineJSON.dimensionsInPx\n );\n }\n}\n","import {ColoredYarnSetForArticle} from '@domain/article/colored-yarn-set-for-article';\nimport {CreelPositionForArticle} from '@domain/article/creel-position-for-article';\nimport {FinishingForArticle} from '@domain/article/finishing-for-article';\nimport {MachineQualityForArticle} from '@domain/article/machine-quality-for-article';\nimport {DesignForOrderLine} from '@domain/orderbook/design-for-order-line';\nimport {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class ArticleForOrderLine {\n private _id: number;\n private _name: string;\n private _machineQuality: MachineQualityForArticle;\n private _design: DesignForOrderLine | Drawing;\n private _colorConfiguration: {\n coloredYarnSet: ColoredYarnSetForArticle;\n mainColor: CreelPositionForArticle;\n borderColor: CreelPositionForArticle;\n colorSet: ColorSet;\n };\n\n private _finishing: FinishingForArticle;\n private _commercialWidthInMM: number;\n private _commercialHeightInMM: number;\n\n public constructor(\n id: number,\n name: string,\n machineQuality: MachineQualityForArticle,\n design: DesignForOrderLine | Drawing,\n colorConfiguration: {\n coloredYarnSet: ColoredYarnSetForArticle;\n mainColor: CreelPositionForArticle;\n borderColor: CreelPositionForArticle;\n colorSet: ColorSet;\n },\n finishing: FinishingForArticle,\n commercialWidthInMM: number,\n commercialHeightInMM: number\n ) {\n this._id = id;\n this._name = name;\n this._machineQuality = machineQuality;\n this._design = design;\n this._colorConfiguration = colorConfiguration;\n this._finishing = finishing;\n this._commercialWidthInMM = commercialWidthInMM;\n this._commercialHeightInMM = commercialHeightInMM;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get machineQuality(): MachineQualityForArticle {\n return this._machineQuality;\n }\n\n public get design(): DesignForOrderLine | Drawing {\n return this._design;\n }\n\n public get colorConfiguration(): {coloredYarnSet: ColoredYarnSetForArticle; mainColor: CreelPositionForArticle; borderColor: CreelPositionForArticle; colorSet: ColorSet} {\n return this._colorConfiguration;\n }\n\n public get finishing(): FinishingForArticle {\n return this._finishing;\n }\n\n public get commercialWidthInMM(): number {\n return this._commercialWidthInMM;\n }\n\n public get commercialHeightInMM(): number {\n return this._commercialHeightInMM;\n }\n\n public static fromJSON(articleForOrderLineJSON: any, isTargetOrderBook: boolean): ArticleForOrderLine {\n return new ArticleForOrderLine(\n articleForOrderLineJSON.id,\n articleForOrderLineJSON.name,\n MachineQualityForArticle.fromJSON(articleForOrderLineJSON.machineQuality),\n isTargetOrderBook ? DesignForOrderLine.fromJSON(articleForOrderLineJSON.design) : BmpDrawing.fromJSON(articleForOrderLineJSON.design),\n {\n coloredYarnSet: !AssertionUtils.isNullOrUndefined(articleForOrderLineJSON.coloredYarnSet) ? ColoredYarnSetForArticle.fromJSON(articleForOrderLineJSON.coloredYarnSet) : null,\n mainColor: !AssertionUtils.isNullOrUndefined(articleForOrderLineJSON.mainColor) ? CreelPositionForArticle.fromJSON(articleForOrderLineJSON.mainColor) : null,\n borderColor: !AssertionUtils.isNullOrUndefined(articleForOrderLineJSON.borderColor) ? CreelPositionForArticle.fromJSON(articleForOrderLineJSON.borderColor) : null,\n colorSet: !AssertionUtils.isNullOrUndefined(articleForOrderLineJSON.colorSet) ? ColorSet.fromJSON(articleForOrderLineJSON.colorSet) : null\n },\n !AssertionUtils.isNullOrUndefined(articleForOrderLineJSON.finishing) ? FinishingForArticle.fromJSON(articleForOrderLineJSON.finishing) : null,\n articleForOrderLineJSON.commercialWidthInMM,\n articleForOrderLineJSON.commercialHeightInMM\n );\n }\n}\n","export class ProductionScheduleForOrderLine {\n private _id: string | number;\n private _name: string;\n private _amountOfItems: number;\n\n public constructor(id: string | number, name: string, amountOfItems: number) {\n this._id = id;\n this._name = name;\n this._amountOfItems = amountOfItems;\n }\n\n public get id(): string | number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get amountOfItems(): number {\n return this._amountOfItems;\n }\n\n public static fromJSON(productionScheduleForOrderLineJSON: any): ProductionScheduleForOrderLine {\n return new ProductionScheduleForOrderLine(productionScheduleForOrderLineJSON.id, productionScheduleForOrderLineJSON.name, productionScheduleForOrderLineJSON.amount);\n }\n}\n","import {ArticleForOrderLine} from '@domain/orderbook/article-for-order-line';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {moment, Priority} from '@vdw/angular-component-library';\nimport {isEmpty, map} from 'lodash-es';\nimport {OrderLineAdditionalInfo} from './order-line-additional-info';\nimport {ProductionScheduleForOrderLine} from './production-schedule-for-order-line';\n\nexport class OrderLine {\n private _id: number;\n private _salesOrderLineReference: string;\n private _salesOrderReference: string;\n private _customerReference: string;\n private _priority: Priority;\n private _status: OrderLineStatus;\n private _commercialLengthInMM: number;\n private _amount: number;\n private _amountProduced: number;\n private _amountPlanned: number;\n private _article: ArticleForOrderLine;\n private _desiredDate: Date;\n private _productionSchedules: ProductionScheduleForOrderLine[];\n private _additionalInfo: OrderLineAdditionalInfo[];\n\n public constructor(\n id: number,\n salesOrderLineReference: string,\n salesOrderReference: string,\n customerReference: string,\n priority: Priority,\n status: OrderLineStatus,\n commercialLengthInMM: number,\n amount: number,\n amountProduced: number,\n amountPlanned: number,\n article: ArticleForOrderLine,\n desiredDate: Date,\n productionSchedules: ProductionScheduleForOrderLine[],\n additionalInfo: OrderLineAdditionalInfo[]\n ) {\n this._id = id;\n this._salesOrderLineReference = salesOrderLineReference;\n this._salesOrderReference = salesOrderReference;\n this._customerReference = customerReference;\n this._priority = priority;\n this._status = status;\n this._commercialLengthInMM = commercialLengthInMM;\n this._amount = amount;\n this._amountProduced = amountProduced;\n this._amountPlanned = amountPlanned;\n this._article = article;\n this._desiredDate = desiredDate;\n this._productionSchedules = productionSchedules;\n this._additionalInfo = additionalInfo;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get salesOrderLineReference(): string {\n return this._salesOrderLineReference;\n }\n\n public get salesOrderReference(): string {\n return this._salesOrderReference;\n }\n\n public get customerReference(): string {\n return this._customerReference;\n }\n\n public get priority(): Priority {\n return this._priority;\n }\n\n public get status(): OrderLineStatus {\n return this._status;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public get amountProduced(): number {\n return this._amountProduced;\n }\n\n public get amountPlanned(): number {\n return this._amountPlanned;\n }\n\n public get article(): ArticleForOrderLine {\n return this._article;\n }\n\n public get desiredDate(): Date {\n return this._desiredDate;\n }\n\n public get productionSchedules(): ProductionScheduleForOrderLine[] {\n return this._productionSchedules;\n }\n\n public get additionalInfo(): OrderLineAdditionalInfo[] {\n return this._additionalInfo;\n }\n\n public static createEmptyOrderLine(): OrderLine {\n return new OrderLine(null, null, null, null, null, null, null, null, null, null, null, null, [], []);\n }\n\n public static fromJSON(orderLineJSON: any, isTargetOrderBook: boolean): OrderLine {\n return new OrderLine(\n orderLineJSON.id,\n orderLineJSON.salesOrderLineReference,\n orderLineJSON.salesOrderReference,\n orderLineJSON.customerReference,\n orderLineJSON.priority,\n OrderLineStatus[`${orderLineJSON.status}`],\n orderLineJSON.commercialLengthInMM,\n orderLineJSON.amount,\n orderLineJSON.amountProduced,\n orderLineJSON.amountPlanned,\n ArticleForOrderLine.fromJSON(orderLineJSON.article, isTargetOrderBook),\n moment(orderLineJSON.desiredDate).add(new Date().getTimezoneOffset(), 'minutes').toDate(),\n !isEmpty(orderLineJSON.productionSchedules) ? map(orderLineJSON.productionSchedules, ProductionScheduleForOrderLine.fromJSON) : [],\n Object.keys(orderLineJSON).reduce((additionalInfo: OrderLineAdditionalInfo[], key: string) => {\n if (key.startsWith('additionalInfo')) {\n additionalInfo.push(new OrderLineAdditionalInfo(key, orderLineJSON[key]));\n }\n return additionalInfo;\n }, [])\n );\n }\n\n public hasProductionSchedules(): boolean {\n return !isEmpty(this._productionSchedules);\n }\n}\n","export class PathLayoutTemplatePath {\n private _widthInMM: number;\n private _position: number;\n\n public constructor(widthInMM: number, position: number) {\n this._widthInMM = widthInMM;\n this._position = position;\n }\n\n public get widthInMM(): number {\n return this._widthInMM;\n }\n\n public set widthInMM(value: number) {\n this._widthInMM = value;\n }\n\n public get position(): number {\n return this._position;\n }\n\n public set position(value: number) {\n this._position = value;\n }\n\n public toJSON(): JSON {\n return {\n widthInMM: this._widthInMM,\n position: this._position\n } as any as JSON;\n }\n\n public static fromJSON(pathLayoutTemplatePathJSON: any): PathLayoutTemplatePath {\n return new PathLayoutTemplatePath(pathLayoutTemplatePathJSON.widthInMM, pathLayoutTemplatePathJSON.position);\n }\n}\n","import {PathLayoutTemplatePath} from './path-layout-template-path';\n\nexport class PathLayoutTemplate {\n private _id: number;\n private _name: string;\n private _loomGroup: string;\n private _pathLayoutTemplatePaths: PathLayoutTemplatePath[];\n\n public constructor(id: number, name: string, loomGroup: string, pathLayoutTemplatePaths: PathLayoutTemplatePath[]) {\n this._id = id;\n this._name = name;\n this._loomGroup = loomGroup;\n this._pathLayoutTemplatePaths = pathLayoutTemplatePaths;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get loomGroup(): string {\n return this._loomGroup;\n }\n\n public set loomGroup(value: string) {\n this._loomGroup = value;\n }\n\n public get pathLayoutTemplatePaths(): PathLayoutTemplatePath[] {\n return this._pathLayoutTemplatePaths;\n }\n\n public set pathLayoutTemplatePaths(value: PathLayoutTemplatePath[]) {\n this._pathLayoutTemplatePaths = value;\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n loomType: this._loomGroup,\n pathLayoutTemplatePaths: this._pathLayoutTemplatePaths.map((pathLayoutTemplatePath: PathLayoutTemplatePath) => pathLayoutTemplatePath.toJSON())\n } as any as JSON;\n }\n\n public static fromJSON(pathLayoutTemplateJSON: any): PathLayoutTemplate {\n return new PathLayoutTemplate(\n pathLayoutTemplateJSON.id,\n pathLayoutTemplateJSON.name,\n pathLayoutTemplateJSON.loomType,\n pathLayoutTemplateJSON.pathLayoutTemplatePaths?.map((pathLayoutTemplatePath: any) => PathLayoutTemplatePath.fromJSON(pathLayoutTemplatePath))\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n}\n","export enum PatternVisualisationType {\n COLOR = 'COLOR',\n IMAGE = 'IMAGE',\n PATTERN = 'PATTERN',\n DRAWING = 'DRAWING',\n MANCHON = 'MANCHON'\n}\n","import {ColorPatternVisualisation} from '@domain/color-pattern-visualisation';\nimport {DrawingPatternVisualisation} from '@domain/drawing-pattern-visualisation';\nimport {ImagePatternVisualisation} from '@domain/image-pattern-visualisation';\nimport {SvgManchonVisualisation} from '@domain/svg-manchon-visualisation';\nimport {SvgPatternVisualisation} from '@domain/svg-pattern-visualisation';\nimport {ColorRGBRepresentation} from '@vdw/angular-component-library';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport abstract class PatternVisualisation {\n private _type: PatternVisualisationType;\n\n protected constructor(type: PatternVisualisationType) {\n this._type = type;\n }\n\n public get type(): PatternVisualisationType {\n return this._type;\n }\n\n public hasVisualisationData(): boolean {\n return !!PatternVisualisation.getVisualisationRepresentation(this);\n }\n\n public isWeavePatternVisualisation(): boolean {\n return this.type === PatternVisualisationType.COLOR || this.type === PatternVisualisationType.PATTERN || this.type === PatternVisualisationType.MANCHON;\n }\n\n private static getVisualisationRepresentation(patternVisualisation: PatternVisualisation): ColorRGBRepresentation | string {\n if (patternVisualisation.type === PatternVisualisationType.COLOR) {\n return (patternVisualisation as ColorPatternVisualisation).rgb;\n } else if (patternVisualisation.type === PatternVisualisationType.DRAWING) {\n return (patternVisualisation as DrawingPatternVisualisation).image;\n } else if (patternVisualisation.type === PatternVisualisationType.IMAGE) {\n return (patternVisualisation as ImagePatternVisualisation).image;\n } else if (patternVisualisation.type === PatternVisualisationType.PATTERN) {\n return (patternVisualisation as SvgPatternVisualisation).svg;\n } else if (patternVisualisation.type === PatternVisualisationType.MANCHON) {\n return (patternVisualisation as SvgManchonVisualisation).svg;\n } else {\n throw new Error('Pattern visualisation type not recognized');\n }\n }\n\n public abstract toJSON(): JSON;\n}\n","import {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport class ImagePatternVisualisation extends PatternVisualisation {\n private _image: string;\n\n public constructor(image: string) {\n super(PatternVisualisationType.IMAGE);\n\n this._image = image;\n }\n\n public get image(): string {\n return this._image;\n }\n\n public static fromJSON(patternVisualisationJSON: any): ImagePatternVisualisation {\n return new ImagePatternVisualisation(patternVisualisationJSON.pattern);\n }\n\n public toJSON(): JSON {\n return {\n pattern: this._image,\n patternType: PatternVisualisationType[this.type]\n } as any as JSON;\n }\n}\n","import {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport class SvgManchonVisualisation extends PatternVisualisation {\n private _svg: string;\n\n public constructor(svg: string) {\n super(PatternVisualisationType.MANCHON);\n\n this._svg = svg;\n }\n\n public get svg(): string {\n return this._svg;\n }\n\n public static fromJSON(manchonVisualisationJSON: any): SvgManchonVisualisation {\n return new SvgManchonVisualisation(manchonVisualisationJSON.pattern);\n }\n\n public toJSON(): JSON {\n return {\n pattern: this._svg,\n patternType: PatternVisualisationType[this.type]\n } as any as JSON;\n }\n}\n","import {AssertionUtils, StringUtils} from '@vdw/angular-component-library';\nimport {ColorPatternVisualisation} from './color-pattern-visualisation';\nimport {DrawingPatternVisualisation} from './drawing-pattern-visualisation';\nimport {ImagePatternVisualisation} from './image-pattern-visualisation';\nimport {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\nimport {SvgManchonVisualisation} from './svg-manchon-visualisation';\nimport {SvgPatternVisualisation} from './svg-pattern-visualisation';\n\nexport class Pattern {\n private readonly _id: number;\n private _name: string;\n private _visualisations: PatternVisualisation[];\n private readonly _type: string;\n private readonly _comment: string;\n private readonly _heightInPixels: number;\n private readonly _widthInPixels: number;\n private readonly _sizeInBytes: number;\n private readonly _dateCreated: Date;\n private readonly _xSizeInDents: number;\n private readonly _xSizeInFrames: number;\n private readonly _ySizeInColorlines: number;\n private readonly _ySizeInPicks: number;\n private readonly _weavingChores: number[];\n\n public constructor(\n id: number,\n name: string,\n visualisations: PatternVisualisation[],\n type?: string,\n comment?: string,\n heightInPixels?: number,\n widthInPixels?: number,\n sizeInBytes?: number,\n dateCreated?: Date,\n xSizeInDents?: number,\n xSizeInFrames?: number,\n ySizeInColorlines?: number,\n ySizeInPicks?: number,\n weavingChores?: number[]\n ) {\n this._id = id;\n this._name = name;\n this._visualisations = visualisations;\n this._type = type;\n this._comment = comment;\n this._heightInPixels = heightInPixels;\n this._widthInPixels = widthInPixels;\n this._sizeInBytes = sizeInBytes;\n this._dateCreated = dateCreated;\n this._xSizeInDents = xSizeInDents;\n this._xSizeInFrames = xSizeInFrames;\n this._ySizeInColorlines = ySizeInColorlines;\n this._ySizeInPicks = ySizeInPicks;\n this._weavingChores = weavingChores;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get visualisations(): PatternVisualisation[] {\n return this._visualisations;\n }\n\n public set visualisations(visualisations: PatternVisualisation[]) {\n this._visualisations = visualisations;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public get heightInPixels(): number {\n return this._heightInPixels;\n }\n\n public get widthInPixels(): number {\n return this._widthInPixels;\n }\n\n public get sizeInBytes(): number {\n return this._sizeInBytes;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public get xSizeInDents(): number {\n return this._xSizeInDents;\n }\n\n public get xSizeInFrames(): number {\n return this._xSizeInFrames;\n }\n\n public get ySizeInColorlines(): number {\n return this._ySizeInColorlines;\n }\n\n public get ySizeInPicks(): number {\n return this._ySizeInPicks;\n }\n\n public get weavingChores(): number[] {\n return this._weavingChores;\n }\n\n public clearName(): void {\n this._name = null;\n }\n\n public static fromJSON(patternJSON: any): Pattern {\n if (AssertionUtils.isNullOrUndefined(patternJSON)) {\n return null;\n }\n return new Pattern(\n patternJSON.id,\n patternJSON.name,\n patternJSON.patternVisualisations?.map((patternVisualisationJSON: any) => {\n return Pattern.fromPatternVisualisationJSON(patternVisualisationJSON);\n }) ?? [],\n patternJSON.weavePatternType,\n patternJSON.comment ?? undefined,\n patternJSON.heightInPixels ?? undefined,\n patternJSON.widthInPixels ?? undefined,\n patternJSON.sizeInBytes ?? undefined,\n StringUtils.toDate(patternJSON.dateCreated),\n patternJSON.xSizeInDents ?? undefined,\n patternJSON.xSizeInFrames ?? undefined,\n patternJSON.ySizeInColorlines ?? undefined,\n patternJSON.ySizeInPicks ?? undefined,\n patternJSON.weavingChores ?? undefined\n );\n }\n\n public static fromPatternVisualisationJSON(patternVisualisationJSON: any): PatternVisualisation {\n if (PatternVisualisationType[patternVisualisationJSON?.patternType as string] === PatternVisualisationType.COLOR) {\n return ColorPatternVisualisation.fromJSON(patternVisualisationJSON);\n } else if (PatternVisualisationType[patternVisualisationJSON?.patternType as string] === PatternVisualisationType.IMAGE) {\n return ImagePatternVisualisation.fromJSON(patternVisualisationJSON);\n } else if (PatternVisualisationType[patternVisualisationJSON?.patternType as string] === PatternVisualisationType.PATTERN) {\n return SvgPatternVisualisation.fromJSON(patternVisualisationJSON);\n } else if (PatternVisualisationType[patternVisualisationJSON?.patternType as string] === PatternVisualisationType.DRAWING) {\n return DrawingPatternVisualisation.fromJSON(patternVisualisationJSON);\n } else if (PatternVisualisationType[patternVisualisationJSON?.patternType as string] === PatternVisualisationType.MANCHON) {\n return SvgManchonVisualisation.fromJSON(patternVisualisationJSON);\n }\n }\n\n public static fromFoldingTypeJSON(foldingTypeJSON: any): Pattern {\n let result: Pattern = null;\n\n if (!AssertionUtils.isNullOrUndefined(foldingTypeJSON)) {\n const visualisations = AssertionUtils.isNullOrUndefined(foldingTypeJSON.patternVisualisations) ? [] : [SvgPatternVisualisation.fromJSON(foldingTypeJSON.patternVisualisations[0])];\n\n result = new Pattern(foldingTypeJSON.id ?? null, foldingTypeJSON.name, visualisations, foldingTypeJSON.weavePatternType, foldingTypeJSON.comment);\n }\n\n return result;\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n patternVisualisations: this._visualisations.map((visualisation: PatternVisualisation) => visualisation?.toJSON())\n } as any as JSON;\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {FixedSchedule} from './fixed-schedule';\n\nexport class FixedSchedulePlaceholder extends PlanningItem {\n private _fixedSchedule: FixedSchedule;\n\n public constructor(itemProperties: PlanningItemProperties, fixedSchedule: FixedSchedule) {\n super(itemProperties, PlanningItemType.FIXED_SCHEDULE_PLACEHOLDER);\n this._fixedSchedule = fixedSchedule;\n }\n\n public get fixedSchedule(): FixedSchedule {\n return this._fixedSchedule;\n }\n\n public override toJSON(clearCompletedItems?: boolean): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n fixedScheduleId: this.fixedSchedule.id\n } as any as JSON;\n }\n}\n","import {ProductionOrder} from './production-order';\n\nexport class FixedSchedule {\n private _id: number;\n private _name: string;\n private _reedDensityInDentsPerMeter: number;\n private _nrDentsForFabric: number;\n private _nrSolenoidsPerPile: number;\n private _nrCreelPositions: number;\n private _productionOrder: ProductionOrder;\n\n public constructor(id: number, name: string, reedDensityInDentsPerMeter: number, nrDentsForFabric: number, nrSolenoidsPerPile: number, nrCreelPositions: number, productionOrder: ProductionOrder) {\n this._id = id;\n this._name = name;\n this._reedDensityInDentsPerMeter = reedDensityInDentsPerMeter;\n this._nrDentsForFabric = nrDentsForFabric;\n this._nrSolenoidsPerPile = nrSolenoidsPerPile;\n this._nrCreelPositions = nrCreelPositions;\n this._productionOrder = productionOrder;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get reedDensityInDentsPerMeter(): number {\n return this._reedDensityInDentsPerMeter;\n }\n\n public get nrDentsForFabric(): number {\n return this._nrDentsForFabric;\n }\n\n public get nrSolenoidsPerPile(): number {\n return this._nrSolenoidsPerPile;\n }\n\n public get nrCreelPositions(): number {\n return this._nrCreelPositions;\n }\n\n public get productionOrder(): ProductionOrder {\n return this._productionOrder;\n }\n\n public static fromJSON(json: any): FixedSchedule {\n return new FixedSchedule(\n json.id,\n json.name,\n json.reedDensityInDentsPerMeter,\n json.nrDentsForFabric,\n json.nrSolenoidsPerPile,\n json.nrCreelPositions,\n ProductionOrder.fromJSON(json.productionOrder)\n );\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {ProductionOrder} from './production-order';\n\nexport class OrderCarpet extends PlanningItem {\n private _productionOrder?: ProductionOrder;\n private _creelMappingFormula?: string;\n private _producedQuantityInPicks: number;\n private _estimatedProductionTime: string;\n\n public constructor(\n itemProperties: PlanningItemProperties,\n estimatedProductionTime: string,\n productionOrder?: ProductionOrder,\n producedQuantityInPicks: number = 0,\n creelMappingFormula: string = null,\n ...planningItems: PlanningItem[]\n ) {\n super(itemProperties, PlanningItemType.ORDER_CARPET, ...planningItems);\n this._productionOrder = productionOrder;\n this._creelMappingFormula = creelMappingFormula;\n this._producedQuantityInPicks = producedQuantityInPicks;\n this._estimatedProductionTime = estimatedProductionTime;\n }\n\n public get productionOrder(): ProductionOrder {\n return this._productionOrder;\n }\n\n public set productionOrder(value: ProductionOrder) {\n this._productionOrder = value;\n }\n\n public get creelMappingFormula(): string {\n return this._creelMappingFormula;\n }\n\n public set creelMappingFormula(value: string) {\n this._creelMappingFormula = value;\n }\n\n public get producedQuantityInPicks(): number {\n return this._producedQuantityInPicks;\n }\n\n public get estimatedProductionTime(): string {\n return this._estimatedProductionTime;\n }\n\n public set estimatedProductionTime(value: string) {\n this._estimatedProductionTime = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n productionOrderId: this.productionOrder?.id,\n creelMappingFormula: this.creelMappingFormula,\n estimatedProductionTime: this.estimatedProductionTime\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ObjectUtils} from '@vdw/angular-component-library';\n\nexport class ProductionOrder {\n private _id: number;\n private _name: string;\n private _creel: IdName;\n private _quality: IdName;\n private _status: ProductionScheduleStatus;\n private _plannedQuantityInPicks: number;\n private _dueDate?: Date;\n\n public constructor(id: number, name: string, creel: IdName, quality: IdName, status: ProductionScheduleStatus, plannedQuantityInPicks: number, dueDate?: Date) {\n this._id = id;\n this._name = name;\n this._creel = creel;\n this._quality = quality;\n this._status = status;\n this._plannedQuantityInPicks = plannedQuantityInPicks;\n this._dueDate = dueDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get creel(): IdName {\n return this._creel;\n }\n\n public get quality(): IdName {\n return this._quality;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get plannedQuantityInPicks(): number {\n return this._plannedQuantityInPicks;\n }\n\n public static fromJSON(json: any): ProductionOrder {\n return new ProductionOrder(\n json.id,\n json.name,\n IdName.fromJSON(json.creel),\n IdName.fromJSON(json.quality),\n json.status,\n json.plannedQuantityInPicks,\n ObjectUtils.parseNullable(json.dueDate, (dueDate: any) => new Date(dueDate))\n );\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\n\nexport class RunCarpet extends PlanningItem {\n private _quality?: IdName;\n private _creel?: IdName;\n private _creelMappingFormula?: string;\n\n public constructor(itemProperties: PlanningItemProperties, quality?: IdName, creel?: IdName, creelMappingFormula: string = null, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.RUN_CARPET, ...planningItems);\n this._quality = quality;\n this._creel = creel;\n this._creelMappingFormula = creelMappingFormula;\n }\n\n public get quality(): IdName {\n return this._quality;\n }\n\n public set quality(value: IdName) {\n this._quality = value;\n }\n\n public get creel(): IdName {\n return this._creel;\n }\n\n public set creel(value: IdName) {\n this._creel = value;\n }\n\n public get creelMappingFormula(): string {\n return this._creelMappingFormula;\n }\n\n public set creelMappingFormula(value: string) {\n this._creelMappingFormula = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n qualityId: this.quality?.id,\n creelId: this.creel?.id,\n creelMappingFormula: this.creelMappingFormula\n } as any as JSON;\n }\n}\n","export class PlanningFilter {\n private readonly _equipmentGroupIds: number[];\n\n public constructor(equipmentGroupIds: number[]) {\n this._equipmentGroupIds = equipmentGroupIds ?? [];\n }\n\n public get equipmentGroupIds(): number[] {\n return this._equipmentGroupIds;\n }\n\n public static fromJSON(json: any): PlanningFilter {\n return new PlanningFilter(json.equipmentGroupIds);\n }\n\n public toJSON(): any {\n return {\n equipmentGroupIds: this.equipmentGroupIds\n };\n }\n}\n","export enum MaintenanceType {\n MAINTENANCE = 'MAINTENANCE',\n CREEL_CHANGE = 'CREEL_CHANGE',\n MACHINE_UNAVAILABLE = 'MACHINE_UNAVAILABLE',\n WARP_CHANGE = 'WARP_CHANGE'\n}\n","import {MaintenanceType} from './maintenance-type';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemProperties} from './planning-item-properties';\nimport {PlanningItemType} from './planning-item-type';\n\nexport class Maintenance extends PlanningItem {\n private _maintenanceType: MaintenanceType;\n\n public constructor(itemProperties: PlanningItemProperties, maintenanceType: MaintenanceType, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.MAINTENANCE, ...planningItems);\n this._maintenanceType = maintenanceType;\n }\n\n public get maintenanceType(): MaintenanceType {\n return this._maintenanceType;\n }\n\n public set maintenanceType(value: MaintenanceType) {\n this._maintenanceType = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n maintenanceType: this.maintenanceType\n } as any as JSON;\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\n\nexport class PlanningEquipment {\n private _id: number;\n private _name: string;\n private _equipmentKind: MachineType;\n\n public constructor(id: number, name: string, equipmentKind: MachineType) {\n this._id = id;\n this._name = name;\n this._equipmentKind = equipmentKind;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get equipmentKind(): MachineType {\n return this._equipmentKind;\n }\n\n public static fromJSON(json: any): PlanningEquipment {\n return new PlanningEquipment(json.id, json.name, json.equipmentKind);\n }\n}\n","import {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {ObjectUtils, UuidUtils} from '@vdw/angular-component-library';\nimport {UUID} from 'crypto';\nimport {FixedSchedule} from './carpet/fixed-schedule';\nimport {FixedSchedulePlaceholder} from './carpet/fixed-schedule-placeholder';\nimport {OrderCarpet} from './carpet/order-carpet';\nimport {ProductionOrder} from './carpet/production-order';\nimport {RunCarpet} from './carpet/run-carpet';\nimport {GenericOrder} from './generic-order.interface';\nimport {GenericRun} from './generic-run.interface';\nimport {Maintenance} from './maintenance';\nimport {PlanningEquipment} from './planning-equipment';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemProperties} from './planning-item-properties';\nimport {PlanningItemType} from './planning-item-type';\nimport {OrderPlastic} from './plastic/order-plastic';\nimport {ProductionOrderPlastic} from './plastic/production-order-plastic';\nimport {RunPlastic} from './plastic/run-plastic';\nimport {Tool} from './plastic/tool';\nimport {FixedScheduleCompatibility} from './to-plan/fixed-schedule-compatibility';\nimport {FixedScheduleToPlan} from './to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from './to-plan/production-order-to-plan';\nimport {OrderTufting} from './tufting/order-tufting';\nimport {ProductionOrderTuft} from './tufting/production-order-tuft';\nimport {RunTufting} from './tufting/run-tufting';\nimport {TuftProduct} from './tufting/tuft-product';\nimport {OrderWeaving} from './weaving/order-weaving';\nimport {ProductionOrderWeaving} from './weaving/production-order-weaving';\nimport {RunWeaving} from './weaving/run-weaving';\nimport {WeaveProduct} from './weaving/weave-product';\n\nexport class PlanningItemFactory {\n public static fromJSON(json: any): PlanningItem {\n const commonProperties = PlanningItemFactory.parseCommonProperties(json);\n const planningItems = json.planningItems?.map(PlanningItemFactory.fromJSON) ?? [];\n const type = json.type as PlanningItemType;\n switch (type) {\n case PlanningItemType.MAINTENANCE:\n return new Maintenance(commonProperties, json.maintenanceType, ...planningItems);\n case PlanningItemType.ORDER_CARPET:\n return new OrderCarpet(\n commonProperties,\n json.estimatedProductionTime,\n ObjectUtils.parseNullable(json.productionOrder, ProductionOrder.fromJSON),\n json.producedQuantityInPicks,\n json.creelMappingFormula,\n ...planningItems\n );\n case PlanningItemType.RUN_CARPET:\n return new RunCarpet(\n commonProperties,\n ObjectUtils.parseNullable(json.quality, IdName.fromJSON),\n ObjectUtils.parseNullable(json.creel, IdName.fromJSON),\n json.creelMappingFormula,\n ...planningItems\n );\n case PlanningItemType.ORDER_WEAVING:\n return new OrderWeaving(\n commonProperties,\n json.estimatedProductionTime,\n ObjectUtils.parseNullable(json.productionOrder, ProductionOrderWeaving.fromJSON),\n json.producedQuantityInMeters,\n ...planningItems\n );\n case PlanningItemType.RUN_WEAVING:\n return new RunWeaving(commonProperties, ObjectUtils.parseNullable(json.weaveProduct, WeaveProduct.fromJSON), ...planningItems);\n case PlanningItemType.ORDER_TUFTING:\n return new OrderTufting(\n commonProperties,\n json.estimatedProductionTime,\n ObjectUtils.parseNullable(json.productionOrder, ProductionOrderTuft.fromJSON),\n json.producedQuantityInMeters,\n ...planningItems\n );\n case PlanningItemType.RUN_TUFTING:\n return new RunTufting(commonProperties, ObjectUtils.parseNullable(json.tuftProduct, TuftProduct.fromJSON), ...planningItems);\n case PlanningItemType.ORDER_PLASTIC:\n return new OrderPlastic(\n commonProperties,\n json.estimatedProductionTime,\n ObjectUtils.parseNullable(json.productionOrder, ProductionOrderPlastic.fromJSON),\n json.producedQuantity,\n ...planningItems\n );\n case PlanningItemType.RUN_PLASTIC:\n return new RunPlastic(commonProperties, ObjectUtils.parseNullable(json.tool, Tool.fromJSON), ...planningItems);\n case PlanningItemType.FIXED_SCHEDULE_PLACEHOLDER:\n return new FixedSchedulePlaceholder(commonProperties, FixedSchedule.fromJSON(json.fixedSchedule));\n default:\n return new PlanningItem(commonProperties, type);\n }\n }\n\n public static createRunForPlanningItem(item: GenericOrder | FixedSchedulePlaceholder): GenericRun {\n const commonProperties: PlanningItemProperties = {\n draftId: UuidUtils.generateV4Uuid() as UUID,\n sequenceNumber: 1\n };\n\n if (item instanceof OrderCarpet) {\n return new RunCarpet(commonProperties, item.productionOrder?.quality, item.productionOrder?.creel, item.creelMappingFormula);\n }\n\n if (item instanceof OrderWeaving) {\n return new RunWeaving(commonProperties, item.productionOrder.weaveProduct);\n }\n\n if (item instanceof OrderTufting) {\n return new RunTufting(commonProperties, item.productionOrder.tuftProduct);\n }\n\n if (item instanceof OrderPlastic) {\n return new RunPlastic(commonProperties, item.productionOrder.tool);\n }\n\n return null;\n }\n\n public static createRunForFixedSchedulePlaceholder(item: FixedSchedulePlaceholder, toPlan: FixedScheduleToPlan, machineId: number): RunCarpet {\n const commonProperties: PlanningItemProperties = {\n draftId: UuidUtils.generateV4Uuid() as UUID,\n sequenceNumber: 1\n };\n const compatibleMachine = toPlan.compatibility.find((compatibility: FixedScheduleCompatibility) => compatibility.machine.id === machineId);\n const quality = compatibleMachine.qualities[0] ?? null;\n const creel = compatibleMachine?.creels[0];\n\n if (item instanceof FixedSchedulePlaceholder) {\n return new RunCarpet(commonProperties, quality, creel);\n }\n }\n\n public static createOrderForToPlan(toPlan: ProductionOrderToPlan, machine: PlanningEquipment = null, sequenceNumber: number = 1): GenericOrder {\n const commonProperties: PlanningItemProperties = {\n draftId: UuidUtils.generateV4Uuid() as UUID,\n sequenceNumber,\n name: toPlan.productionOrder.name\n };\n const estimatedProductionTime = PlanningItemHelper.getEstimatedProductionTime(toPlan, machine);\n\n if (toPlan.productionOrder instanceof ProductionOrder) {\n return new OrderCarpet(commonProperties, estimatedProductionTime, toPlan.productionOrder, 0);\n }\n\n if (toPlan.productionOrder instanceof ProductionOrderWeaving) {\n return new OrderWeaving(commonProperties, estimatedProductionTime, toPlan.productionOrder, 0);\n }\n\n if (toPlan.productionOrder instanceof ProductionOrderTuft) {\n return new OrderTufting(commonProperties, estimatedProductionTime, toPlan.productionOrder, 0);\n }\n\n if (toPlan.productionOrder instanceof ProductionOrderPlastic) {\n return new OrderPlastic(commonProperties, estimatedProductionTime, toPlan.productionOrder, 0);\n }\n return null;\n }\n\n public static createPlaceholderForFixedSchedule(toPlan: FixedSchedule, sequenceNumber: number = 1): PlanningItem {\n const commonProperties: PlanningItemProperties = {\n draftId: UuidUtils.generateV4Uuid() as UUID,\n sequenceNumber,\n name: toPlan.name,\n minimumDuration: '05:00:00'\n };\n return new FixedSchedulePlaceholder(commonProperties, toPlan);\n }\n\n public static createRunForMachine(commonProperties: PlanningItemProperties, machine: PlanningEquipment): GenericRun {\n const carpetTypes = [MachineType.CARPET_LOOM, MachineType.CARPET_LOOM_NO_JQ, MachineType.VELVET, MachineType.VELVET_NO_JQ];\n if (carpetTypes.includes(machine.equipmentKind)) {\n return new RunCarpet(commonProperties);\n }\n\n if (machine.equipmentKind === MachineType.WEAVING_MACHINE) {\n return new RunWeaving(commonProperties, null);\n }\n\n if (machine.equipmentKind === MachineType.TUFT) {\n return new RunTufting(commonProperties, null);\n }\n\n if (machine.equipmentKind === MachineType.PLASTIC_MACHINE) {\n return new RunPlastic(commonProperties, null);\n }\n }\n\n private static parseCommonProperties(json: any): PlanningItemProperties {\n return {\n actualEndDate: ObjectUtils.parseNullable(json.actualEndDate, (date: any) => new Date(date)),\n actualStartDate: ObjectUtils.parseNullable(json.actualStartDate, (date: any) => new Date(date)),\n draftId: json.draftId,\n earliestStartDate: ObjectUtils.parseNullable(json.earliestStartDate, (date: any) => new Date(date)),\n estimatedEndDate: ObjectUtils.parseNullable(json.estimatedEndDate, (date: any) => new Date(date)),\n id: json.id,\n minimumDuration: json.minimumDuration,\n name: json.name,\n sequenceNumber: json.sequenceNumber\n };\n }\n}\n","import {UUID} from 'crypto';\n\nexport class PlanningItemForecast {\n private _draftId: UUID;\n private _estimatedStart: Date;\n private _estimatedEnd: Date;\n\n public constructor(draftId: UUID, estimatedStart: Date, estimatedEnd: Date) {\n this._draftId = draftId;\n this._estimatedStart = estimatedStart;\n this._estimatedEnd = estimatedEnd;\n }\n\n public get draftId(): UUID {\n return this._draftId;\n }\n\n public get estimatedStart(): Date {\n return this._estimatedStart;\n }\n\n public get estimatedEnd(): Date {\n return this._estimatedEnd;\n }\n\n public static fromJSON(json: any): PlanningItemForecast {\n return new PlanningItemForecast(json.draftId, new Date(json.estimatedStart), new Date(json.estimatedEnd));\n }\n}\n","export enum PlanningItemType {\n MAINTENANCE = 'MAINTENANCE',\n\n ORDER_CARPET = 'ORDER_CARPET',\n ORDER_WEAVING = 'ORDER_WEAVING',\n ORDER_TUFTING = 'ORDER_TUFTING',\n ORDER_PLASTIC = 'ORDER_PLASTIC',\n\n RUN_CARPET = 'RUN_CARPET',\n RUN_WEAVING = 'RUN_WEAVING',\n RUN_TUFTING = 'RUN_TUFTING',\n RUN_PLASTIC = 'RUN_PLASTIC',\n\n FIXED_SCHEDULE_PLACEHOLDER = 'FIXED_SCHEDULE_PLACEHOLDER'\n}\n","import {AssertionUtils} from '@vdw/angular-component-library';\nimport {UUID} from 'crypto';\nimport {PlanningItemProperties} from './planning-item-properties';\nimport {PlanningItemType} from './planning-item-type';\n\nexport class PlanningItem {\n private _id?: number;\n private _draftId: UUID;\n private _name?: string;\n private _sequenceNumber: number;\n private _minimumDuration?: string;\n private _earliestStartDate?: Date;\n private _type: PlanningItemType;\n private _planningItems: PlanningItem[];\n private _actualStartDate?: Date;\n private _actualEndDate?: Date;\n private _estimatedEndDate?: Date;\n\n public constructor(itemProperties: PlanningItemProperties, type: PlanningItemType, ...planningItems: PlanningItem[]) {\n this._draftId = itemProperties.draftId;\n this._sequenceNumber = itemProperties.sequenceNumber;\n this._type = type;\n this._planningItems = planningItems;\n this._id = itemProperties.id;\n this._name = itemProperties.name;\n this._minimumDuration = itemProperties.minimumDuration;\n this._earliestStartDate = itemProperties.earliestStartDate;\n this._actualStartDate = itemProperties.actualStartDate;\n this._estimatedEndDate = itemProperties.estimatedEndDate;\n this._actualEndDate = itemProperties.actualEndDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get draftId(): UUID {\n return this._draftId;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get sequenceNumber(): number {\n return this._sequenceNumber;\n }\n\n public set sequenceNumber(value: number) {\n this._sequenceNumber = value;\n }\n\n public get minimumDuration(): string {\n return this._minimumDuration;\n }\n\n public set minimumDuration(value: string) {\n this._minimumDuration = value;\n }\n\n public get earliestStartDate(): Date {\n return this._earliestStartDate;\n }\n\n public set earliestStartDate(value: Date) {\n this._earliestStartDate = value;\n }\n\n public get type(): PlanningItemType {\n return this._type;\n }\n\n public get planningItems(): PlanningItem[] {\n return this._planningItems;\n }\n\n public set planningItems(value: PlanningItem[]) {\n this._planningItems = value;\n }\n\n public get actualStartDate(): Date {\n return this._actualStartDate;\n }\n\n public get actualEndDate(): Date {\n return this._actualEndDate;\n }\n\n public get estimatedEndDate(): Date {\n return this._estimatedEndDate;\n }\n\n public get isActive(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.actualStartDate) && AssertionUtils.isNullOrUndefined(this.actualEndDate);\n }\n\n public get isPlanned(): boolean {\n return AssertionUtils.isNullOrUndefined(this.actualStartDate);\n }\n\n public get isCompleted(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.actualEndDate);\n }\n\n public toJSON(clearCompletedItems: boolean = false): JSON {\n const planningItems = [...(this.planningItems ?? [])].filter((item: PlanningItem) => !clearCompletedItems || !item.isCompleted);\n planningItems.sort(PlanningItem.compareBySequenceNumber);\n return {\n id: this.id,\n draftId: this.draftId,\n name: this.name,\n sequenceNumber: this.sequenceNumber,\n minimumDuration: this.minimumDuration,\n earliestStartDate: this.earliestStartDate,\n planningItems: planningItems.map((item: PlanningItem) => item.toJSON(clearCompletedItems)),\n actualStartDate: this.actualStartDate,\n actualEndDate: this.actualEndDate,\n type: this.type\n } as any as JSON;\n }\n\n public static compareBySequenceNumber(itemA: PlanningItem, itemB: PlanningItem): number {\n if (AssertionUtils.isNullOrUndefined(itemA.sequenceNumber)) {\n if (AssertionUtils.isNullOrUndefined(itemB.sequenceNumber)) {\n return itemA.actualStartDate.getTime() - itemB.actualStartDate.getTime();\n }\n return -1;\n } else if (AssertionUtils.isNullOrUndefined(itemB.sequenceNumber)) {\n return 1;\n }\n return itemA.sequenceNumber - itemB.sequenceNumber;\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {ProductionOrderPlastic} from './production-order-plastic';\n\nexport class OrderPlastic extends PlanningItem {\n private _productionOrder: ProductionOrderPlastic;\n private _producedQuantity: number;\n private _estimatedProductionTime: string;\n\n public constructor(itemProperties: PlanningItemProperties, estimatedProductionTime: string, productionOrder: ProductionOrderPlastic, producedQuantity: number = 0, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.ORDER_PLASTIC, ...planningItems);\n this._productionOrder = productionOrder;\n this._producedQuantity = producedQuantity;\n this._estimatedProductionTime = estimatedProductionTime;\n }\n\n public get productionOrder(): ProductionOrderPlastic {\n return this._productionOrder;\n }\n\n public set productionOrder(value: ProductionOrderPlastic) {\n this._productionOrder = value;\n }\n\n public get producedQuantity(): number {\n return this._producedQuantity;\n }\n\n public get estimatedProductionTime(): string {\n return this._estimatedProductionTime;\n }\n\n public set estimatedProductionTime(value: string) {\n this._estimatedProductionTime = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n productionOrderLiteId: this.productionOrder.id,\n estimatedProductionTime: this.estimatedProductionTime,\n toolId: this.productionOrder.tool?.id,\n mountTime: this.productionOrder.tool?.mountTime,\n dismountTime: this.productionOrder.tool?.dismountTime\n } as any as JSON;\n }\n}\n","import {UnitOfMeasurement} from '@domain/textile-data/plastic-product/unit-of-measurement.enum';\n\nexport class PlasticProduct {\n private _id: number;\n private _name: string;\n private _unitOfMeasurement: UnitOfMeasurement;\n\n public constructor(id: number, name: string, unitOfMeasurement: UnitOfMeasurement) {\n this._id = id;\n this._name = name;\n this._unitOfMeasurement = unitOfMeasurement;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get unitOfMeasurement(): UnitOfMeasurement {\n return this._unitOfMeasurement;\n }\n\n public static fromJSON(json: any): PlasticProduct {\n return new PlasticProduct(json.id, json.name, json.unitOfMeasurement);\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ObjectUtils} from '@vdw/angular-component-library';\nimport {PlasticProduct} from './plastic-product';\nimport {Tool} from './tool';\n\nexport class ProductionOrderPlastic {\n private _id: number;\n private _name: string;\n private _plasticProduct: PlasticProduct;\n private _status: ProductionScheduleStatus;\n private _tool?: Tool;\n private _plannedQuantity: number;\n\n private _dueDate?: Date;\n\n public constructor(id: number, name: string, plasticProduct: PlasticProduct, status: ProductionScheduleStatus, plannedQuantity: number, tool?: Tool, dueDate?: Date) {\n this._id = id;\n this._name = name;\n this._plasticProduct = plasticProduct;\n this._status = status;\n this._tool = tool;\n this._plannedQuantity = plannedQuantity;\n this._dueDate = dueDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get plasticProduct(): PlasticProduct {\n return this._plasticProduct;\n }\n\n public get tool(): Tool | null {\n return this._tool;\n }\n\n public get plannedQuantity(): number {\n return this._plannedQuantity;\n }\n\n public get dueDate(): Date | null {\n return this._dueDate;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public static fromJSON(json: any): ProductionOrderPlastic {\n return new ProductionOrderPlastic(\n json.id,\n json.name,\n ObjectUtils.parseNullable(json.plasticProduct, PlasticProduct.fromJSON),\n json.status,\n json.plannedQuantity,\n ObjectUtils.parseNullable(json.tool, Tool.fromJSON),\n ObjectUtils.parseNullable(json.dueDate, (dueDate: any) => new Date(dueDate))\n );\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {Tool} from './tool';\n\nexport class RunPlastic extends PlanningItem {\n private _tool?: Tool;\n\n public constructor(itemProperties: PlanningItemProperties, tool?: Tool, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.RUN_PLASTIC, ...planningItems);\n this._tool = tool;\n }\n\n public get tool(): Tool {\n return this._tool;\n }\n\n public set tool(tool: Tool) {\n this._tool = tool;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n toolId: this.tool?.id\n } as any as JSON;\n }\n}\n","export class Tool {\n private _id: number;\n private _name: string;\n private _mountTime: string;\n private _dismountTime: string;\n\n public constructor(id: number, name: string, mountTime: string, dismountTime: string) {\n this._id = id;\n this._name = name;\n this._mountTime = mountTime;\n this._dismountTime = dismountTime;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get mountTime(): string {\n return this._mountTime;\n }\n\n public get dismountTime(): string {\n return this._dismountTime;\n }\n\n public static fromJSON(json: any): Tool {\n return new Tool(json.id, json.name, json.mountTime, json.dismountTime);\n }\n}\n","import {PlanningEquipment} from '../planning-equipment';\n\nexport class CompatibleMachine {\n private _machine: PlanningEquipment;\n private _estimatedProductionTime: string;\n\n public constructor(machine: PlanningEquipment, estimatedProductionTime: string) {\n this._machine = machine;\n this._estimatedProductionTime = estimatedProductionTime;\n }\n\n public get machine(): PlanningEquipment {\n return this._machine;\n }\n\n public get estimatedProductionTime(): string {\n return this._estimatedProductionTime;\n }\n\n public static fromJSON(json: any): CompatibleMachine {\n return new CompatibleMachine(PlanningEquipment.fromJSON(json.machine), json.estimatedProductionTime);\n }\n}\n","import {ProductionOrder} from '../carpet/production-order';\nimport {ProductionOrderPlastic} from '../plastic/production-order-plastic';\nimport {ProductionOrderTuft} from '../tufting/production-order-tuft';\nimport {ProductionOrderWeaving} from '../weaving/production-order-weaving';\nimport {CompatibleMachine} from './compatible-machine';\nimport {GenericProductionOrder} from './generic-production-order.interface';\nimport {ProductionOrderType} from './production-order-type';\n\nexport class ProductionOrderToPlan {\n private _productionOrder: GenericProductionOrder;\n private _compatibleMachines: CompatibleMachine[];\n private _type: ProductionOrderType;\n\n public constructor(productionOrder: GenericProductionOrder, compatibleMachines: CompatibleMachine[]) {\n this._productionOrder = productionOrder;\n this._compatibleMachines = compatibleMachines;\n this._type = ProductionOrderToPlan.getType(productionOrder);\n }\n\n public get productionOrder(): GenericProductionOrder {\n return this._productionOrder;\n }\n\n public get compatibleMachines(): readonly CompatibleMachine[] {\n return this._compatibleMachines;\n }\n\n public get type(): ProductionOrderType {\n return this._type;\n }\n\n public static fromJSON(json: any): ProductionOrderToPlan {\n const type = json.type as ProductionOrderType;\n let productionOrder: GenericProductionOrder;\n\n switch (type) {\n case ProductionOrderType.CARPET:\n productionOrder = ProductionOrder.fromJSON(json.productionOrder);\n break;\n case ProductionOrderType.WEAVING:\n productionOrder = ProductionOrderWeaving.fromJSON(json.productionOrder);\n break;\n case ProductionOrderType.TUFTING:\n productionOrder = ProductionOrderTuft.fromJSON(json.productionOrder);\n break;\n case ProductionOrderType.PLASTIC:\n productionOrder = ProductionOrderPlastic.fromJSON(json.productionOrder);\n break;\n default:\n break;\n }\n\n return new ProductionOrderToPlan(productionOrder, json.compatibleMachines.map(CompatibleMachine.fromJSON));\n }\n\n public static getType(productionOrder: GenericProductionOrder): ProductionOrderType {\n if (productionOrder instanceof ProductionOrder) {\n return ProductionOrderType.CARPET;\n } else if (productionOrder instanceof ProductionOrderWeaving) {\n return ProductionOrderType.WEAVING;\n } else if (productionOrder instanceof ProductionOrderTuft) {\n return ProductionOrderType.TUFTING;\n } else if (productionOrder instanceof ProductionOrderPlastic) {\n return ProductionOrderType.PLASTIC;\n } else {\n throw new Error('Invalid production order type');\n }\n }\n}\n","export enum ProductionOrderType {\n CARPET = 'CARPET',\n WEAVING = 'WEAVING',\n TUFTING = 'TUFTING',\n PLASTIC = 'PLASTIC'\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {ProductionOrderTuft} from './production-order-tuft';\n\nexport class OrderTufting extends PlanningItem {\n private _productionOrder: ProductionOrderTuft;\n private _producedQuantityInMeters: number;\n private _estimatedProductionTime: string;\n\n public constructor(\n itemProperties: PlanningItemProperties,\n estimatedProductionTime: string,\n productionOrder: ProductionOrderTuft,\n producedQuantityInMeters: number = 0,\n ...planningItems: PlanningItem[]\n ) {\n super(itemProperties, PlanningItemType.ORDER_TUFTING, ...planningItems);\n this._productionOrder = productionOrder;\n this._producedQuantityInMeters = producedQuantityInMeters;\n this._estimatedProductionTime = estimatedProductionTime;\n }\n\n public get productionOrder(): ProductionOrderTuft {\n return this._productionOrder;\n }\n\n public set productionOrder(value: ProductionOrderTuft) {\n this._productionOrder = value;\n }\n\n public get producedQuantityInMeters(): number {\n return this._producedQuantityInMeters;\n }\n\n public get estimatedProductionTime(): string {\n return this._estimatedProductionTime;\n }\n\n public set estimatedProductionTime(value: string) {\n this._estimatedProductionTime = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n productionOrderLiteId: this.productionOrder.id,\n estimatedProductionTime: this.estimatedProductionTime\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ObjectUtils} from '@vdw/angular-component-library';\nimport {TuftProduct} from './tuft-product';\n\nexport class ProductionOrderTuft {\n private _id: number;\n private _name: string;\n private _tuftProduct: TuftProduct;\n private _status: ProductionScheduleStatus;\n private _plannedQuantityInMeters: number;\n private _dueDate?: Date;\n\n public constructor(id: number, name: string, tuftProduct: TuftProduct, status: ProductionScheduleStatus, plannedQuantityInMeters: number, dueDate?: Date) {\n this._id = id;\n this._name = name;\n this._tuftProduct = tuftProduct;\n this._status = status;\n this._plannedQuantityInMeters = plannedQuantityInMeters;\n this._dueDate = dueDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get tuftProduct(): TuftProduct {\n return this._tuftProduct;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get plannedQuantityInMeters(): number {\n return this._plannedQuantityInMeters;\n }\n\n public static fromJSON(json: any): ProductionOrderTuft {\n return new ProductionOrderTuft(\n json.id,\n json.name,\n ObjectUtils.parseNullable(json.tuftProduct, TuftProduct.fromJSON),\n json.status,\n json.plannedQuantityInMeters,\n ObjectUtils.parseNullable(json.dueDate, (dueDate: any) => new Date(dueDate))\n );\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {TuftProduct} from './tuft-product';\n\nexport class RunTufting extends PlanningItem {\n private _tuftProduct: TuftProduct;\n\n public constructor(itemProperties: PlanningItemProperties, tuftProduct: TuftProduct, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.RUN_TUFTING, ...planningItems);\n this._tuftProduct = tuftProduct;\n }\n\n public get tuftProduct(): TuftProduct {\n return this._tuftProduct;\n }\n\n public set tuftProduct(value: TuftProduct) {\n this._tuftProduct = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n tuftProductId: this.tuftProduct.id\n } as any as JSON;\n }\n}\n","import {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\n\nexport class TuftProduct {\n private _id: number;\n private _name: string;\n private _gaugeId: number;\n private _widthInCm: number;\n\n public constructor(id: number, name: string, gaugeId: number, widthInCm: number) {\n this._id = id;\n this._name = name;\n this._gaugeId = gaugeId;\n this._widthInCm = widthInCm;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get gaugeId(): number {\n return this._gaugeId;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public static fromJSON(json: any): TuftProduct {\n return new TuftProduct(json.id, json.name, json.gaugeId, json.widthInCm);\n }\n\n public static fromOverviewListTuftProduct(tuftProduct: OverviewListTuftProduct): TuftProduct {\n return new TuftProduct(tuftProduct.id, tuftProduct.name, tuftProduct.gauge.id, tuftProduct.widthInCm);\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {ProductionOrderWeaving} from './production-order-weaving';\n\nexport class OrderWeaving extends PlanningItem {\n private _productionOrder: ProductionOrderWeaving;\n private _producedQuantityInMeters: number;\n private _estimatedProductionTime: string;\n\n public constructor(\n itemProperties: PlanningItemProperties,\n estimatedProductionTime: string,\n productionOrder: ProductionOrderWeaving,\n producedQuantityInMeters: number = 0,\n ...planningItems: PlanningItem[]\n ) {\n super(itemProperties, PlanningItemType.ORDER_WEAVING, ...planningItems);\n this._productionOrder = productionOrder;\n this._producedQuantityInMeters = producedQuantityInMeters;\n this._estimatedProductionTime = estimatedProductionTime;\n }\n\n public get productionOrder(): ProductionOrderWeaving {\n return this._productionOrder;\n }\n\n public set productionOrder(value: ProductionOrderWeaving) {\n this._productionOrder = value;\n }\n\n public get producedQuantityInMeters(): number {\n return this._producedQuantityInMeters;\n }\n\n public get estimatedProductionTime(): string {\n return this._estimatedProductionTime;\n }\n\n public set estimatedProductionTime(value: string) {\n this._estimatedProductionTime = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n productionOrderLiteId: this._productionOrder.id,\n estimatedProductionTime: this.estimatedProductionTime\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ObjectUtils} from '@vdw/angular-component-library';\nimport {WeaveProduct} from './weave-product';\n\nexport class ProductionOrderWeaving {\n private _id: number;\n private _name: string;\n private _weaveProduct: WeaveProduct;\n private _status: ProductionScheduleStatus;\n private _plannedQuantityInMeters: number;\n private _dueDate?: Date;\n\n public constructor(id: number, name: string, weaveProduct: WeaveProduct, status: ProductionScheduleStatus, plannedQuantityInMeters: number, dueDate?: Date) {\n this._id = id;\n this._name = name;\n this._weaveProduct = weaveProduct;\n this._status = status;\n this._plannedQuantityInMeters = plannedQuantityInMeters;\n this._dueDate = dueDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get weaveProduct(): WeaveProduct {\n return this._weaveProduct;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get plannedQuantityInMeters(): number {\n return this._plannedQuantityInMeters;\n }\n\n public static fromJSON(json: any): ProductionOrderWeaving {\n return new ProductionOrderWeaving(\n json.id,\n json.name,\n ObjectUtils.parseNullable(json.weaveProduct, WeaveProduct.fromJSON),\n json.status,\n json.plannedQuantityInMeters,\n ObjectUtils.parseNullable(json.dueDate, (dueDate: any) => new Date(dueDate))\n );\n }\n}\n","import {PlanningItem} from '../planning-item';\nimport {PlanningItemProperties} from '../planning-item-properties';\nimport {PlanningItemType} from '../planning-item-type';\nimport {WeaveProduct} from './weave-product';\n\nexport class RunWeaving extends PlanningItem {\n private _weaveProduct: WeaveProduct;\n\n public constructor(itemProperties: PlanningItemProperties, weaveProduct: WeaveProduct, ...planningItems: PlanningItem[]) {\n super(itemProperties, PlanningItemType.RUN_WEAVING, ...planningItems);\n this._weaveProduct = weaveProduct;\n }\n\n public get weaveProduct(): WeaveProduct {\n return this._weaveProduct;\n }\n\n public set weaveProduct(value: WeaveProduct) {\n this._weaveProduct = value;\n }\n\n public override toJSON(clearCompletedItems: boolean = false): JSON {\n return {\n ...super.toJSON(clearCompletedItems),\n weaveProductId: this.weaveProduct.id\n } as any as JSON;\n }\n}\n","import {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\n\nexport class WeaveProduct {\n private _id: number;\n private _name: string;\n private _numberOfFeeders: number;\n private _numberOfShafts: number;\n private _widthInCm: number;\n\n public constructor(id: number, name: string, numberOfFeeders: number, numberOfShafts: number, widthInCm: number) {\n this._id = id;\n this._name = name;\n this._numberOfFeeders = numberOfFeeders;\n this._numberOfShafts = numberOfShafts;\n this._widthInCm = widthInCm;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get numberOfFeeders(): number {\n return this._numberOfFeeders;\n }\n\n public get numberOfShafts(): number {\n return this._numberOfShafts;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public static fromJSON(json: any): WeaveProduct {\n return new WeaveProduct(json.id, json.name, json.numberOfFeeders, json.numberOfShafts, json.widthInCm);\n }\n\n public static fromOverviewListWeaveProduct(weaveProduct: OverviewListWeaveProduct): WeaveProduct {\n return new WeaveProduct(weaveProduct.id, weaveProduct.name, weaveProduct.numberOfFeeders, weaveProduct.numberOfShafts, weaveProduct.widthInCm);\n }\n}\n","import {AssertionUtils} from '@vdw/angular-component-library';\nimport {PlanningMachineCarpetRun} from './carpet/planning-machine-carpet-run';\nimport {PlanningMachineRun} from './planning-machine-run';\nimport {PlanningMachineTuftingRun} from './tufting/planning-machine-tufting-run';\nimport {PlanningMachineWeavingRun} from './weaving/planning-machine-weaving-run';\n\nexport class PlanningMachineRunFactory {\n public static fromJSON(planningMachineRunJSON: any, timezoneCode: string): PlanningMachineRun {\n if (!AssertionUtils.isNullOrUndefined(planningMachineRunJSON.weaveProduct)) {\n return PlanningMachineWeavingRun.fromJSON(planningMachineRunJSON, timezoneCode);\n } else if (!AssertionUtils.isNullOrUndefined(planningMachineRunJSON.tuftProduct)) {\n return PlanningMachineTuftingRun.fromJSON(planningMachineRunJSON, timezoneCode);\n } else if (this.checkForInvalidProductionOrderLite(planningMachineRunJSON)) {\n return null;\n }\n\n return PlanningMachineCarpetRun.fromJSON(planningMachineRunJSON, timezoneCode);\n }\n\n private static checkForInvalidProductionOrderLite(planningMachineRunJSON: any): boolean {\n if (AssertionUtils.isNullOrUndefined(planningMachineRunJSON.planningOrders)) {\n return false;\n }\n return planningMachineRunJSON.planningOrders.some((planningOrderJson: any) => !AssertionUtils.isNullOrUndefined(planningOrderJson.productionOrderLite));\n }\n}\n","import {getTotalRunningTimeInMsForDateRange} from '@application/helper/planning/get-total-running-time-in-milliseconds-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {MachineStatus} from '@domain/machine/machine-status.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {MachineEventInfo} from '@presentation/pages/texbi/machine-event-board/machine-event-info';\nimport {RunningMachineEventInfo} from '@presentation/pages/texbi/machine-event-board/running-machine-event-info';\nimport {moment, TimezoneUtils} from '@vdw/angular-component-library';\n\nexport class MachineEvent {\n private _id: number;\n private _machineEventInfo: MachineEventInfo | RunningMachineEventInfo;\n private _status: MachineStatus;\n private _startDate: Date;\n private _endDate: Date;\n\n public constructor(id: number, machineEventInfo: MachineEventInfo | RunningMachineEventInfo, status: MachineStatus, startDate: Date, endDate: Date) {\n this._id = id;\n this._machineEventInfo = machineEventInfo;\n this._status = status;\n this._startDate = startDate;\n this._endDate = endDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get machineEventInfo(): MachineEventInfo | RunningMachineEventInfo {\n return this._machineEventInfo;\n }\n\n public get status(): MachineStatus {\n return this._status;\n }\n\n public get startDate(): Date {\n return this._startDate;\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public static fromJSON(machineEventJSON: any, subscription: Subscription): MachineEvent {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(machineEventJSON.startDate, subscription.timeZone.code);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(machineEventJSON.endDate, subscription.timeZone.code);\n\n return new MachineEvent(\n machineEventJSON.id,\n machineEventJSON.status === MachineStatus[MachineStatus.RUNNING] ? RunningMachineEventInfo.fromJSON(machineEventJSON) : MachineEventInfo.fromJSON(machineEventJSON),\n MachineStatus.getMachineStatusByLabel(machineEventJSON.status),\n startDate,\n endDate\n );\n }\n\n public replaceMachineEventInfo(machineEventInfo: MachineEventInfo | RunningMachineEventInfo): void {\n this._machineEventInfo = machineEventInfo;\n }\n\n public getTotalRunningTimeInMsForDateRange(dateRange: DateRange): number {\n return getTotalRunningTimeInMsForDateRange(this, dateRange);\n }\n\n public getDuration(): number {\n return moment.range(this.startDate, this.endDate).diff();\n }\n\n public isMachineStatusRunning(): boolean {\n return this.isSameAsCurrentMachineStatus(MachineStatus.RUNNING);\n }\n\n public isMachineStatusStoppedManual(): boolean {\n return this.isSameAsCurrentMachineStatus(MachineStatus.STOPPED_MANUAL);\n }\n\n public isMachineStatusStoppedCritical(): boolean {\n return this.isSameAsCurrentMachineStatus(MachineStatus.STOPPED_CRITICAL);\n }\n\n public hasRelevantEndTime(): boolean {\n return this.machineEventInfo instanceof MachineEventInfo || (this.machineEventInfo instanceof RunningMachineEventInfo && this.machineEventInfo.hasMachineYield());\n }\n\n private isSameAsCurrentMachineStatus(machineStatus: MachineStatus): boolean {\n return this.status === machineStatus;\n }\n}\n","import {getTotalRunningTimeInMsForDateRange} from '@application/helper/planning/get-total-running-time-in-milliseconds-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {Subscription} from '@domain/profile/subscription';\nimport {Color, moment, Pattern, TimezoneUtils} from '@vdw/angular-component-library';\n\nexport class MachineEventDeclaration {\n private _id: number;\n private _abbreviation: string;\n private _startDate: Date;\n private _endDate: Date;\n private _color: Color;\n private _pattern: Pattern;\n\n public constructor(id: number, abbreviation: string, startDate: Date, endDate: Date, color: Color, pattern: Pattern) {\n this._id = id;\n this._abbreviation = abbreviation;\n this._startDate = startDate;\n this._endDate = endDate;\n this._color = color;\n this._pattern = pattern;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get abbreviation(): string {\n return this._abbreviation;\n }\n\n public get startDate(): Date {\n return this._startDate;\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public get color(): Color {\n return this._color;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public static fromJSON(declarationJSON: any, subscription: Subscription): MachineEventDeclaration {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(declarationJSON.startDate, subscription.timeZone.code);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(declarationJSON.endDate, subscription.timeZone.code);\n\n return new MachineEventDeclaration(declarationJSON.id, declarationJSON.abbreviation, startDate, endDate, Color.fromJSON(declarationJSON.color), declarationJSON.patternId as number);\n }\n\n public getDuration(): number {\n return moment.range(this.startDate, this.endDate).diff();\n }\n\n public getTotalRunningTimeInMsForDateRange(dateRange: DateRange): number {\n return getTotalRunningTimeInMsForDateRange(this, dateRange);\n }\n}\n","import {getItemsForDateRange} from '@application/helper/planning/get-items-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {CalendarItem} from '@domain/planning/calendar-item';\nimport {Subscription} from '@domain/profile/subscription';\nimport {MachineEvent} from '@presentation/pages/texbi/machine-event-board/machine-event';\nimport {AssertionUtils, TimezoneUtils} from '@vdw/angular-component-library';\nimport {has} from 'lodash-es';\nimport {MachineEventDeclaration} from './machine-event-declaration';\n\nexport class MachineEventGroup extends CalendarItem {\n private _name: string;\n private _events: MachineEvent[];\n private _declarations: MachineEventDeclaration[];\n\n public constructor(id: number, name: string, startDate: Date, endDate: Date, events: MachineEvent[], declarations: MachineEventDeclaration[]) {\n super(id, startDate, endDate);\n\n this._name = name;\n this._events = events;\n this._declarations = declarations;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get events(): MachineEvent[] {\n return this._events;\n }\n\n public get declarations(): MachineEventDeclaration[] {\n return this._declarations;\n }\n\n public static fromJSON(machineEventGroupJSON: any, subscription: Subscription): MachineEventGroup {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(machineEventGroupJSON.startDate, subscription.timeZone.code);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(machineEventGroupJSON.endDate, subscription.timeZone.code);\n\n return new MachineEventGroup(\n machineEventGroupJSON.id,\n machineEventGroupJSON.name,\n startDate,\n endDate,\n machineEventGroupJSON.events.map((machineEventJSON: any) => MachineEvent.fromJSON(machineEventJSON, subscription)),\n machineEventGroupJSON.declarations.map((machineEventJSON: any) => MachineEventDeclaration.fromJSON(machineEventJSON, subscription))\n );\n }\n\n public static canDeSerializeJSON(calendarItemJSON: any): boolean {\n return has(calendarItemJSON, 'events') || has(calendarItemJSON, 'declarations');\n }\n\n public hasMachineEvent(id: number): boolean {\n return !AssertionUtils.isNullOrUndefined(this._events.find((event: MachineEvent) => event.id === id));\n }\n\n public getEventsForDateRange(dateRange: DateRange): MachineEvent[] {\n return getItemsForDateRange(this._events, dateRange);\n }\n\n public getDeclarationsForDateRange(dateRange: DateRange): MachineEventDeclaration[] {\n return getItemsForDateRange(this._declarations, dateRange);\n }\n}\n","import {PlanningMachineCreelChange} from '@domain/planning/carpet/planning-machine-creel-change';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningMachineMaintenance} from '@domain/planning/planning-machine-maintenance';\nimport {PlanningMachineRunFactory} from '@domain/planning/planning-machine-run-factory';\nimport {PlanningMachineUnavailability} from '@domain/planning/planning-machine-unavailability';\nimport {PlanningMachineWarpChange} from '@domain/planning/weaving/planning-machine-warp-change';\nimport {Subscription} from '@domain/profile/subscription';\nimport {MachineEventGroup} from '@presentation/pages/texbi/machine-event-board/machine-event-group';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {CalendarItem} from './calendar-item';\n\nexport class CalendarItemGroup {\n private _machineId: number;\n private _items: CalendarItem[];\n\n public constructor(machineId: number, items: CalendarItem[]) {\n this._machineId = machineId;\n this._items = items;\n }\n\n public get machineId(): number {\n return this._machineId;\n }\n\n public get items(): CalendarItem[] {\n return this._items;\n }\n\n public set items(items: CalendarItem[]) {\n this._items = items;\n }\n\n public static fromJSON(calendarItemGroupJSON: any, subscription: Subscription = null): CalendarItemGroup {\n return new CalendarItemGroup(\n calendarItemGroupJSON.machineId,\n calendarItemGroupJSON.items\n .map((itemJSON: any) => CalendarItemGroup.calendarItemFromJSON(itemJSON, subscription))\n .filter((itemGroup: CalendarItemGroup) => !AssertionUtils.isNullOrUndefined(itemGroup))\n );\n }\n\n private static calendarItemFromJSON(itemJSON: any, subscription: Subscription = null): CalendarItem {\n if (MachineEventGroup.canDeSerializeJSON(itemJSON)) {\n return MachineEventGroup.fromJSON(itemJSON, subscription);\n }\n\n const planningItems = {\n RUN: PlanningMachineRunFactory,\n CREEL_CHANGE: PlanningMachineCreelChange,\n MAINTENANCE: PlanningMachineMaintenance,\n MACHINE_UNAVAILABLE: PlanningMachineUnavailability,\n WARP_CHANGE: PlanningMachineWarpChange\n };\n return planningItems[`${itemJSON.type}`].fromJSON(itemJSON, subscription.timeZone.code);\n }\n\n private static calendarItemToJSON(item: CalendarItem, subscription: Subscription = null): CalendarItem {\n return (item as PlanningItem).toJSON(AssertionUtils.isNullOrUndefined(subscription) ? null : subscription.timeZone.code);\n }\n\n public toJSON(subscription: Subscription = null): JSON {\n return {\n machineId: this.machineId,\n items: this.items.map((item: CalendarItem) => CalendarItemGroup.calendarItemToJSON(item, subscription))\n } as any as JSON;\n }\n}\n","import {getTotalRunningTimeInMsForDateRange} from '@application/helper/planning/get-total-running-time-in-milliseconds-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {UuidUtils} from '@vdw/angular-component-library';\n\nexport abstract class CalendarItem {\n protected _id: number;\n protected _startDate: Date;\n protected _endDate: Date;\n protected _uuid: string;\n\n public constructor(id: number, startDate: Date, endDate: Date) {\n this._id = id;\n this._startDate = startDate;\n this._endDate = endDate;\n\n this.updateUuid();\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get startDate(): Date {\n return this._startDate;\n }\n\n public set startDate(startDate: Date) {\n this._startDate = startDate;\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public set endDate(endDate: Date) {\n this._endDate = endDate;\n }\n\n public get uuid(): string {\n return this._uuid;\n }\n\n public getTotalRunningTimeInMsForDateRange(dateRange: DateRange): number {\n return getTotalRunningTimeInMsForDateRange(this, dateRange);\n }\n\n protected updateUuid(): void {\n this._uuid = UuidUtils.generateV4Uuid();\n }\n}\n","import {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class PlanningCreel {\n private _id: number;\n private _name: string;\n private _mappingForCurrentPositionOnMachine: CreelMap[];\n\n public constructor(id: number, name: string, mappingForCurrentPositionOnMachine: CreelMap[] = null) {\n this._id = id;\n this._name = name;\n this._mappingForCurrentPositionOnMachine = mappingForCurrentPositionOnMachine;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get mappingForCurrentPositionOnMachine(): CreelMap[] {\n return this._mappingForCurrentPositionOnMachine;\n }\n\n public static fromJSON(creelJSON: any): PlanningCreel {\n return AssertionUtils.isNullOrUndefined(creelJSON) ? null : new PlanningCreel(creelJSON.id, creelJSON.name, creelJSON.mappingForCurrentPositionOnMachine);\n }\n\n public static fromOverviewListCreel(overviewListCreel: OverviewListCreel): PlanningCreel {\n return new PlanningCreel(overviewListCreel.id, overviewListCreel.name, overviewListCreel.mappingForCurrentPositionOnMachine);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n mappingForCurrentPositionOnMachine: this._mappingForCurrentPositionOnMachine\n } as any as JSON;\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {isEqual, isNil, map} from 'lodash-es';\nimport {PlanningMachineRun} from '../planning-machine-run';\nimport {PlanningOrder} from '../planning-order';\nimport {PlanningCreel} from './planning-creel';\nimport {PlanningMachineQuality} from './planning-machine-quality';\n\nexport class PlanningMachineCarpetRun extends PlanningMachineRun {\n private _machineQuality: PlanningMachineQuality;\n private _creel: PlanningCreel;\n\n public constructor(id: number, machineQuality: PlanningMachineQuality, creel: PlanningCreel, planningOrders: PlanningOrder[], startDate: Date, endDate: Date, compatibleWithMachine: boolean) {\n super(id, planningOrders, startDate, endDate, compatibleWithMachine);\n\n this._machineQuality = machineQuality;\n this._creel = creel;\n }\n\n public static fromJSON(planningMachineRunJSON: any, timezoneCode: string): PlanningMachineCarpetRun {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.endDate, timezoneCode);\n\n const planningOrders = map(planningMachineRunJSON.planningOrders, (planningOrderJSON: any) => {\n return PlanningOrder.fromCarpetJSON(planningOrderJSON, timezoneCode);\n });\n\n return new PlanningMachineCarpetRun(\n planningMachineRunJSON.id,\n PlanningMachineQuality.fromJSON(planningMachineRunJSON.machineQuality),\n PlanningCreel.fromJSON(planningMachineRunJSON.creel),\n planningOrders,\n startDate,\n endDate,\n planningMachineRunJSON.compatibleWithMachine\n );\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n ...super.toJSON(timezoneCode),\n machineQuality: !isNil(this._machineQuality) ? this._machineQuality.toJSON() : null,\n creel: !isNil(this._creel) ? this._creel.toJSON() : null\n } as any as JSON;\n }\n\n public get machineQuality(): PlanningMachineQuality {\n return this._machineQuality;\n }\n\n public get creel(): PlanningCreel {\n return this._creel;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return !isEqual(machineType, MachineType.WEAVING_MACHINE);\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {PlanningItem} from '../planning-item';\nimport {PlanningItemType} from '../planning-item-type.enum';\n\nexport class PlanningMachineCreelChange extends PlanningItem {\n public constructor(id: number, startDate: Date, endDate: Date) {\n super(id, startDate, endDate, PlanningItemType.CREEL_CHANGE);\n }\n\n public static fromJSON(planningMachineCreelChangeJSON: any, timezoneCode: string): PlanningMachineCreelChange {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineCreelChangeJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineCreelChangeJSON.endDate, timezoneCode);\n\n return new PlanningMachineCreelChange(planningMachineCreelChangeJSON.id, startDate, endDate);\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n id: this.id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode),\n type: PlanningItemType[this.type]\n } as any as JSON;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return machineType !== MachineType.WEAVING_MACHINE;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class PlanningMachineQuality {\n private _id: number;\n private _technicalName: string;\n private _version: number;\n\n public constructor(id: number, technicalName: string, version: number) {\n this._id = id;\n this._technicalName = technicalName;\n this._version = version;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get technicalName(): string {\n return this._technicalName;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get technicalNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.technicalName, this.version);\n }\n\n public static fromJSON(planningMachineQualityJSON: any): PlanningMachineQuality {\n return AssertionUtils.isNullOrUndefined(planningMachineQualityJSON)\n ? null\n : new PlanningMachineQuality(planningMachineQualityJSON.id, planningMachineQualityJSON.technicalName, planningMachineQualityJSON.version);\n }\n\n public static fromOverviewListMachineQuality(overviewListMachineQuality: OverviewListMachineQuality): PlanningMachineQuality {\n return new PlanningMachineQuality(overviewListMachineQuality.id, overviewListMachineQuality.technicalName, overviewListMachineQuality.version);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n technicalName: this._technicalName,\n version: this._version\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {PlanningOrderData} from '../planning-order-data';\nimport {PlanningCreel} from './planning-creel';\nimport {PlanningMachineQuality} from './planning-machine-quality';\n\nexport class ProductionOrderCarpetForPlanningOrder extends PlanningOrderData {\n private _machineQuality: PlanningMachineQuality;\n private _creel: PlanningCreel;\n\n private readonly STATUSES_REQUIRED_TO_PRINT_WEAVING_ORDER = [\n ProductionScheduleStatus.PROCESSED,\n ProductionScheduleStatus.FINALIZING,\n ProductionScheduleStatus.FINALIZED,\n ProductionScheduleStatus.TRANSLATING,\n ProductionScheduleStatus.TRANSLATED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.EXECUTING,\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL,\n ProductionScheduleStatus.CANCELLED,\n ProductionScheduleStatus.QUEUING,\n ProductionScheduleStatus.QUEUED\n ];\n\n public constructor(id: number, name: string, dueDate: Date, status: ProductionScheduleStatus) {\n super(id, name, dueDate, status);\n }\n\n public static fromJSON(productionOrderForPlanningOrderJSON: any): ProductionOrderCarpetForPlanningOrder {\n return new ProductionOrderCarpetForPlanningOrder(\n productionOrderForPlanningOrderJSON.id,\n productionOrderForPlanningOrderJSON.name,\n AssertionUtils.isNullOrUndefined(productionOrderForPlanningOrderJSON.dueDate) ? null : new Date(productionOrderForPlanningOrderJSON.dueDate),\n ProductionScheduleStatus[productionOrderForPlanningOrderJSON.status]\n );\n }\n\n public static fromNeedsAttentionItemJSON(needsAttentionJSON: any): ProductionOrderCarpetForPlanningOrder {\n const productionOrder = new ProductionOrderCarpetForPlanningOrder(\n Number(needsAttentionJSON.productionOrderId),\n needsAttentionJSON.name,\n AssertionUtils.isNullOrUndefined(needsAttentionJSON.dueDate) ? null : new Date(needsAttentionJSON.dueDate),\n ProductionScheduleStatus[needsAttentionJSON.status]\n );\n\n productionOrder.machineQuality = PlanningMachineQuality.fromJSON(needsAttentionJSON.machineQuality);\n productionOrder.creel = PlanningCreel.fromJSON(needsAttentionJSON.creel);\n productionOrder.yield = needsAttentionJSON.yield;\n\n return productionOrder;\n }\n\n public get machineQuality(): PlanningMachineQuality {\n return this._machineQuality;\n }\n\n public set machineQuality(machineQuality: PlanningMachineQuality) {\n this._machineQuality = machineQuality;\n }\n\n public get creel(): PlanningCreel {\n return this._creel;\n }\n\n public set creel(creel: PlanningCreel) {\n this._creel = creel;\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n dueDate: this.dueDate,\n totalNrPicks: this.yield.planned\n } as any as JSON;\n }\n\n public canPrintWeavingOrder(): boolean {\n return this.STATUSES_REQUIRED_TO_PRINT_WEAVING_ORDER.includes(this.status);\n }\n\n public canBeQueued(): boolean {\n return this.status === ProductionScheduleStatus.PROCESSED || this.status === ProductionScheduleStatus.TRANSLATED;\n }\n}\n","export enum PlanningItemType {\n MAINTENANCE,\n MACHINE_UNAVAILABLE,\n CREEL_CHANGE,\n WARP_CHANGE,\n RUN\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {moment} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {duration} from 'moment';\nimport {CalendarItem} from './calendar-item';\nimport {PlanningItemType} from './planning-item-type.enum';\n\nexport abstract class PlanningItem extends CalendarItem {\n private _type: PlanningItemType;\n\n public constructor(id: number, startDate: Date, endDate: Date, type: PlanningItemType) {\n super(id, startDate, endDate);\n this._type = type;\n }\n\n public get type(): PlanningItemType {\n return this._type;\n }\n\n public get totalRunningTimeInMs(): number {\n return moment(this._endDate).diff(this._startDate);\n }\n\n public get uniqueId(): string {\n return `planning-item-${this._id}`;\n }\n\n public reschedule(startDate: Date, endDate: Date): void {\n this._startDate = startDate;\n this._endDate = endDate;\n\n this.updateUuid();\n }\n\n public updateStartWhilePreservingDuration(startDate: Date): void {\n const originalDuration = duration(moment(this._endDate).diff(this.startDate));\n this._startDate = startDate;\n this._endDate = moment(startDate).add(originalDuration).toDate();\n }\n\n public isNew(): boolean {\n return isNil(this._id);\n }\n\n public abstract toJSON(timezoneCode: string);\n public abstract isCompatibleWithMachineType(machineType: MachineType): boolean;\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemType} from './planning-item-type.enum';\n\nexport class PlanningMachineMaintenance extends PlanningItem {\n public constructor(id: number, startDate: Date, endDate: Date) {\n super(id, startDate, endDate, PlanningItemType.MAINTENANCE);\n }\n\n public static fromJSON(planningMachineMaintenanceJSON: any, timezoneCode: string): PlanningMachineMaintenance {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineMaintenanceJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineMaintenanceJSON.endDate, timezoneCode);\n\n return new PlanningMachineMaintenance(planningMachineMaintenanceJSON.id, startDate, endDate);\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n id: this.id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode),\n type: PlanningItemType[this.type]\n } as any as JSON;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return true;\n }\n}\n","import {getItemsForDateRange} from '@application/helper/planning/get-items-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {moment, TimeUtils, TimezoneUtils} from '@vdw/angular-component-library';\nimport {each, every, isEmpty, isEqual, last, map, some, sumBy} from 'lodash-es';\nimport {Moment} from 'moment';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemType} from './planning-item-type.enum';\nimport {PlanningOrder} from './planning-order';\n\nexport abstract class PlanningMachineRun extends PlanningItem {\n private _planningOrders: PlanningOrder[];\n private _compatibleWithMachine: boolean;\n\n public constructor(id: number, planningOrders: PlanningOrder[], startDate: Date, endDate: Date, compatibleWithMachine: boolean) {\n super(id, startDate, endDate, PlanningItemType.RUN);\n\n this._planningOrders = planningOrders;\n this._compatibleWithMachine = compatibleWithMachine;\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n id: this.id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode),\n type: PlanningItemType[this.type],\n compatibleWithMachine: this._compatibleWithMachine,\n planningOrders: map(this.planningOrders, (planningOrder: PlanningOrder) => {\n return planningOrder.toJSON(timezoneCode);\n })\n } as any as JSON;\n }\n\n public get planningOrders(): PlanningOrder[] {\n return this._planningOrders;\n }\n\n public set planningOrders(planningOrders: PlanningOrder[]) {\n this._planningOrders = planningOrders;\n }\n\n public get hasDuePlanningOrders(): boolean {\n return some(this.planningOrders, (planningOrder: PlanningOrder) => {\n return planningOrder.isProductionOrderDueDateBeforeEndDate && !planningOrder.productionOrder.completed;\n });\n }\n\n public get completed(): boolean {\n return !isEmpty(this._planningOrders) && every(this.planningOrders, ['productionOrder.completed', true]);\n }\n\n public get executing(): boolean {\n return some(this.planningOrders, ['productionOrder.executing', true]) || (some(this._planningOrders, ['productionOrder.completed', true]) && !this.completed);\n }\n\n public get compatibleWithMachine(): boolean {\n return this._compatibleWithMachine;\n }\n\n public get uniqueId(): string {\n return `run-${this._id}`;\n }\n\n public get hasPlanningOrders(): boolean {\n return !isEmpty(this._planningOrders);\n }\n\n public getOrdersForDateRange(dateRange: DateRange): PlanningOrder[] {\n return getItemsForDateRange(this._planningOrders, dateRange);\n }\n\n public reschedule(startDate: Date, endDate: Date): void {\n const momentStartDate: Moment = moment(startDate);\n each(this.planningOrders, (planningOrder: PlanningOrder) => {\n const duration = planningOrder.totalRunningTimeInMs;\n planningOrder.startDate = momentStartDate.toDate();\n planningOrder.endDate = momentStartDate.add(duration).toDate();\n });\n\n super.reschedule(startDate, endDate);\n }\n\n public canBeRescheduled(): boolean {\n return !this.completed && !this.executing;\n }\n\n public rescheduleBasedOnPlanningOrders(): void {\n const startDateWithPlanningOrdersTotalRunningTime = moment(this.startDate).add(this.getPlanningOrdersTotalRunningTimeInMs(), TimeUtils.MILLISECONDS_UNIT).toDate();\n\n if (!moment(this.endDate).isSameOrAfter(startDateWithPlanningOrdersTotalRunningTime)) {\n this.reschedule(this.startDate, startDateWithPlanningOrdersTotalRunningTime);\n } else {\n this.reschedule(this.startDate, this.endDate);\n }\n }\n\n public updateDuration(newDurationInMilliseconds: number): void {\n const oldRunDurationInMilliseconds = moment(this._endDate).diff(this._startDate, TimeUtils.MILLISECONDS_UNIT);\n\n if (!isEqual(newDurationInMilliseconds, oldRunDurationInMilliseconds)) {\n const momentStartDate = moment(this._startDate);\n const emptySpaceDurationInMs = moment(this._endDate).diff(last(this._planningOrders).endDate, TimeUtils.MILLISECONDS_UNIT);\n\n each(this._planningOrders, (planningOrder: PlanningOrder) => {\n const planningOrderNewDurationInMilliseconds =\n (planningOrder.totalRunningTimeInMs * (newDurationInMilliseconds - emptySpaceDurationInMs)) / (oldRunDurationInMilliseconds - emptySpaceDurationInMs);\n\n planningOrder.startDate = momentStartDate.toDate();\n planningOrder.endDate = momentStartDate.add(planningOrderNewDurationInMilliseconds).toDate();\n });\n\n this._endDate = moment(this._startDate).add(newDurationInMilliseconds, TimeUtils.MILLISECONDS_UNIT).toDate();\n\n this.updateUuid();\n }\n }\n\n public fitOrders(): void {\n this._planningOrders.sort((a: PlanningOrder, b: PlanningOrder) => a.startDate.getTime() - b.startDate.getTime());\n for (let i = 0; i < this._planningOrders.length; i++) {\n const element = this._planningOrders[i];\n if (i === 0) {\n element.updateStartWhilePreservingDuration(this.startDate);\n continue;\n }\n const prevElement = this._planningOrders[i - 1];\n element.updateStartWhilePreservingDuration(prevElement.endDate);\n }\n }\n\n private getPlanningOrdersTotalRunningTimeInMs(): number {\n return sumBy(this.planningOrders, 'totalRunningTimeInMs');\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemType} from './planning-item-type.enum';\n\nexport class PlanningMachineUnavailability extends PlanningItem {\n public constructor(id: number, startDate: Date, endDate: Date) {\n super(id, startDate, endDate, PlanningItemType.MACHINE_UNAVAILABLE);\n }\n\n public static fromJSON(planningMachineUnavailabilityJSON: any, timezoneCode: string): PlanningMachineUnavailability {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineUnavailabilityJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineUnavailabilityJSON.endDate, timezoneCode);\n\n return new PlanningMachineUnavailability(planningMachineUnavailabilityJSON.id, startDate, endDate);\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n id: this.id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode),\n type: PlanningItemType[this.type]\n } as any as JSON;\n }\n\n public isCompatibleWithMachineType(_: MachineType): boolean {\n return true;\n }\n}\n","import {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {OverviewMachineCreel} from '@presentation/pages/machine-overview/overview-machine-creel';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {Message, StringUtils} from '@vdw/angular-component-library';\n\nexport interface PlanningMachineProperties {\n id: number;\n name: string;\n machineType: MachineType;\n group: MachineGroup;\n activeQuality: OverviewListMachineQuality;\n activeCreel: OverviewMachineCreel;\n activeWeaveProduct: OverviewListWeaveProduct;\n activeTuftProduct: OverviewListTuftProduct;\n messages: Message[];\n}\n\nexport class PlanningMachine {\n private _id: number;\n private _name: string;\n private _machineType: MachineType;\n private _group: MachineGroup;\n private _activeQuality: OverviewListMachineQuality;\n private _activeCreel: OverviewMachineCreel;\n private _activeWeaveProduct: OverviewListWeaveProduct;\n private _activeTuftProduct: OverviewListTuftProduct;\n private _messages: Message[];\n\n public constructor(values: PlanningMachineProperties) {\n this._id = values.id;\n this._name = values.name;\n this._machineType = values.machineType;\n this._group = values.group;\n this._activeQuality = values.activeQuality;\n this._activeCreel = values.activeCreel;\n this._messages = values.messages;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get machineType(): MachineType {\n return this._machineType;\n }\n\n public get group(): MachineGroup {\n return this._group;\n }\n\n public get activeQuality(): OverviewListMachineQuality {\n return this._activeQuality;\n }\n\n public set activeQuality(activeQuality: OverviewListMachineQuality) {\n this._activeQuality = activeQuality;\n }\n\n public get activeCreel(): OverviewMachineCreel {\n return this._activeCreel;\n }\n\n public set activeCreel(activeCreel: OverviewMachineCreel) {\n this._activeCreel = activeCreel;\n }\n\n public get messages(): Message[] {\n return this._messages;\n }\n\n public get activeWeaveProduct(): OverviewListWeaveProduct {\n return this._activeWeaveProduct;\n }\n\n public set activeWeaveProduct(activeTuftProduct: OverviewListWeaveProduct) {\n this._activeWeaveProduct = activeTuftProduct;\n }\n\n public get activeTuftProduct(): OverviewListTuftProduct {\n return this._activeTuftProduct;\n }\n\n public set activeTuftProduct(activeTuftProduct: OverviewListTuftProduct) {\n this._activeTuftProduct = activeTuftProduct;\n }\n\n public static fromJSON(machineJSON: any): PlanningMachine {\n const properties = {\n id: machineJSON.id,\n name: machineJSON.name,\n machineType: MachineType[`${machineJSON.machineType}`],\n group: MachineGroup.fromJSON(machineJSON.machineGroup),\n activeQuality: null,\n activeCreel: null,\n activeWeaveProduct: null,\n activeTuftProduct: null,\n messages: []\n };\n\n return new PlanningMachine(properties);\n }\n\n public static compare(planningMachineA: PlanningMachine, planningMachineB: PlanningMachine): number {\n if (planningMachineA.group?.id === planningMachineB.group?.id) {\n return StringUtils.stringComparator(planningMachineA.name, planningMachineB.name);\n }\n\n return MachineGroup.compare(planningMachineA.group, planningMachineB.group);\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ProductionOrderYield} from './production-order-yield';\n\nexport abstract class PlanningOrderData {\n private _id: number;\n private _name: string;\n private _dueDate: Date;\n private _status: ProductionScheduleStatus;\n private _yield: ProductionOrderYield;\n\n public constructor(id: number, name: string, dueDate: Date, status: ProductionScheduleStatus) {\n this._id = id;\n this._name = name;\n this._dueDate = dueDate;\n this._status = status;\n this._yield = {current: null, planned: null};\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(status: ProductionScheduleStatus) {\n this._status = status;\n }\n\n public get yield(): ProductionOrderYield {\n return this._yield;\n }\n\n public set yield(productionOrderYield: ProductionOrderYield) {\n this._yield = productionOrderYield ? {current: Math.round(productionOrderYield.current * 100) / 100, planned: productionOrderYield.planned} : null;\n }\n\n public get completed(): boolean {\n return this._status === ProductionScheduleStatus.EXECUTED_COMPLETE || this._status === ProductionScheduleStatus.EXECUTED_PARTIAL || this._status === ProductionScheduleStatus.EXECUTED;\n }\n\n public get executing(): boolean {\n return this._status === ProductionScheduleStatus.EXECUTING;\n }\n\n public get processing(): boolean {\n return this._status === ProductionScheduleStatus.PROCESSING;\n }\n\n public get queuing(): boolean {\n return this._status === ProductionScheduleStatus.QUEUING;\n }\n\n public canBeProcessed(): boolean {\n return this._status === ProductionScheduleStatus.CREATED;\n }\n\n public needsToBeReconfirmed(): boolean {\n return this._status === ProductionScheduleStatus.TO_RECONFIRM;\n }\n\n public needsToBePlanned(): boolean {\n return this._status === ProductionScheduleStatus.TO_PLAN;\n }\n\n public abstract canPrintWeavingOrder(): boolean;\n\n public abstract canBeQueued(): boolean;\n\n public abstract toJSON(): JSON;\n}\n","import {getTotalRunningTimeInMsForDateRange} from '@application/helper/planning/get-total-running-time-in-milliseconds-for-date-range';\nimport {DateRange} from '@domain/date-range';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {AssertionUtils, moment, TimeUtils, TimezoneUtils} from '@vdw/angular-component-library';\nimport {duration} from 'moment';\nimport {ProductionOrderCarpetForPlanningOrder} from './carpet/production-order-carpet-for-planning-order';\nimport {PlanningOrderData} from './planning-order-data';\nimport {ProductionOrderTuftingForPlanningOrder} from './tufting/production-order-tufting-for-planning-order';\nimport {ProductionOrderWeavingForPlanningOrder} from './weaving/production-order-weaving-for-planning-order';\n\nexport class PlanningOrder {\n private _id: number;\n private _startDate: Date;\n private _endDate: Date;\n private _efficiency: number;\n private _productionOrder: PlanningOrderData;\n\n public constructor(id: number, startDate: Date, endDate: Date, efficiency: number, productionOrder: PlanningOrderData) {\n this._id = id;\n this._startDate = startDate;\n this._endDate = endDate;\n this._efficiency = efficiency;\n this._productionOrder = productionOrder;\n }\n\n public static fromJSON(planningOrderJSON: any, timezoneCode: string, orderData: PlanningOrderData): PlanningOrder {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningOrderJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningOrderJSON.endDate, timezoneCode);\n return new PlanningOrder(planningOrderJSON.id, startDate, endDate, planningOrderJSON.efficiency, orderData);\n }\n\n public static fromWeavingJSON(planningOrderJSON: any, timezoneCode: string): PlanningOrder {\n const orderData = ProductionOrderWeavingForPlanningOrder.fromJSON(planningOrderJSON.productionOrderLite);\n return PlanningOrder.fromJSON(planningOrderJSON, timezoneCode, orderData);\n }\n\n public static fromTuftingJSON(planningOrderJSON: any, timezoneCode: string): PlanningOrder {\n const orderData = ProductionOrderTuftingForPlanningOrder.fromJSON(planningOrderJSON.productionOrderLite);\n return PlanningOrder.fromJSON(planningOrderJSON, timezoneCode, orderData);\n }\n\n public static fromCarpetJSON(planningOrderJSON: any, timezoneCode: string): PlanningOrder {\n const orderData = ProductionOrderCarpetForPlanningOrder.fromJSON(planningOrderJSON.productionOrder);\n return PlanningOrder.fromJSON(planningOrderJSON, timezoneCode, orderData);\n }\n\n public toJSON(timezoneCode: string): JSON {\n const data = {\n id: this._id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode)\n } as any;\n\n if (this.productionOrder instanceof ProductionOrderCarpetForPlanningOrder) {\n data.productionOrder = this._productionOrder.toJSON();\n } else if (this.productionOrder instanceof ProductionOrderWeavingForPlanningOrder) {\n data.productionOrderLite = this._productionOrder.toJSON();\n } else if (this.productionOrder instanceof ProductionOrderTuftingForPlanningOrder) {\n data.productionOrderLite = this._productionOrder.toJSON();\n }\n\n return data as JSON;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get startDate(): Date {\n return this._startDate;\n }\n\n public set startDate(startDate: Date) {\n this._startDate = startDate;\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public set endDate(endDate: Date) {\n this._endDate = endDate;\n }\n\n public get efficiency(): number {\n return this._efficiency;\n }\n\n public get productionOrder(): PlanningOrderData {\n return this._productionOrder;\n }\n\n public get isProductionOrderDueDateBeforeEndDate(): boolean {\n return AssertionUtils.isNullOrUndefined(this._productionOrder.dueDate) ? false : moment(this._productionOrder.dueDate).endOf('day').isBefore(this._endDate);\n }\n\n public get totalRunningTimeInMs(): number {\n return moment(this._endDate).diff(this._startDate, TimeUtils.MILLISECONDS_UNIT);\n }\n\n public get isCarpetOrder(): boolean {\n return this._productionOrder instanceof ProductionOrderCarpetForPlanningOrder;\n }\n\n public get isWeavingOrder(): boolean {\n return this._productionOrder instanceof ProductionOrderWeavingForPlanningOrder;\n }\n\n public get isTuftingOrder(): boolean {\n return this._productionOrder instanceof ProductionOrderTuftingForPlanningOrder;\n }\n\n public getTotalRunningTimeInMsForDateRange(dateRange: DateRange): number {\n return getTotalRunningTimeInMsForDateRange(this, dateRange);\n }\n\n public canBeRescheduled(): boolean {\n return !this.productionOrder.completed && !this.productionOrder.executing;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n if (this.isWeavingOrder) {\n return machineType === MachineType.WEAVING_MACHINE;\n }\n if (this.isTuftingOrder) {\n return machineType === MachineType.TUFT;\n }\n return ![MachineType.WEAVING_MACHINE, MachineType.TUFT].includes(machineType);\n }\n\n public updateStartWhilePreservingDuration(startDate: Date): void {\n const originalDuration = duration(moment(this._endDate).diff(this.startDate));\n this._startDate = startDate;\n this._endDate = moment(startDate).add(originalDuration).toDate();\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {PlanningMachineRun} from '../planning-machine-run';\nimport {PlanningOrder} from '../planning-order';\nimport {PlanningTuftProduct} from './planning-tuft-product';\n\nexport class PlanningMachineTuftingRun extends PlanningMachineRun {\n private _tuftProduct: PlanningTuftProduct;\n\n public constructor(id: number, tuftProduct: PlanningTuftProduct, planningOrders: PlanningOrder[], startDate: Date, endDate: Date, compatibleWithMachine: boolean) {\n super(id, planningOrders, startDate, endDate, compatibleWithMachine);\n\n this._tuftProduct = tuftProduct;\n }\n\n public get tuftProduct(): PlanningTuftProduct {\n return this._tuftProduct;\n }\n\n public static fromJSON(planningMachineRunJSON: any, timezoneCode: string): PlanningMachineTuftingRun {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.endDate, timezoneCode);\n\n const planningOrders = planningMachineRunJSON.planningOrders?.map((planningOrderJSON: any) => PlanningOrder.fromTuftingJSON(planningOrderJSON, timezoneCode)) ?? [];\n\n return new PlanningMachineTuftingRun(\n planningMachineRunJSON.id,\n PlanningTuftProduct.fromJSON(planningMachineRunJSON.tuftProduct),\n planningOrders,\n startDate,\n endDate,\n planningMachineRunJSON.compatibleWithMachine\n );\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n ...super.toJSON(timezoneCode),\n tuftProduct: this._tuftProduct?.toJSON()\n } as any as JSON;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return machineType === MachineType.TUFT;\n }\n}\n","import {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\n\nexport class PlanningTuftProduct {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(jsonData: any): PlanningTuftProduct {\n return new PlanningTuftProduct(jsonData.id, jsonData.name);\n }\n\n public static fromOverviewListTuftProduct(tuftProduct: OverviewListTuftProduct): PlanningTuftProduct {\n return new PlanningTuftProduct(tuftProduct.id, tuftProduct.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {PlanningOrderData} from '../planning-order-data';\nimport {ProductionOrderYield} from '../production-order-yield';\nimport {PlanningTuftProduct} from './planning-tuft-product';\n\nexport class ProductionOrderTuftingForPlanningOrder extends PlanningOrderData {\n private _tuftProduct: PlanningTuftProduct;\n\n public constructor(id: number, name: string, status: ProductionScheduleStatus, tuftProduct: PlanningTuftProduct, orderYield: ProductionOrderYield, dueDate: Date) {\n super(id, name, dueDate, status);\n this._tuftProduct = tuftProduct;\n this.yield = orderYield;\n }\n\n public get tuftProduct(): PlanningTuftProduct {\n return this._tuftProduct;\n }\n\n public static fromNeedsAttentionItemJSON(jsonData: any): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(\n jsonData.productionOrderLiteId,\n jsonData.name,\n jsonData.status,\n PlanningTuftProduct.fromJSON(jsonData.tuftProduct),\n jsonData.yield,\n AssertionUtils.isNullOrUndefined(jsonData.dueDate) ? null : new Date(jsonData.dueDate)\n );\n }\n\n public static fromJSON(jsonData: any): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(\n jsonData.id,\n jsonData.name,\n jsonData.status,\n AssertionUtils.isNullOrUndefined(jsonData.tuftProduct) ? null : PlanningTuftProduct.fromJSON(jsonData.tuftProduct),\n {current: null, planned: null},\n AssertionUtils.isNullOrUndefined(jsonData.dueDate) ? null : new Date(jsonData.dueDate)\n );\n }\n\n public toJSON(): JSON {\n return {\n plannedAmountInMeters: this.yield.planned,\n id: this.id,\n name: this.name,\n dueDate: this.dueDate,\n status: this.status\n } as any as JSON;\n }\n\n public canPrintWeavingOrder(): boolean {\n return false;\n }\n\n public canBeQueued(): boolean {\n return false;\n }\n\n public canBeProcessed(): boolean {\n return false;\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {PlanningItem} from '../planning-item';\nimport {PlanningItemType} from '../planning-item-type.enum';\n\nexport class PlanningMachineWarpChange extends PlanningItem {\n public constructor(id: number, startDate: Date, endDate: Date) {\n super(id, startDate, endDate, PlanningItemType.WARP_CHANGE);\n }\n\n public static fromJSON(planningMachineCreelChangeJSON: any, timezoneCode: string): PlanningMachineWarpChange {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineCreelChangeJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineCreelChangeJSON.endDate, timezoneCode);\n\n return new PlanningMachineWarpChange(planningMachineCreelChangeJSON.id, startDate, endDate);\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n id: this.id,\n startDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._startDate, timezoneCode),\n endDate: TimezoneUtils.convertToISOStringWithoutCurrentOffset(this._endDate, timezoneCode),\n type: PlanningItemType[this.type]\n } as any as JSON;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return machineType === MachineType.WEAVING_MACHINE;\n }\n}\n","import {MachineType} from '@domain/machine/machine-type.enum';\nimport {TimezoneUtils} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {PlanningMachineRun} from '../planning-machine-run';\nimport {PlanningOrder} from '../planning-order';\nimport {PlanningWeaveProduct} from './planning-weave-product';\n\nexport class PlanningMachineWeavingRun extends PlanningMachineRun {\n private _weaveProduct: PlanningWeaveProduct;\n\n public constructor(id: number, weaveProduct: PlanningWeaveProduct, planningOrders: PlanningOrder[], startDate: Date, endDate: Date, compatibleWithMachine: boolean) {\n super(id, planningOrders, startDate, endDate, compatibleWithMachine);\n\n this._weaveProduct = weaveProduct;\n }\n\n public static fromJSON(planningMachineRunJSON: any, timezoneCode: string): PlanningMachineWeavingRun {\n const startDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.startDate, timezoneCode);\n const endDate = TimezoneUtils.convertToDateWithCurrentOffset(planningMachineRunJSON.endDate, timezoneCode);\n\n const planningOrders = map(planningMachineRunJSON.planningOrders, (planningOrderJSON: any) => {\n return PlanningOrder.fromWeavingJSON(planningOrderJSON, timezoneCode);\n });\n\n return new PlanningMachineWeavingRun(\n planningMachineRunJSON.id,\n PlanningWeaveProduct.fromJSON(planningMachineRunJSON.weaveProduct),\n planningOrders,\n startDate,\n endDate,\n planningMachineRunJSON.compatibleWithMachine\n );\n }\n\n public toJSON(timezoneCode: string): JSON {\n return {\n ...super.toJSON(timezoneCode),\n weaveProduct: this._weaveProduct?.toJSON()\n } as any as JSON;\n }\n\n public get weaveProduct(): PlanningWeaveProduct {\n return this._weaveProduct;\n }\n\n public isCompatibleWithMachineType(machineType: MachineType): boolean {\n return machineType === MachineType.WEAVING_MACHINE;\n }\n}\n","import {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\n\nexport class PlanningWeaveProduct {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(jsonData: any): PlanningWeaveProduct {\n return new PlanningWeaveProduct(jsonData.id, jsonData.name);\n }\n\n public static fromOverviewListWeaveProduct(weaveProduct: OverviewListWeaveProduct): PlanningWeaveProduct {\n return new PlanningWeaveProduct(weaveProduct.id, weaveProduct.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {PlanningOrderData} from '../planning-order-data';\nimport {ProductionOrderYield} from '../production-order-yield';\nimport {PlanningWeaveProduct} from './planning-weave-product';\n\nexport class ProductionOrderWeavingForPlanningOrder extends PlanningOrderData {\n private _weaveProduct: PlanningWeaveProduct;\n\n public constructor(id: number, name: string, status: ProductionScheduleStatus, weaveProduct: PlanningWeaveProduct, orderYield: ProductionOrderYield, dueDate: Date) {\n super(id, name, dueDate, status);\n this._weaveProduct = weaveProduct;\n this.yield = orderYield;\n }\n\n public get weaveProduct(): PlanningWeaveProduct {\n return this._weaveProduct;\n }\n\n public static fromNeedsAttentionItemJSON(jsonData: any): ProductionOrderWeavingForPlanningOrder {\n return new ProductionOrderWeavingForPlanningOrder(\n jsonData.productionOrderLiteId,\n jsonData.name,\n jsonData.status,\n PlanningWeaveProduct.fromJSON(jsonData.weaveProduct),\n jsonData.yield,\n AssertionUtils.isNullOrUndefined(jsonData.dueDate) ? null : new Date(jsonData.dueDate)\n );\n }\n\n public static fromJSON(jsonData: any): ProductionOrderWeavingForPlanningOrder {\n return new ProductionOrderWeavingForPlanningOrder(\n jsonData.id,\n jsonData.name,\n jsonData.status,\n AssertionUtils.isNullOrUndefined(jsonData.weaveProduct) ? null : PlanningWeaveProduct.fromJSON(jsonData.weaveProduct),\n {current: null, planned: null},\n AssertionUtils.isNullOrUndefined(jsonData.dueDate) ? null : new Date(jsonData.dueDate)\n );\n }\n\n public toJSON(): JSON {\n return {\n plannedAmountInMeters: this.yield.planned,\n id: this.id,\n name: this.name,\n dueDate: this.dueDate,\n status: this.status\n } as any as JSON;\n }\n\n public canPrintWeavingOrder(): boolean {\n return false;\n }\n\n public canBeQueued(): boolean {\n return false;\n }\n}\n","export enum PositionOfDialog {\n TOP,\n BOTTOM,\n LEFT,\n RIGHT\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {OverviewListWeavingMachine} from '@presentation/pages/texfab/production-order-lite/overview/overview-list-weaving-machine';\nimport moment from 'moment';\n\nexport class ProductionOrderLite {\n private _id: number;\n private _name: string;\n private _machine: OverviewListWeavingMachine;\n private _plannedLength: number;\n private _dateCreated: Date;\n private _dueDate: Date;\n private _status: ProductionScheduleStatus;\n\n public constructor(id: number, name: string, machine: OverviewListWeavingMachine, plannedLength: number, dateCreated: Date, dueDate: Date, status: ProductionScheduleStatus) {\n this._id = id;\n this._name = name;\n this._machine = machine;\n this._plannedLength = plannedLength;\n this._dateCreated = dateCreated;\n this._dueDate = dueDate;\n this._status = status;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get machine(): OverviewListWeavingMachine {\n return this._machine;\n }\n\n public set machine(value: OverviewListWeavingMachine) {\n this._machine = value;\n }\n\n public get plannedLength(): number {\n return this._plannedLength;\n }\n\n public set plannedLength(value: number) {\n this._plannedLength = value;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public set dateCreated(value: Date) {\n this._dateCreated = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public set dueDate(value: Date) {\n this._dueDate = value;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public static fromJSON(overviewListWeaveProductionOrderJSON: any): ProductionOrderLite {\n return new ProductionOrderLite(\n overviewListWeaveProductionOrderJSON.id,\n overviewListWeaveProductionOrderJSON.name,\n overviewListWeaveProductionOrderJSON.machine ? OverviewListWeavingMachine.fromJSON(overviewListWeaveProductionOrderJSON.machine) : null,\n overviewListWeaveProductionOrderJSON.plannedQuantity,\n new Date(overviewListWeaveProductionOrderJSON.creationDate),\n overviewListWeaveProductionOrderJSON.dueDate ? new Date(overviewListWeaveProductionOrderJSON.dueDate) : null,\n overviewListWeaveProductionOrderJSON.status\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n machineId: this._machine?.id,\n machineName: this._machine?.name,\n plannedQuantity: this._plannedLength,\n creationDate: this._dateCreated ? this._dateCreated.toISOString() : new Date().toISOString(),\n dueDate: moment(this._dueDate).startOf('day').subtract(new Date().getTimezoneOffset(), 'minutes').toISOString()\n } as any as JSON;\n }\n}\n","import {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {OverviewListWeavingMachine} from '@presentation/pages/texfab/production-order-lite/overview/overview-list-weaving-machine';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport moment from 'moment';\nimport {ProductionOrderLite} from '../production-order-lite';\n\nexport class ProductionOrderWeaving extends ProductionOrderLite {\n private _weaveProduct: OverviewListWeaveProduct;\n\n public constructor(\n id: number,\n name: string,\n weaveProduct: OverviewListWeaveProduct,\n machine: OverviewListWeavingMachine,\n plannedLength: number,\n dateCreated: Date,\n dueDate: Date,\n status: ProductionScheduleStatus\n ) {\n super(id, name, machine, plannedLength, dateCreated, dueDate, status);\n this._weaveProduct = weaveProduct;\n }\n\n public get weaveProduct(): OverviewListWeaveProduct {\n return this._weaveProduct;\n }\n\n public set weaveProduct(value: OverviewListWeaveProduct) {\n this._weaveProduct = value;\n }\n\n public static fromJSON(overviewListWeaveProductionOrderJSON: any): ProductionOrderWeaving {\n return new ProductionOrderWeaving(\n overviewListWeaveProductionOrderJSON.id,\n overviewListWeaveProductionOrderJSON.name,\n OverviewListWeaveProduct.fromJSON(overviewListWeaveProductionOrderJSON.weaveProduct),\n overviewListWeaveProductionOrderJSON.machine ? OverviewListWeavingMachine.fromJSON(overviewListWeaveProductionOrderJSON.machine) : null,\n overviewListWeaveProductionOrderJSON.plannedQuantity,\n new Date(overviewListWeaveProductionOrderJSON.creationDate),\n overviewListWeaveProductionOrderJSON.dueDate ? new Date(overviewListWeaveProductionOrderJSON.dueDate) : null,\n overviewListWeaveProductionOrderJSON.status\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this?.id,\n name: this.name,\n weaveProductId: this._weaveProduct?.id,\n weaveProductName: this._weaveProduct?.name,\n weaveProductPickDensityInPicksPerCm: this._weaveProduct?.pickDensityInPicksPerCm,\n machineId: this.machine?.id,\n machineName: this.machine?.name,\n plannedQuantity: this.plannedLength ?? 0,\n creationDate: this.dateCreated ? this.dateCreated.toISOString() : new Date().toISOString(),\n dueDate: moment(this.dueDate).startOf('day').subtract(new Date().getTimezoneOffset(), 'minutes').toISOString()\n } as any as JSON;\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingConfiguration} from '@domain/production-schedule/drawing-configuration';\nimport {DrawingConfigurationWithColoredYarnSet} from '@domain/production-schedule/drawing-configuration-with-colored-yarn-set';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {Finishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing';\nimport {StringUtils} from '@vdw/angular-component-library';\nimport {isNil, map} from 'lodash-es';\nimport {DrawingConfigurationWithColorAndYarnSet} from './drawing-configuration-with-color-and-yarn-set';\nimport {DrawingImage} from './drawing-image';\nimport {MappingForDesign} from './mapping-for-design';\n\nexport class BmpDrawing extends Drawing {\n private _finishing: Finishing;\n\n public constructor(\n id: number,\n name: string,\n image: DrawingImage,\n dimensionsInPixels: DimensionsInPx,\n finishing: Finishing,\n shape: string,\n used: boolean,\n repeated: boolean,\n mappingForDesign: MappingForDesign[] = [],\n code?: string,\n configurations: DrawingConfiguration[] = [],\n threadByThread: boolean = false,\n nrColumnsForWeftSelection: number = 0,\n sizeInKB?: number,\n dateModified?: Date,\n missingDesign?: boolean,\n shapeId?: number\n ) {\n super(\n id,\n name,\n DrawingType.BMP,\n image,\n dimensionsInPixels,\n shape,\n used,\n repeated,\n mappingForDesign,\n code,\n configurations,\n threadByThread,\n nrColumnsForWeftSelection,\n sizeInKB,\n dateModified,\n missingDesign,\n shapeId\n );\n\n this._finishing = finishing;\n }\n\n public get finishing(): Finishing {\n return this._finishing;\n }\n\n public set finishing(value: Finishing) {\n this._finishing = value;\n }\n\n public static fromJSON(drawingJSON: any): BmpDrawing {\n const image: DrawingImage = isNil(drawingJSON.image)\n ? {}\n : {\n id: drawingJSON.image.id || null,\n data: drawingJSON.image.data || null,\n signature: drawingJSON.image.signature || null\n };\n\n let configurations: DrawingConfiguration[] = [];\n if (!isNil(drawingJSON.configuration)) {\n configurations = [this.drawingConfigurationFromJSON(drawingJSON.configuration)];\n } else if (!isNil(drawingJSON.configurations)) {\n configurations = map(drawingJSON.configurations, (configurationJSON: any) => this.drawingConfigurationFromJSON(configurationJSON));\n }\n\n return new BmpDrawing(\n drawingJSON.id,\n drawingJSON.name,\n image,\n {\n widthInPx: drawingJSON.dimensionsInPx.widthInPx,\n heightInPx: drawingJSON.dimensionsInPx.heightInPx\n },\n null,\n drawingJSON.shape,\n drawingJSON.used,\n drawingJSON.repeated,\n map(drawingJSON.mappingForDesign, (mappingForDesignJSON: MappingForDesign) => MappingForDesign.fromJSON(mappingForDesignJSON)),\n drawingJSON.drawingCode ?? drawingJSON.code,\n configurations,\n drawingJSON.threadByThread,\n drawingJSON.nrColumnsForWeftSelection,\n drawingJSON.sizeInKB,\n StringUtils.toDate(drawingJSON.dateModified),\n drawingJSON.missingDesign,\n drawingJSON.shapeId\n );\n }\n\n private static drawingConfigurationFromJSON(configurationJSON: any): DrawingConfiguration {\n return !isNil(configurationJSON.coloredYarnSet) ? DrawingConfigurationWithColoredYarnSet.fromJSON(configurationJSON) : DrawingConfigurationWithColorAndYarnSet.fromJSON(configurationJSON);\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {isEqual, isNil} from 'lodash-es';\nimport {TechnicalDimensions} from '../technical-dimensions';\nimport {MachineQualityForProductionSchedule} from './machine-quality-for-production-schedule';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\nimport {ProductionScheduleItemRecolorInformation} from './production-schedule-item-recolor-information';\n\nexport class BmpProductionScheduleItemInPathGroup extends ProductionScheduleItemInPathGroup {\n private _finishing: FinishingForProductionSchedule;\n\n public constructor(\n drawing: BmpDrawing,\n quantity: number,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n finishing: FinishingForProductionSchedule,\n isProductionItem: boolean,\n mainColorPosition: number,\n borderColorPosition: number,\n guid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n orderLineId: number = null,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null,\n machineQuality: MachineQualityForProductionSchedule = null\n ) {\n super(\n drawing,\n quantity,\n commercialDimensionsInMM,\n technicalDimensions,\n isProductionItem,\n mainColorPosition,\n borderColorPosition,\n guid,\n amountProduced,\n status,\n DrawingType.BMP,\n orderLineId,\n id,\n epId,\n totalWovenHeightInPicks,\n totalWovenHeightInMM,\n amountIncomplete,\n machineQuality\n );\n\n this._finishing = finishing;\n }\n\n public get finishing(): FinishingForProductionSchedule {\n return this._finishing;\n }\n\n public static fromJSON(productionScheduleItemInPathGroup: any): BmpProductionScheduleItemInPathGroup {\n return new BmpProductionScheduleItemInPathGroup(\n BmpDrawing.fromJSON(productionScheduleItemInPathGroup.design),\n productionScheduleItemInPathGroup.quantity,\n productionScheduleItemInPathGroup.commercialDimensions,\n productionScheduleItemInPathGroup.technicalDimensions,\n !AssertionUtils.isNullOrUndefined(productionScheduleItemInPathGroup.finishing) ? FinishingForProductionSchedule.fromJSON(productionScheduleItemInPathGroup.finishing) : null,\n productionScheduleItemInPathGroup.production,\n productionScheduleItemInPathGroup.mainColorPosition,\n productionScheduleItemInPathGroup.borderColorPosition,\n null,\n productionScheduleItemInPathGroup.amountProduced,\n AssertionUtils.isNullOrUndefined(productionScheduleItemInPathGroup.status) ? null : ProductionScheduleItemInPathGroupStatus[`${productionScheduleItemInPathGroup.status}`],\n productionScheduleItemInPathGroup.orderLineId,\n productionScheduleItemInPathGroup.id,\n productionScheduleItemInPathGroup.epId,\n productionScheduleItemInPathGroup.nrWovenInPicks,\n productionScheduleItemInPathGroup.nrWovenInMM,\n productionScheduleItemInPathGroup.amountIncomplete,\n !AssertionUtils.isNullOrUndefined(productionScheduleItemInPathGroup.machineQuality) ? MachineQualityForProductionSchedule.fromJSON(productionScheduleItemInPathGroup.machineQuality) : null\n );\n }\n\n public changeFinishing(finishing: FinishingForProductionSchedule): void {\n this._finishing = finishing;\n }\n\n public getCommercialCutbarsLengthInMM(): number {\n let commercialCutbarsLengthInMM = 0;\n\n if (!AssertionUtils.isNullOrUndefined(this.finishing) && !AssertionUtils.isNullOrUndefined(this.finishing.cutbarsInformation)) {\n if (this.finishing.cutbarsInformation.hasAddedCutbarBefore()) {\n commercialCutbarsLengthInMM += this.finishing.cutbarsInformation.cutbarBeforeProperties.commercialLengthInMM;\n }\n if (this.finishing.cutbarsInformation.hasAddedCutbarAfter()) {\n commercialCutbarsLengthInMM += this.finishing.cutbarsInformation.cutbarAfterProperties.commercialLengthInMM;\n }\n }\n\n return commercialCutbarsLengthInMM;\n }\n\n public getTechnicalCutbarsLengthInNumberOfPicks(): number {\n let technicalCutbarsLengthInPicks = 0;\n\n if (!AssertionUtils.isNullOrUndefined(this.finishing) && !AssertionUtils.isNullOrUndefined(this.finishing.cutbarsInformation)) {\n if (this.finishing.cutbarsInformation.hasAddedCutbarBefore()) {\n technicalCutbarsLengthInPicks += this.finishing.cutbarsInformation.cutbarBeforeProperties.technicalLengthInPicks;\n }\n if (this.finishing.cutbarsInformation.hasAddedCutbarAfter()) {\n technicalCutbarsLengthInPicks += this.finishing.cutbarsInformation.cutbarAfterProperties.technicalLengthInPicks;\n }\n }\n\n return technicalCutbarsLengthInPicks;\n }\n\n public getCutbarInformation(): CutbarsLength {\n const cutbarInformation = !isNil(this.finishing) ? this.finishing.cutbarsInformation : null;\n let cutbarBeforeCommercialLengthInMM = 0;\n let cutbarBeforeTechnicalLengthInNumberOfPicks = 0;\n let cutbarAfterCommercialLengthInMM = 0;\n let cutbarAfterTechnicalLengthInNumberOfPicks = 0;\n\n if (!isNil(cutbarInformation)) {\n cutbarBeforeCommercialLengthInMM = cutbarInformation.getLengthOfCutbarBeforeInMillimeters();\n cutbarBeforeTechnicalLengthInNumberOfPicks = cutbarInformation.getLengthOfCutbarBeforeInNumberOfPicks();\n cutbarAfterCommercialLengthInMM = cutbarInformation.getLengthOfCutbarAfterInMillimeters();\n cutbarAfterTechnicalLengthInNumberOfPicks = cutbarInformation.getLengthOfCutbarAfterInNumberOfPicks();\n }\n\n return {\n cutbarBefore: {\n commercialLengthInMM: cutbarBeforeCommercialLengthInMM,\n technicalLengthInNumberOfPicks: cutbarBeforeTechnicalLengthInNumberOfPicks\n },\n cutbarAfter: {\n commercialLengthInMM: cutbarAfterCommercialLengthInMM,\n technicalLengthInNumberOfPicks: cutbarAfterTechnicalLengthInNumberOfPicks\n }\n };\n }\n\n public canBeRecolored(): boolean {\n return true;\n }\n\n public toJSON(): JSON {\n const result = super.toJSON();\n\n result['finishing'] = !isNil(this._finishing) ? this._finishing.toJSON() : null;\n\n return result;\n }\n\n public updateFinishing(finishing: FinishingForProductionSchedule): void {\n if (isEqual(this._finishing?.id, finishing.id)) {\n this._finishing = finishing;\n }\n }\n\n public recolorDrawing(recolorInformation: ProductionScheduleItemRecolorInformation): void {\n this.drawing.image.data = recolorInformation.imageData;\n this.mainColorPosition = recolorInformation.mainColorPosition;\n this.borderColorPosition = recolorInformation.borderColorPosition;\n this.drawing.mappingForDesign = recolorInformation.mappingForDesign;\n\n this.commercialDimensionsInMM ??= recolorInformation.commercialDimensionsInMM;\n\n if (!isNil(recolorInformation.finishing)) {\n this.changeFinishing(recolorInformation.finishing);\n }\n\n this.isRecolored = true;\n }\n}\n","export class BuggyForProductionSchedule {\n private _id: number;\n private _name: string;\n private _amountPlannedInMeter: number;\n private _amountPlannedInPicks: number;\n\n public constructor(id: number, name: string, amountPlannedInMeter: number = 0, amountPlannedInPicks: number = 0) {\n this._id = id;\n this._name = name;\n this._amountPlannedInMeter = amountPlannedInMeter;\n this._amountPlannedInPicks = amountPlannedInPicks;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get amountPlannedInMeter(): number {\n return this._amountPlannedInMeter;\n }\n\n public set amountPlannedInMeter(amountPlannedInMeter: number) {\n this._amountPlannedInMeter = amountPlannedInMeter;\n }\n\n public get amountPlannedInPicks(): number {\n return this._amountPlannedInPicks;\n }\n\n public set amountPlannedInPicks(amountPlannedInPicks: number) {\n this._amountPlannedInPicks = amountPlannedInPicks;\n }\n\n public static fromJSON(buggyForProductionScheduleJSON: any): BuggyForProductionSchedule {\n return new BuggyForProductionSchedule(\n buggyForProductionScheduleJSON.id,\n buggyForProductionScheduleJSON.name,\n buggyForProductionScheduleJSON.amountPlannedInMeter,\n buggyForProductionScheduleJSON.amountPlannedInPicks\n );\n }\n\n public static fromJSONForSchedule(buggyForProductionScheduleJSON: any): BuggyForProductionSchedule {\n return new BuggyForProductionSchedule(\n buggyForProductionScheduleJSON.id,\n buggyForProductionScheduleJSON.name,\n buggyForProductionScheduleJSON.amountPlannedInM,\n buggyForProductionScheduleJSON.amountPlannedInPicks\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n amountPlannedInMeter: this.amountPlannedInMeter,\n amountPlannedInPicks: this.amountPlannedInPicks\n } as any as JSON;\n }\n}\n","export class CreelForProductionSchedule {\n private _id: number;\n private _name: string;\n private _isColoredYarnSplitPositionedCorrectly: boolean;\n\n public constructor(id: number, name: string, isColoredYarnSplitPositionedCorrectly: boolean) {\n this._id = id;\n this._name = name;\n this._isColoredYarnSplitPositionedCorrectly = isColoredYarnSplitPositionedCorrectly;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get isColoredYarnSplitPositionedCorrectly(): boolean {\n return this._isColoredYarnSplitPositionedCorrectly;\n }\n\n public set isColoredYarnSplitPositionedCorrectly(value: boolean) {\n this._isColoredYarnSplitPositionedCorrectly = value;\n }\n\n public static fromJSON(creelForProductionScheduleJSON: any): CreelForProductionSchedule {\n return new CreelForProductionSchedule(creelForProductionScheduleJSON.id, creelForProductionScheduleJSON.name, creelForProductionScheduleJSON.isColoredYarnSplitPositionedCorrectly);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n isColoredYarnSplitPositionedCorrectly: this._isColoredYarnSplitPositionedCorrectly\n } as any as JSON;\n }\n}\n","export class FreeZoneSettings {\r\n private _leftWidthInMillimeters: number;\r\n private _leftUseAsMaximum: boolean;\r\n private _rightWidthInMillimeters: number;\r\n private _rightUseAsMaximum: boolean;\r\n private _inBetweenWidthInMillimeters: number;\r\n private _inBetweenUseAsMaximum: boolean;\r\n\r\n public constructor(\r\n leftWidthInMillimeters: number,\r\n leftUseAsMaximum: boolean,\r\n rightWidthInMillimeters: number,\r\n rightUseAsMaximum: boolean,\r\n inBetweenWidthInMillimeters: number,\r\n inBetweenUseAsMaximum: boolean\r\n ) {\r\n this._leftWidthInMillimeters = leftWidthInMillimeters;\r\n this._leftUseAsMaximum = leftUseAsMaximum;\r\n this._rightWidthInMillimeters = rightWidthInMillimeters;\r\n this._rightUseAsMaximum = rightUseAsMaximum;\r\n this._inBetweenWidthInMillimeters = inBetweenWidthInMillimeters;\r\n this._inBetweenUseAsMaximum = inBetweenUseAsMaximum;\r\n }\r\n\r\n public get leftWidthInMillimeters(): number {\r\n return this._leftWidthInMillimeters;\r\n }\r\n\r\n public set leftWidthInMillimeters(value: number) {\r\n this._leftWidthInMillimeters = value;\r\n }\r\n\r\n public get leftUseAsMaximum(): boolean {\r\n return this._leftUseAsMaximum;\r\n }\r\n\r\n public set leftUseAsMaximum(value: boolean) {\r\n this._leftUseAsMaximum = value;\r\n }\r\n\r\n public get rightWidthInMillimeters(): number {\r\n return this._rightWidthInMillimeters;\r\n }\r\n\r\n public set rightWidthInMillimeters(value: number) {\r\n this._rightWidthInMillimeters = value;\r\n }\r\n\r\n public get rightUseAsMaximum(): boolean {\r\n return this._rightUseAsMaximum;\r\n }\r\n\r\n public set rightUseAsMaximum(value: boolean) {\r\n this._rightUseAsMaximum = value;\r\n }\r\n\r\n public get inBetweenWidthInMillimeters(): number {\r\n return this._inBetweenWidthInMillimeters;\r\n }\r\n\r\n public set inBetweenWidthInMillimeters(value: number) {\r\n this._inBetweenWidthInMillimeters = value;\r\n }\r\n\r\n public get inBetweenUseAsMaximum(): boolean {\r\n return this._inBetweenUseAsMaximum;\r\n }\r\n\r\n public set inBetweenUseAsMaximum(value: boolean) {\r\n this._inBetweenUseAsMaximum = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n leftWidthInMillimeters: this._leftWidthInMillimeters,\r\n leftUseAsMaximum: this._leftUseAsMaximum,\r\n rightWidthInMillimeters: this._rightWidthInMillimeters,\r\n rightUseAsMaximum: this._rightUseAsMaximum,\r\n inBetweenWidthInMillimeters: this._inBetweenWidthInMillimeters,\r\n inBetweenUseAsMaximum: this._inBetweenUseAsMaximum\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): FreeZoneSettings {\r\n return new FreeZoneSettings(json.leftWidthInMillimeters, json.leftUseAsMaximum, json.rightWidthInMillimeters, json.rightUseAsMaximum, json.inBetweenWidthInMillimeters, json.inBetweenUseAsMaximum);\r\n }\r\n}\r\n","import {LoomDeletePolicy} from '../loom-delete-policy/loom-delete-policy.enum';\r\n\r\nexport class LoomScheduleSettings {\r\n private _deletePolicy: LoomDeletePolicy;\r\n private _deletePolicyTimePeriodInDays?: number;\r\n private _scheduleFileAutoDeleteAfterStartOnLoom: boolean;\r\n private _scheduleOnlyStartFromQueue: boolean;\r\n\r\n public constructor(deletePolicy: LoomDeletePolicy, deletePolicyTimePeriodInDays: number | null, scheduleFileAutoDeleteAfterStartOnLoom: boolean, scheduleOnlyStartFromQueue: boolean) {\r\n this._deletePolicy = deletePolicy;\r\n this._deletePolicyTimePeriodInDays = deletePolicyTimePeriodInDays;\r\n this._scheduleFileAutoDeleteAfterStartOnLoom = scheduleFileAutoDeleteAfterStartOnLoom;\r\n this._scheduleOnlyStartFromQueue = scheduleOnlyStartFromQueue;\r\n }\r\n\r\n public get deletePolicy(): LoomDeletePolicy {\r\n return this._deletePolicy;\r\n }\r\n\r\n public set deletePolicy(value: LoomDeletePolicy) {\r\n this._deletePolicy = value;\r\n }\r\n\r\n public get deletePolicyTimePeriodInDays(): number | undefined {\r\n return this._deletePolicyTimePeriodInDays;\r\n }\r\n\r\n public set deletePolicyTimePeriodInDays(value: number | undefined) {\r\n this._deletePolicyTimePeriodInDays = value;\r\n }\r\n\r\n public get scheduleFileAutoDeleteAfterStartOnLoom(): boolean {\r\n return this._scheduleFileAutoDeleteAfterStartOnLoom;\r\n }\r\n\r\n public set scheduleFileAutoDeleteAfterStartOnLoom(value: boolean) {\r\n this._scheduleFileAutoDeleteAfterStartOnLoom = value;\r\n }\r\n\r\n public get scheduleOnlyStartFromQueue(): boolean {\r\n return this._scheduleOnlyStartFromQueue;\r\n }\r\n\r\n public set scheduleOnlyStartFromQueue(value: boolean) {\r\n this._scheduleOnlyStartFromQueue = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n deletePolicy: LoomDeletePolicy[this._deletePolicy],\r\n deletePolicyTimePeriodInDays: this._deletePolicyTimePeriodInDays,\r\n scheduleFileAutoDeleteAfterStartOnLoom: this._scheduleFileAutoDeleteAfterStartOnLoom,\r\n scheduleOnlyStartFromQueue: this._scheduleOnlyStartFromQueue\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): LoomScheduleSettings {\r\n return new LoomScheduleSettings(LoomDeletePolicy[json.deletePolicy as string], json.deletePolicyTimePeriodInDays, json.scheduleFileAutoDeleteAfterStartOnLoom, json.scheduleOnlyStartFromQueue);\r\n }\r\n}\r\n","import {NameGenerator} from '@domain/custom-settings/name-generator';\r\nimport {FontFamily} from '@domain/fonts/font-family.enum';\r\nimport {FontStyle} from '@domain/fonts/font-style.enum';\r\nimport {FontWeight} from '@domain/fonts/font-weight.enum';\r\nimport {AssertionUtils} from '@vdw/angular-component-library';\r\n\r\nexport class PathLabelSettings {\r\n private _nameGenerator: NameGenerator;\r\n private _technicalHeightInPicks: number;\r\n private _fontFamily: FontFamily;\r\n private _fontWeight: FontWeight;\r\n private _fontStyle: FontStyle;\r\n private _fontSizeInMM: number;\r\n private _heightInMM: number;\r\n\r\n public constructor(nameGenerator: NameGenerator, technicalHeightInPicks: number, fontFamily: FontFamily, fontWeight: FontWeight, fontStyle: FontStyle, fontSizeInMM: number, heightInMM: number) {\r\n this._nameGenerator = nameGenerator;\r\n this._technicalHeightInPicks = technicalHeightInPicks;\r\n this._fontFamily = fontFamily;\r\n this._fontWeight = fontWeight;\r\n this._fontStyle = fontStyle;\r\n this._fontSizeInMM = fontSizeInMM;\r\n this._heightInMM = heightInMM;\r\n }\r\n\r\n public get nameGenerator(): NameGenerator {\r\n return this._nameGenerator;\r\n }\r\n\r\n public set nameGenerator(value: NameGenerator) {\r\n this._nameGenerator = value;\r\n }\r\n\r\n public get technicalHeightInPicks(): number {\r\n return this._technicalHeightInPicks;\r\n }\r\n\r\n public set technicalHeightInPicks(value: number) {\r\n this._technicalHeightInPicks = value;\r\n }\r\n\r\n public get fontFamily(): FontFamily {\r\n return this._fontFamily;\r\n }\r\n\r\n public set fontFamily(value: FontFamily) {\r\n this._fontFamily = value;\r\n }\r\n\r\n public get fontWeight(): FontWeight {\r\n return this._fontWeight;\r\n }\r\n\r\n public set fontWeight(value: FontWeight) {\r\n this._fontWeight = value;\r\n }\r\n\r\n public get fontStyle(): FontStyle {\r\n return this._fontStyle;\r\n }\r\n\r\n public set fontStyle(value: FontStyle) {\r\n this._fontStyle = value;\r\n }\r\n\r\n public get fontSizeInMM(): number {\r\n return this._fontSizeInMM;\r\n }\r\n\r\n public set fontSizeInMM(value: number) {\r\n this._fontSizeInMM = value;\r\n }\r\n\r\n public get heightInMM(): number {\r\n return this._heightInMM;\r\n }\r\n\r\n public set heightInMM(value: number) {\r\n this._heightInMM = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n nameGenerator: this._nameGenerator.toJSON(),\r\n technicalHeightInPicks: this._technicalHeightInPicks,\r\n fontFamily: FontFamily[this._fontFamily],\r\n fontWeight: FontWeight[this._fontWeight],\r\n fontStyle: FontStyle[this._fontStyle],\r\n fontSizeInMM: this._fontSizeInMM,\r\n heightInMM: this._heightInMM\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): PathLabelSettings {\r\n return new PathLabelSettings(\r\n AssertionUtils.isNullOrUndefined(json.nameGenerator) ? null : NameGenerator.fromJSON(json.nameGenerator),\r\n json.technicalHeightInPicks,\r\n FontFamily[json.fontFamily as string],\r\n FontWeight[json.fontWeight as string],\r\n FontStyle[json.fontStyle as string],\r\n json.fontSizeInMM,\r\n json.heightInMM\r\n );\r\n }\r\n}\r\n","import {CustomSettings} from '@domain/custom-settings/custom-settings';\r\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\r\nimport {AssertionUtils} from '@vdw/angular-component-library';\r\nimport {FreeZoneSettings} from './free-zone-settings';\r\nimport {LoomScheduleSettings} from './loom-schedule-settings';\r\nimport {PathLabelSettings} from './path-label-settings';\r\nimport {RestZoneSettings} from './rest-zone-settings';\r\n\r\nexport class ProductionOrderCustomSettings extends CustomSettings {\r\n private _maximumLossInPercent: number;\r\n private _maxDifferenceInPathLengthInMillimeters: number;\r\n private _allowExceedingRequestedAmountOfOrderLineItems: boolean;\r\n private _allowPreFilterOnQualitiesAndColoredYarnSets: boolean;\r\n private _addProductionOrderToPlanningBoard: boolean;\r\n private _restZone: RestZoneSettings;\r\n private _freeZone: FreeZoneSettings;\r\n private _pathLabel: PathLabelSettings;\r\n private _loomSchedule: LoomScheduleSettings;\r\n private _epNameGenerator: NameGenerator;\r\n\r\n public constructor(\r\n id: number,\r\n nameGenerator: NameGenerator,\r\n maximumLossInPercent: number,\r\n maxDifferenceInPathLengthInMillimeters: number,\r\n allowExceedingRequestedAmountOfOrderLineItems: boolean,\r\n allowPreFilterOnQualitiesAndColoredYarnSets: boolean,\r\n addProductionOrderToPlanningBoard: boolean,\r\n restZone: RestZoneSettings,\r\n freeZone: FreeZoneSettings,\r\n pathLabel: PathLabelSettings,\r\n loomSchedule: LoomScheduleSettings,\r\n epNameGenerator: NameGenerator\r\n ) {\r\n super(id, nameGenerator);\r\n this._maximumLossInPercent = maximumLossInPercent;\r\n this._maxDifferenceInPathLengthInMillimeters = maxDifferenceInPathLengthInMillimeters;\r\n this._allowExceedingRequestedAmountOfOrderLineItems = allowExceedingRequestedAmountOfOrderLineItems;\r\n this._allowPreFilterOnQualitiesAndColoredYarnSets = allowPreFilterOnQualitiesAndColoredYarnSets;\r\n this._addProductionOrderToPlanningBoard = addProductionOrderToPlanningBoard;\r\n this._restZone = restZone;\r\n this._freeZone = freeZone;\r\n this._pathLabel = pathLabel;\r\n this._loomSchedule = loomSchedule;\r\n this._epNameGenerator = epNameGenerator;\r\n }\r\n\r\n public get maximumLossInPercent(): number {\r\n return this._maximumLossInPercent;\r\n }\r\n\r\n public set maximumLossInPercent(value: number) {\r\n this._maximumLossInPercent = value;\r\n }\r\n\r\n public get maxDifferenceInPathLengthInMillimeters(): number {\r\n return this._maxDifferenceInPathLengthInMillimeters;\r\n }\r\n\r\n public set maxDifferenceInPathLengthInMillimeters(value: number) {\r\n this._maxDifferenceInPathLengthInMillimeters = value;\r\n }\r\n\r\n public get allowExceedingRequestedAmountOfOrderLineItems(): boolean {\r\n return this._allowExceedingRequestedAmountOfOrderLineItems;\r\n }\r\n\r\n public set allowExceedingRequestedAmountOfOrderLineItems(value: boolean) {\r\n this._allowExceedingRequestedAmountOfOrderLineItems = value;\r\n }\r\n\r\n public get allowPreFilterOnQualitiesAndColoredYarnSets(): boolean {\r\n return this._allowPreFilterOnQualitiesAndColoredYarnSets;\r\n }\r\n\r\n public set allowPreFilterOnQualitiesAndColoredYarnSets(value: boolean) {\r\n this._allowPreFilterOnQualitiesAndColoredYarnSets = value;\r\n }\r\n\r\n public get addProductionOrderToPlanningBoard(): boolean {\r\n return this._addProductionOrderToPlanningBoard;\r\n }\r\n\r\n public set addProductionOrderToPlanningBoard(value: boolean) {\r\n this._addProductionOrderToPlanningBoard = value;\r\n }\r\n\r\n public get restZone(): RestZoneSettings {\r\n return this._restZone;\r\n }\r\n\r\n public set restZone(value: RestZoneSettings) {\r\n this._restZone = value;\r\n }\r\n\r\n public get freeZone(): FreeZoneSettings {\r\n return this._freeZone;\r\n }\r\n\r\n public set freeZone(value: FreeZoneSettings) {\r\n this._freeZone = value;\r\n }\r\n\r\n public get pathLabel(): PathLabelSettings {\r\n return this._pathLabel;\r\n }\r\n\r\n public set pathLabel(value: PathLabelSettings) {\r\n this._pathLabel = value;\r\n }\r\n\r\n public get loomSchedule(): LoomScheduleSettings {\r\n return this._loomSchedule;\r\n }\r\n\r\n public set loomSchedule(value: LoomScheduleSettings) {\r\n this._loomSchedule = value;\r\n }\r\n\r\n public get epNameGenerator(): NameGenerator {\r\n return this._epNameGenerator;\r\n }\r\n\r\n public set epNameGenerator(value: NameGenerator) {\r\n this._epNameGenerator = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n ...(super.toJSON() as any),\r\n maximumLossInPercent: this._maximumLossInPercent,\r\n maxDifferenceInPathLengthInMillimeters: this._maxDifferenceInPathLengthInMillimeters,\r\n allowExceedingRequestedAmountOfOrderLineItems: this._allowExceedingRequestedAmountOfOrderLineItems,\r\n allowPreFilterOnQualitiesAndColoredYarnSets: this._allowPreFilterOnQualitiesAndColoredYarnSets,\r\n addProductionOrderToPlanningBoard: this._addProductionOrderToPlanningBoard,\r\n restZone: this._restZone.toJSON(),\r\n freeZone: this._freeZone.toJSON(),\r\n pathLabel: this._pathLabel.toJSON(),\r\n loomSchedule: this._loomSchedule.toJSON(),\r\n epNameGenerator: this._epNameGenerator?.toJSON() ?? null\r\n };\r\n }\r\n\r\n public static fromJSON(json: any): ProductionOrderCustomSettings {\r\n return new ProductionOrderCustomSettings(\r\n json.id,\r\n NameGenerator.fromJSON(json.nameGenerator),\r\n json.maximumLossInPercent,\r\n json.maxDifferenceInPathLengthInMillimeters,\r\n json.allowExceedingRequestedAmountOfOrderLineItems,\r\n json.allowPreFilterOnQualitiesAndColoredYarnSets,\r\n json.addProductionOrderToPlanningBoard,\r\n RestZoneSettings.fromJSON(json.restZone),\r\n FreeZoneSettings.fromJSON(json.freeZone),\r\n PathLabelSettings.fromJSON(json.pathLabel),\r\n LoomScheduleSettings.fromJSON(json.loomSchedule),\r\n !AssertionUtils.isNullOrUndefined(json.epNameGenerator) ? NameGenerator.fromJSON(json.epNameGenerator) : null\r\n );\r\n }\r\n}\r\n","import {AssertionUtils} from '@vdw/angular-component-library';\r\nimport {RestZonePosition} from '../rest-zone/rest-zone-position.enum';\r\n\r\nexport class RestZoneSettings {\r\n private _restPosition: RestZonePosition;\r\n private _userDefinedRestPosition?: RestZonePosition;\r\n private _maxDentsRestToDivideOverFree: number;\r\n\r\n public constructor(restPosition: RestZonePosition, userDefinedRestPosition: RestZonePosition | null, maxDentsRestToDivideOverFree: number) {\r\n this._restPosition = restPosition;\r\n this._userDefinedRestPosition = userDefinedRestPosition;\r\n this._maxDentsRestToDivideOverFree = maxDentsRestToDivideOverFree;\r\n }\r\n\r\n public get restPosition(): RestZonePosition {\r\n return this._restPosition;\r\n }\r\n\r\n public set restPosition(value: RestZonePosition) {\r\n this._restPosition = value;\r\n }\r\n\r\n public get userDefinedRestPosition(): RestZonePosition | null {\r\n return this._userDefinedRestPosition;\r\n }\r\n\r\n public set userDefinedRestPosition(value: RestZonePosition | null) {\r\n this._userDefinedRestPosition = value;\r\n }\r\n\r\n public get maxDentsRestToDivideOverFree(): number {\r\n return this._maxDentsRestToDivideOverFree;\r\n }\r\n\r\n public set maxDentsRestToDivideOverFree(value: number) {\r\n this._maxDentsRestToDivideOverFree = value;\r\n }\r\n\r\n public toJSON(): JSON {\r\n return {\r\n restPosition: RestZonePosition[this._restPosition],\r\n userDefinedRestPosition: AssertionUtils.isNullOrUndefined(this._userDefinedRestPosition) ? null : RestZonePosition[this._userDefinedRestPosition],\r\n maxDentsRestToDivideOverFree: this._maxDentsRestToDivideOverFree\r\n } as any as JSON;\r\n }\r\n\r\n public static fromJSON(json: any): RestZoneSettings {\r\n return new RestZoneSettings(\r\n RestZonePosition[json.restPosition as string],\r\n AssertionUtils.isNullOrUndefined(json.userDefinedRestPosition) ? null : RestZonePosition[json.userDefinedRestPosition as string],\r\n json.maxDentsRestToDivideOverFree\r\n );\r\n }\r\n}\r\n","import {StringUtils} from '@application/helper/string-utils';\nimport {IdNameVersion} from '@domain/id-name-version';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\n\nexport class DrawingConfigurationWeaveQuality extends IdNameVersion {\n public get technicalNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.name, this.version);\n }\n\n public static fromJSON(weaveQualityJSON: any): DrawingConfigurationWeaveQuality {\n return new DrawingConfigurationWeaveQuality(weaveQualityJSON.id, weaveQualityJSON.name, weaveQualityJSON.version);\n }\n\n public static fromOverviewListMachineQuality(overviewListMachineQuality: OverviewListMachineQuality): DrawingConfigurationWeaveQuality {\n return new DrawingConfigurationWeaveQuality(overviewListMachineQuality.id, overviewListMachineQuality.technicalName, overviewListMachineQuality.version);\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {DrawingConfiguration} from '@domain/production-schedule/drawing-configuration';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {Color, ObjectUtils} from '@vdw/angular-component-library';\nimport {get, isNil, map} from 'lodash-es';\nimport {CommercialDimensionsCM} from './commercial-dimensions-cm';\nimport {DrawingConfigurationWeaveQuality} from './drawing-configuration-weave-quality';\nimport {DrawingImage} from './drawing-image';\n\nexport class DrawingConfigurationWithColorAndYarnSet extends DrawingConfiguration {\n private _colorSet: OverviewListColorSet;\n private _yarnSet: OverviewListYarnSet;\n\n public constructor(\n image: DrawingImage,\n mainColorsCreelPosition: OverviewListCreelPosition,\n borderColorsCreelPosition: OverviewListCreelPosition,\n colorSet: OverviewListColorSet,\n quality: DrawingConfigurationWeaveQuality,\n commercialDimensionsInMm: CommercialDimensions,\n yarnSet: OverviewListYarnSet,\n commercialDimensionsInCm?: CommercialDimensionsCM,\n id?: number\n ) {\n super(image, mainColorsCreelPosition, borderColorsCreelPosition, quality, commercialDimensionsInMm, commercialDimensionsInCm, id);\n this._colorSet = colorSet;\n this._yarnSet = yarnSet;\n }\n\n public get colorSet(): OverviewListColorSet {\n return this._colorSet;\n }\n\n public get yarnSet(): OverviewListYarnSet {\n return this._yarnSet;\n }\n\n public static fromJSON(drawingConfigurationJSON: any): DrawingConfigurationWithColorAndYarnSet {\n let colorSet: OverviewListColorSet = null;\n let yarnSet: OverviewListYarnSet = null;\n let mainColorsCreelPosition: OverviewListCreelPosition = null;\n let borderColorsCreelPosition: OverviewListCreelPosition = null;\n const quality = DrawingConfigurationWeaveQuality.fromJSON(drawingConfigurationJSON.quality);\n const commercialDimensionsInMm = isNil(drawingConfigurationJSON.commercialDimensions)\n ? null\n : {\n widthInMM: drawingConfigurationJSON.commercialDimensions.widthInMM,\n heightInMM: drawingConfigurationJSON.commercialDimensions.heightInMM\n };\n\n const commercialDimensionsInCm = ObjectUtils.tryGetValue(drawingConfigurationJSON.commercialDimensionsCM, null) as CommercialDimensionsCM;\n\n if (!isNil(drawingConfigurationJSON.colorSet)) {\n colorSet = OverviewListColorSet.fromJSON(drawingConfigurationJSON.colorSet);\n mainColorsCreelPosition = colorSet.creelPositions.find((creelPosition: OverviewListCreelPosition) => creelPosition.position === drawingConfigurationJSON.mainColorPosition);\n borderColorsCreelPosition = colorSet.creelPositions.find((creelPosition: OverviewListCreelPosition) => creelPosition.position === drawingConfigurationJSON.borderColorPosition);\n } else if (!isNil(drawingConfigurationJSON.mainColors) && !isNil(drawingConfigurationJSON.borderColors)) {\n mainColorsCreelPosition = new OverviewListCreelPosition(map(drawingConfigurationJSON.mainColors.creel, (colorJSON: any) => Color.fromJSON(colorJSON)));\n borderColorsCreelPosition = new OverviewListCreelPosition(map(drawingConfigurationJSON.borderColors.creel, (colorJSON: any) => Color.fromJSON(colorJSON)));\n }\n\n const image: DrawingImage = {\n id: null,\n data: drawingConfigurationJSON.image ?? null\n };\n\n if (!isNil(drawingConfigurationJSON.yarnSet)) {\n yarnSet = OverviewListYarnSet.fromJSON(drawingConfigurationJSON.yarnSet);\n }\n\n return new DrawingConfigurationWithColorAndYarnSet(\n image,\n mainColorsCreelPosition,\n borderColorsCreelPosition,\n colorSet,\n quality,\n commercialDimensionsInMm,\n yarnSet,\n commercialDimensionsInCm,\n drawingConfigurationJSON.id\n );\n }\n\n public toJSON(): JSON {\n return {\n qualityId: this.quality.id,\n mainColorPosition: this.mainColorsCreelPosition != null ? this.mainColorsCreelPosition.position : null,\n borderColorPosition: this.borderColorsCreelPosition != null ? this.borderColorsCreelPosition.position : null,\n commercialDimensions: {\n widthInMM: this.commercialDimensionsInMm.widthInMM,\n heightInMM: this.commercialDimensionsInMm.heightInMM\n },\n colorSet: !isNil(this.colorSet) ? this.colorSet.toJSON() : null,\n yarnSetId: get(this.yarnSet, 'id', null)\n } as any as JSON;\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {DrawingConfiguration} from '@domain/production-schedule/drawing-configuration';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {ObjectUtils} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {CommercialDimensionsCM} from './commercial-dimensions-cm';\nimport {DrawingConfigurationWeaveQuality} from './drawing-configuration-weave-quality';\n\nexport class DrawingConfigurationWithColoredYarnSet extends DrawingConfiguration {\n private _coloredYarnSet: OverviewListColoredYarnSet;\n\n public constructor(\n image: DrawingImage,\n mainColorsCreelPosition: OverviewListCreelPosition,\n borderColorsCreelPosition: OverviewListCreelPosition,\n quality: DrawingConfigurationWeaveQuality,\n commercialDimensionsInMm: CommercialDimensions,\n coloredYarnSet: OverviewListColoredYarnSet,\n commercialDimensionsInCm?: CommercialDimensionsCM,\n id?: number\n ) {\n super(image, mainColorsCreelPosition, borderColorsCreelPosition, quality, commercialDimensionsInMm, commercialDimensionsInCm, id);\n\n this._coloredYarnSet = coloredYarnSet;\n }\n\n public get coloredYarnSet(): OverviewListColoredYarnSet {\n return this._coloredYarnSet;\n }\n\n public static fromJSON(drawingConfigurationJSON: any): DrawingConfigurationWithColoredYarnSet {\n const coloredYarnSet = OverviewListColoredYarnSet.fromJSON(drawingConfigurationJSON.coloredYarnSet);\n const quality = DrawingConfigurationWeaveQuality.fromJSON(drawingConfigurationJSON.machineQuality);\n\n const commercialDimensionsInMm = isNil(drawingConfigurationJSON.commercialDimensions)\n ? null\n : {\n widthInMM: drawingConfigurationJSON.commercialDimensions.widthInMM,\n heightInMM: drawingConfigurationJSON.commercialDimensions.heightInMM\n };\n\n const commercialDimensionsInCm = ObjectUtils.tryGetValue(drawingConfigurationJSON.commercialDimensionsCM, null) as CommercialDimensionsCM;\n\n const mainColorsCreelPosition = coloredYarnSet.overviewListColorSet.creelPositions.find(\n (creelPosition: OverviewListCreelPosition) => creelPosition.position === drawingConfigurationJSON.mainColorPosition\n );\n\n const borderColorsCreelPosition = coloredYarnSet.overviewListColorSet.creelPositions.find(\n (creelPosition: OverviewListCreelPosition) => creelPosition.position === drawingConfigurationJSON.borderColorPosition\n );\n\n const image: DrawingImage = {\n id: null,\n data: drawingConfigurationJSON.image ?? null\n };\n\n return new DrawingConfigurationWithColoredYarnSet(\n image,\n mainColorsCreelPosition,\n borderColorsCreelPosition,\n quality,\n commercialDimensionsInMm,\n coloredYarnSet,\n commercialDimensionsInCm,\n drawingConfigurationJSON.id\n );\n }\n\n public toJSON(): JSON {\n return {\n qualityId: this.quality.id,\n mainColorPosition: this.mainColorsCreelPosition.position,\n borderColorPosition: this.borderColorsCreelPosition.position,\n commercialDimensions: {\n widthInMM: this.commercialDimensionsInMm.widthInMM,\n heightInMM: this.commercialDimensionsInMm.heightInMM\n },\n colorSet: this.coloredYarnSet?.overviewListColorSet?.toJSON(),\n coloredYarnSet: this.coloredYarnSet?.toJSON()\n } as any as JSON;\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {CommercialDimensionsCM} from './commercial-dimensions-cm';\nimport {DrawingConfigurationWeaveQuality} from './drawing-configuration-weave-quality';\n\nexport abstract class DrawingConfiguration {\n private _id: number;\n private _image: DrawingImage;\n private _mainColorsCreelPosition: OverviewListCreelPosition;\n private _borderColorsCreelPosition: OverviewListCreelPosition;\n private _quality: DrawingConfigurationWeaveQuality;\n private _commercialDimensionsInMm: CommercialDimensions;\n private _commercialDimensionsInCm: CommercialDimensionsCM;\n\n public constructor(\n image: DrawingImage,\n mainColorsCreelPosition: OverviewListCreelPosition,\n borderColorsCreelPosition: OverviewListCreelPosition,\n quality: DrawingConfigurationWeaveQuality,\n commercialDimensionsInMm: CommercialDimensions,\n commercialDimensionsInCm?: CommercialDimensionsCM,\n id?: number\n ) {\n this._id = id;\n this._image = image;\n this._mainColorsCreelPosition = mainColorsCreelPosition;\n this._borderColorsCreelPosition = borderColorsCreelPosition;\n this._quality = quality;\n this._commercialDimensionsInMm = commercialDimensionsInMm;\n this._commercialDimensionsInCm = commercialDimensionsInCm;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get image(): DrawingImage {\n return this._image;\n }\n\n public set image(image: DrawingImage) {\n this._image = image;\n }\n\n public get mainColorsCreelPosition(): OverviewListCreelPosition {\n return this._mainColorsCreelPosition;\n }\n\n public get borderColorsCreelPosition(): OverviewListCreelPosition {\n return this._borderColorsCreelPosition;\n }\n\n public get quality(): DrawingConfigurationWeaveQuality {\n return this._quality;\n }\n\n public get commercialDimensionsInMm(): CommercialDimensions {\n return this._commercialDimensionsInMm;\n }\n\n public get commercialDimensionsInCm(): CommercialDimensionsCM {\n return this._commercialDimensionsInCm;\n }\n\n public abstract toJSON(): JSON;\n}\n","export class DrawingShapeAbbreviation {\n private _id: number;\n private _code: string;\n private _shape: string;\n private _repeated: boolean;\n\n public constructor(id: number, code: string, shape: string, repeated: boolean) {\n this._id = id;\n this._code = code;\n this._shape = shape;\n this._repeated = repeated;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get code(): string {\n return this._code;\n }\n\n public set code(code: string) {\n this._code = code;\n }\n\n public get shape(): string {\n return this._shape;\n }\n\n public set shape(shape: string) {\n this._shape = shape;\n }\n\n public get repeated(): boolean {\n return this._repeated;\n }\n\n public set repeated(repeated: boolean) {\n this._repeated = repeated;\n }\n\n public static fromJSON(drawingShapeJSON: any): DrawingShapeAbbreviation {\n return new DrawingShapeAbbreviation(drawingShapeJSON?.shapeId, drawingShapeJSON?.code, drawingShapeJSON?.shape, drawingShapeJSON?.repeated);\n }\n\n public toJSON(): JSON {\n return {\n code: this._code,\n shape: this._shape,\n repeated: this._repeated\n } as any as JSON;\n }\n}\n","export enum DrawingType {\n EP = 'EP',\n BMP = 'BMP',\n TFT = 'TFT',\n PATHLABEL = 'PATHLABEL',\n NON_PRODUCTION_ITEM = 'NON_PRODUCTION_ITEM',\n PVD = 'PVD',\n MANUAL_NON_PRODUCTION_ITEM = 'MANUAL_NON_PRODUCTION_ITEM'\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {isNil, map} from 'lodash-es';\nimport {DrawingConfiguration} from './drawing-configuration';\nimport {DrawingConfigurationWithColorAndYarnSet} from './drawing-configuration-with-color-and-yarn-set';\nimport {DrawingImage} from './drawing-image';\nimport {MappingForDesign} from './mapping-for-design';\n\nexport abstract class Drawing {\n private _id: number;\n private _name: string;\n private _drawingType: DrawingType;\n private _image: DrawingImage;\n private _dimensionsInPixels: DimensionsInPx;\n private _shape: string;\n private _shapeId: number;\n private _code: string;\n private _configurations: DrawingConfiguration[];\n private _mappingForDesign: MappingForDesign[];\n private _used: boolean;\n private _threadByThread: boolean;\n private _repeated: boolean;\n private _nrColumnsForWeftSelection: number;\n private _sizeInKB: number;\n private _dateModified: Date;\n private _missingDesign: boolean;\n\n protected constructor(\n id: number,\n name: string,\n drawingType: DrawingType,\n image: DrawingImage,\n dimensionsInPixels: DimensionsInPx,\n shape: string,\n used: boolean,\n repeated: boolean,\n mappingForDesign: MappingForDesign[] = [],\n code?: string,\n configurations: DrawingConfiguration[] = [],\n threadByThread: boolean = false,\n nrColumnsForWeftSelection?: number,\n sizeInKB?: number,\n dateModified?: Date,\n missingDesign?: boolean,\n shapeId?: number\n ) {\n this._id = id;\n this._name = name;\n this._drawingType = drawingType;\n this._image = image;\n this._dimensionsInPixels = dimensionsInPixels;\n this._shape = shape;\n this._code = code;\n this._configurations = configurations;\n this._mappingForDesign = mappingForDesign;\n this._image = image;\n this._used = used;\n this._threadByThread = threadByThread;\n this._repeated = repeated;\n this._nrColumnsForWeftSelection = nrColumnsForWeftSelection ?? 0;\n this._sizeInKB = sizeInKB ?? 0;\n this._dateModified = dateModified;\n this._missingDesign = missingDesign;\n this._shapeId = shapeId;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get drawingType(): DrawingType {\n return this._drawingType;\n }\n\n public get image(): DrawingImage {\n return this._image;\n }\n\n public set image(image: DrawingImage) {\n this._image = image;\n }\n\n public get dimensionsInPixels(): DimensionsInPx {\n return this._dimensionsInPixels;\n }\n\n public set dimensionsInPixels(dimensionsInPixels: DimensionsInPx) {\n this._dimensionsInPixels = dimensionsInPixels;\n }\n\n public get shape(): string {\n return this._shape;\n }\n\n public set shape(shape: string) {\n this._shape = shape;\n }\n\n public get shapeId(): number {\n return this._shapeId;\n }\n\n public set shapeId(shapeId: number) {\n this._shapeId = shapeId;\n }\n\n public get configurations(): DrawingConfiguration[] {\n return this._configurations;\n }\n\n public set configurations(drawingConfigurations: DrawingConfiguration[]) {\n this._configurations = drawingConfigurations;\n }\n\n public get code(): string {\n return this._code;\n }\n\n public set code(code: string) {\n this._code = code;\n }\n\n public get mappingForDesign(): MappingForDesign[] {\n return this._mappingForDesign;\n }\n\n public set mappingForDesign(mappingForDesign: MappingForDesign[]) {\n this._mappingForDesign = mappingForDesign;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(used: boolean) {\n this._used = used;\n }\n\n public get threadByThread(): boolean {\n return this._threadByThread;\n }\n\n public get repeated(): boolean {\n return this._repeated;\n }\n\n public set repeated(repeated: boolean) {\n this._repeated = repeated;\n }\n\n public get nrColumnsForWeftSelection(): number {\n return this._nrColumnsForWeftSelection;\n }\n\n public get sizeInKB(): number {\n return this._sizeInKB;\n }\n\n public get dateModified(): Date {\n return this._dateModified;\n }\n\n public get missingDesign(): boolean {\n return this._missingDesign;\n }\n\n public set missingDesign(missingDesign: boolean) {\n this._missingDesign = missingDesign;\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n imageId: this.image.id,\n dimensionsInPx: {\n widthInPx: this.dimensionsInPixels.widthInPx,\n heightInPx: this.dimensionsInPixels.heightInPx\n },\n shape: this.shape,\n shapeId: this.shapeId,\n threadByThread: this.threadByThread,\n drawingCode: this.code,\n drawingType: `${DrawingType[this.drawingType]}`,\n configurations: map(this.configurations, (configuration: DrawingConfigurationWithColorAndYarnSet) => configuration.toJSON()),\n mappingForDesign: map(this.mappingForDesign, (mappingForDesign: MappingForDesign) => mappingForDesign.toJSON()),\n repeated: this.repeated,\n nrColumnsForWeftSelection: this.nrColumnsForWeftSelection\n } as any as JSON;\n }\n\n public toFullJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n image: !isNil(this.image)\n ? {\n id: this.image.id\n }\n : null,\n dimensionsInPx: {\n widthInPx: this.dimensionsInPixels.widthInPx,\n heightInPx: this.dimensionsInPixels.heightInPx\n },\n shape: this.shape,\n shapeId: this.shapeId,\n threadByThread: this.threadByThread,\n drawingCode: this.code,\n drawingType: `${DrawingType[this.drawingType]}`,\n configurations: map(this.configurations, (configuration: DrawingConfigurationWithColorAndYarnSet) => configuration.toJSON()),\n mappingForDesign: map(this.mappingForDesign, (mappingForDesign: MappingForDesign) => mappingForDesign.toJSON()),\n repeated: this.repeated,\n missingDesign: this.missingDesign,\n nrColumnsForWeftSelection: this.nrColumnsForWeftSelection\n } as any as JSON;\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {isNil} from 'lodash-es';\nimport {DrawingImage} from './drawing-image';\n\nexport class EpDrawing extends Drawing {\n private _cutbarsLength: CutbarsLength;\n private _epId: number;\n\n public constructor(\n id: number,\n name: string,\n image: DrawingImage,\n dimensionsInPixels: DimensionsInPx,\n cutbarsLength: CutbarsLength,\n shape: string,\n used: boolean,\n repeated: boolean,\n epId: number,\n sizeInKB?: number,\n shapeId?: number\n ) {\n super(id, name, DrawingType.EP, image, dimensionsInPixels, shape, used, repeated, [], null, [], false, null, sizeInKB, undefined, undefined, shapeId);\n this._cutbarsLength = cutbarsLength;\n this._epId = epId;\n }\n\n public static fromJSON(drawingJSON: any): EpDrawing {\n const image: DrawingImage = isNil(drawingJSON.image)\n ? {}\n : {\n id: drawingJSON.image.id || null,\n data: drawingJSON.image.data || null\n };\n\n return new EpDrawing(\n drawingJSON.id,\n drawingJSON.name,\n image,\n {\n widthInPx: drawingJSON.dimensionsInPx.widthInPx,\n heightInPx: drawingJSON.dimensionsInPx.heightInPx\n },\n null,\n drawingJSON.shape,\n false,\n drawingJSON.repeated,\n drawingJSON.epId,\n drawingJSON.sizeInKB,\n drawingJSON.shapeId\n );\n }\n\n public get cutbarsLength(): CutbarsLength {\n return this._cutbarsLength;\n }\n\n public get epId(): number {\n return this._epId;\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n imageId: this.image.id,\n drawingType: `${DrawingType[this.drawingType]}`,\n shape: this.shape,\n shapeId: this.shapeId\n } as any as JSON;\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {EpDrawing} from '@domain/production-schedule/ep-drawing';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {NotImplementedError} from '@vdw/angular-component-library';\nimport {isUndefined} from 'lodash-es';\nimport {TechnicalDimensions} from '../technical-dimensions';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\nimport {ProductionScheduleItemRecolorInformation} from './production-schedule-item-recolor-information';\n\nexport class EpProductionScheduleItemInPathGroup extends ProductionScheduleItemInPathGroup {\n private _cutbarsLength: CutbarsLength;\n\n public constructor(\n drawing: EpDrawing,\n quantity: number,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n cutbarsLength: CutbarsLength,\n isProductionItem: boolean,\n mainColorPosition: number,\n borderColorPosition: number,\n guid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n orderLineId: number = null,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null\n ) {\n super(\n drawing,\n quantity,\n commercialDimensionsInMM,\n technicalDimensions,\n isProductionItem,\n mainColorPosition,\n borderColorPosition,\n guid,\n amountProduced,\n status,\n DrawingType.EP,\n orderLineId,\n id,\n epId,\n totalWovenHeightInPicks,\n totalWovenHeightInMM,\n amountIncomplete\n );\n\n this._cutbarsLength = cutbarsLength;\n }\n\n public get cutbarsLength(): CutbarsLength {\n return this._cutbarsLength;\n }\n\n public static fromJSON(productionScheduleItemInPathGroup: any): EpProductionScheduleItemInPathGroup {\n throw new NotImplementedError();\n }\n\n public getCommercialCutbarsLengthInMM(): number {\n return this.cutbarsLength.cutbarBefore.commercialLengthInMM + this.cutbarsLength.cutbarAfter.commercialLengthInMM;\n }\n\n public getTechnicalCutbarsLengthInNumberOfPicks(): number {\n return this.cutbarsLength.cutbarBefore.technicalLengthInNumberOfPicks + this.cutbarsLength.cutbarAfter.technicalLengthInNumberOfPicks;\n }\n\n public getCutbarInformation(): CutbarsLength {\n return this.cutbarsLength;\n }\n\n public canBeRecolored(): boolean {\n return true;\n }\n\n public hasCutbarBefore(): boolean {\n return !isUndefined(this.cutbarsLength.cutbarBefore);\n }\n\n public hasCutbarAfter(): boolean {\n return !isUndefined(this.cutbarsLength.cutbarAfter);\n }\n\n public toJSON(): JSON {\n const result = super.toJSON();\n\n result['cutbarBefore'] = {\n commercialLengthInMM: this.cutbarsLength.cutbarBefore.commercialLengthInMM,\n technicalLengthInPicks: this.cutbarsLength.cutbarBefore.technicalLengthInNumberOfPicks\n };\n result['cutbarAfter'] = {\n commercialLengthInMM: this.cutbarsLength.cutbarAfter.commercialLengthInMM,\n technicalLengthInPicks: this.cutbarsLength.cutbarAfter.technicalLengthInNumberOfPicks\n };\n\n return result;\n }\n\n public recolorDrawing(recolorInformation: ProductionScheduleItemRecolorInformation): void {\n this.drawing.image.data = recolorInformation.imageData;\n this.commercialDimensionsInMM = recolorInformation.commercialDimensionsInMM;\n this.mainColorPosition = recolorInformation.mainColorPosition;\n this.borderColorPosition = recolorInformation.borderColorPosition;\n this.isRecolored = true;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {FinishingCutbarsInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-cutbars-information';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {FinishingAndFinishingTemplateLabelOverviewList} from '@presentation/pages/textile-data/finishing-template/overview/finishing-and-finishing-template-label-overview-list';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {isNil, map} from 'lodash-es';\n\nexport class FinishingForProductionSchedule {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n private readonly _cutbarsInformation: FinishingCutbarsInformation;\n private readonly _labels: FinishingAndFinishingTemplateLabelOverviewList[];\n private readonly _finishingType: FinishingType;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n cutbarsInformation: FinishingCutbarsInformation,\n labels: FinishingAndFinishingTemplateLabelOverviewList[] = null,\n finishingType: FinishingType = null\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._cutbarsInformation = cutbarsInformation;\n this._labels = labels;\n this._finishingType = finishingType;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._name, this._version);\n }\n\n public get cutbarsInformation(): FinishingCutbarsInformation {\n return this._cutbarsInformation;\n }\n\n public get labels(): FinishingAndFinishingTemplateLabelOverviewList[] {\n return this._labels;\n }\n\n public get finishingType(): FinishingType {\n return this._finishingType;\n }\n\n public static fromJSON(finishingJSON: any): FinishingForProductionSchedule {\n return !isNil(finishingJSON)\n ? new FinishingForProductionSchedule(\n finishingJSON.id,\n finishingJSON.name,\n finishingJSON.version,\n FinishingCutbarsInformation.fromJSON(finishingJSON.cutbarsInformation),\n map(finishingJSON.labels, (label: any) => FinishingAndFinishingTemplateLabelOverviewList.fromJSON(label)),\n finishingJSON.finishingType\n )\n : null;\n }\n\n public static fromOverviewListFinishing(overviewListFinishing: OverviewListFinishing): FinishingForProductionSchedule {\n return new FinishingForProductionSchedule(\n overviewListFinishing.id,\n overviewListFinishing.name,\n overviewListFinishing.version,\n overviewListFinishing.cutbarsInformation,\n overviewListFinishing.labels,\n overviewListFinishing.finishingType\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version,\n cutbarsInformation: !isNil(this._cutbarsInformation) ? this._cutbarsInformation.toJSON() : null\n } as any as JSON;\n }\n}\n","import {ZoneErrors} from '@domain/production-schedule/zone-errors';\nimport {ZoneWarnings} from '@domain/production-schedule/zone-warnings';\nimport {isNil} from 'lodash-es';\n\nexport class FreeZone {\n private _technicalWidthInDents: number;\n private _startDent: number;\n private _coloredYarnSetPathNr: number;\n private _errors: ZoneErrors;\n private _warnings: ZoneWarnings;\n\n public constructor(technicalWidthInDents: number, startDent: number, coloredYarnSetPathNr: number, errors?: ZoneErrors, warnings?: ZoneWarnings) {\n this._technicalWidthInDents = technicalWidthInDents;\n this._startDent = startDent;\n this._coloredYarnSetPathNr = coloredYarnSetPathNr;\n this._errors = errors;\n this._warnings = warnings;\n }\n\n public set technicalWidthInDents(value: number) {\n this._technicalWidthInDents = value;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public get startDent(): number {\n return this._startDent;\n }\n\n public set startDent(value: number) {\n this._startDent = value;\n }\n\n public get coloredYarnSetPathNr(): number {\n return this._coloredYarnSetPathNr;\n }\n\n public set coloredYarnSetPathNr(value: number) {\n this._coloredYarnSetPathNr = value;\n }\n\n public get errors(): ZoneErrors {\n return this._errors;\n }\n\n public set errors(value: ZoneErrors) {\n this._errors = value;\n }\n\n public get warnings(): ZoneWarnings {\n return this._warnings;\n }\n\n public set warnings(value: ZoneWarnings) {\n this._warnings = value;\n }\n\n public static fromJSON(freeZoneJSON: any): FreeZone {\n return new FreeZone(freeZoneJSON.technicalWidthInDents, freeZoneJSON.startDent, freeZoneJSON.coloredYarnSetPathNr, freeZoneJSON.errors, freeZoneJSON.warnings);\n }\n\n public hasErrors(): boolean {\n return !isNil(this.errors);\n }\n\n public toJSON(): JSON {\n return {\n technicalWidthInDents: this._technicalWidthInDents,\n startDent: this._startDent,\n startPick: 0,\n coloredYarnSetPathNr: this._coloredYarnSetPathNr\n } as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {isNil} from 'lodash-es';\nimport {SettingsForFreeZonePosition} from '../settings-for-free-zone-position';\n\nexport class InitialFreeZone {\n private _left: SettingsForFreeZonePosition;\n private _inBetween: SettingsForFreeZonePosition;\n private _right: SettingsForFreeZonePosition;\n private _pattern: Pattern;\n\n public constructor(left: SettingsForFreeZonePosition, inBetween: SettingsForFreeZonePosition, right: SettingsForFreeZonePosition, pattern: Pattern) {\n this._left = left;\n this._inBetween = inBetween;\n this._right = right;\n this._pattern = pattern;\n\n if (this._pattern?.visualisations?.some((x: PatternVisualisation) => x?.isWeavePatternVisualisation())) {\n this._pattern.clearName();\n }\n }\n\n public get left(): SettingsForFreeZonePosition {\n return this._left;\n }\n\n public get inBetween(): SettingsForFreeZonePosition {\n return this._inBetween;\n }\n\n public get right(): SettingsForFreeZonePosition {\n return this._right;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public static fromJSON(initialFreeZonesJSON: any): InitialFreeZone {\n return new InitialFreeZone(\n this.settingsForFreeZonePositionFromJSON(initialFreeZonesJSON.left),\n this.settingsForFreeZonePositionFromJSON(initialFreeZonesJSON.inBetween),\n this.settingsForFreeZonePositionFromJSON(initialFreeZonesJSON.right),\n !isNil(initialFreeZonesJSON.pattern) ? Pattern.fromJSON(initialFreeZonesJSON.pattern) : null\n );\n }\n\n private static settingsForFreeZonePositionFromJSON(settingsForFreeZonePositionJSON: any): SettingsForFreeZonePosition {\n return !isNil(settingsForFreeZonePositionJSON)\n ? settingsForFreeZonePositionJSON\n : {\n commercialWidthInMM: null,\n technicalWidthInDents: null,\n useAsMaximum: null\n };\n }\n\n public toJSON(): JSON {\n return {\n left: {\n commercialWidthInMM: this._left.commercialWidthInMM,\n technicalWidthInDents: this._left.technicalWidthInDents,\n useAsMaximum: this._left.useAsMaximum\n },\n inBetween: {\n commercialWidthInMM: this._inBetween.commercialWidthInMM,\n technicalWidthInDents: this._inBetween.technicalWidthInDents,\n useAsMaximum: this._inBetween.useAsMaximum\n },\n right: {\n commercialWidthInMM: this._right.commercialWidthInMM,\n technicalWidthInDents: this._right.technicalWidthInDents,\n useAsMaximum: this._right.useAsMaximum\n },\n pattern: this._pattern.toJSON()\n } as any as JSON;\n }\n\n public isValid(): boolean {\n return (\n !isNil(this.pattern) &&\n !isNil(this.left) &&\n !isNil(this.left.commercialWidthInMM) &&\n !isNil(this.left.technicalWidthInDents) &&\n !isNil(this.inBetween) &&\n !isNil(this.inBetween.commercialWidthInMM) &&\n !isNil(this.inBetween.technicalWidthInDents) &&\n !isNil(this.right) &&\n !isNil(this.right.commercialWidthInMM) &&\n !isNil(this.right.technicalWidthInDents)\n );\n }\n}\n","import {isMultipleOf} from '@application/validators/is-multiple-of-validator';\nimport {Pattern} from '@domain/pattern';\nimport {JutePosition} from '@domain/production-schedule/jute-position.enum';\nimport {isNil} from 'lodash-es';\n\nexport class JuteInformationForPart {\n private _position: JutePosition;\n private _commercialHeightInMM: number;\n private _technicalHeightInPicks: number;\n private _pattern: Pattern;\n\n public constructor(position: JutePosition, commercialHeightInMM: number, technicalHeightInPicks: number, pattern: Pattern) {\n this._position = position;\n this._commercialHeightInMM = commercialHeightInMM;\n this._technicalHeightInPicks = technicalHeightInPicks;\n this._pattern = pattern;\n }\n\n public get position(): JutePosition {\n return this._position;\n }\n\n public set position(value: JutePosition) {\n this._position = value;\n }\n\n public get commercialHeightInMM(): number {\n return this._commercialHeightInMM;\n }\n\n public set commercialHeightInMM(value: number) {\n this._commercialHeightInMM = value;\n }\n\n public get technicalHeightInPicks(): number {\n return this._technicalHeightInPicks;\n }\n\n public set technicalHeightInPicks(value: number) {\n this._technicalHeightInPicks = value;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public set pattern(value: Pattern) {\n this._pattern = value;\n }\n\n public static fromJSON(juteInformationJSON: any): JuteInformationForPart {\n return new JuteInformationForPart(\n juteInformationJSON.position,\n juteInformationJSON.commercialHeightInMM,\n juteInformationJSON.technicalHeightInPicks,\n Pattern.fromJSON(juteInformationJSON.pattern)\n );\n }\n\n public static isValid(juteInformationForPart: JuteInformationForPart, multiple: number): boolean {\n return (\n !isNil(juteInformationForPart.position) &&\n juteInformationForPart.technicalHeightInPicks > 0 &&\n isMultipleOf(juteInformationForPart.technicalHeightInPicks, multiple) &&\n !isNil(juteInformationForPart.commercialHeightInMM) &&\n juteInformationForPart.commercialHeightInMM > 0 &&\n !isNil(juteInformationForPart.pattern)\n );\n }\n\n public toJSON(): JSON {\n return {\n position: this.position,\n commercialHeightInMM: this.commercialHeightInMM,\n technicalHeightInPicks: this.technicalHeightInPicks,\n pattern: this.pattern?.toJSON() ?? null\n } as any as JSON;\n }\n}\n","import {JuteInformationForPart} from '@domain/production-schedule/jute-information-for-part';\nimport {isNil} from 'lodash-es';\n\nexport class JuteInformation {\n private _juteBefore: JuteInformationForPart;\n private _juteAfter: JuteInformationForPart;\n\n public constructor(juteBefore: JuteInformationForPart, juteAfter: JuteInformationForPart) {\n this._juteBefore = juteBefore;\n this._juteAfter = juteAfter;\n }\n\n public get juteBefore(): JuteInformationForPart {\n return this._juteBefore;\n }\n\n public set juteBefore(value: JuteInformationForPart) {\n this._juteBefore = value;\n }\n\n public get juteAfter(): JuteInformationForPart {\n return this._juteAfter;\n }\n\n public set juteAfter(value: JuteInformationForPart) {\n this._juteAfter = value;\n }\n\n public static fromJSON(juteInformationJSON: any): JuteInformation {\n let juteBeforeInformationPart: JuteInformationForPart = null;\n let juteAfterInformationPart: JuteInformationForPart = null;\n\n if (!isNil(juteInformationJSON)) {\n const juteBefore = juteInformationJSON.juteBefore;\n const juteAfter = juteInformationJSON.juteAfter;\n\n if (!isNil(juteBefore)) {\n juteBeforeInformationPart = JuteInformationForPart.fromJSON(juteBefore);\n }\n\n if (!isNil(juteAfter)) {\n juteAfterInformationPart = JuteInformationForPart.fromJSON(juteAfter);\n }\n }\n\n return new JuteInformation(juteBeforeInformationPart, juteAfterInformationPart);\n }\n\n public toJSON(): JSON {\n return {\n juteBefore: !isNil(this.juteBefore) ? this.juteBefore.toJSON() : null,\n juteAfter: !isNil(this.juteAfter) ? this.juteAfter.toJSON() : null\n } as any as JSON;\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {Pattern} from '@domain/pattern';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {ManualNonProductionItemDrawing} from '@domain/production-schedule/manual-non-production-item-drawing';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {TechnicalDimensions} from '../technical-dimensions';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\nimport {ProductionScheduleItemRecolorInformation} from './production-schedule-item-recolor-information';\n\nexport class JuteProductionScheduleItemInPathGroup extends ProductionScheduleItemInPathGroup {\n private _pattern: Pattern;\n\n public constructor(\n drawing: ManualNonProductionItemDrawing,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n mainColorPosition: number,\n borderColorPosition: number,\n guid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null\n ) {\n super(\n drawing,\n 1,\n commercialDimensionsInMM,\n technicalDimensions,\n false,\n mainColorPosition,\n borderColorPosition,\n guid,\n amountProduced,\n status,\n DrawingType.MANUAL_NON_PRODUCTION_ITEM,\n null,\n id,\n epId,\n totalWovenHeightInPicks,\n totalWovenHeightInMM,\n amountIncomplete\n );\n\n this._pattern = drawing.pattern;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public static fromJSON(productionScheduleItemInPathGroupJSON: any): JuteProductionScheduleItemInPathGroup {\n let manualNonProductionItemDrawing = ManualNonProductionItemDrawing.fromJSON(productionScheduleItemInPathGroupJSON.design);\n manualNonProductionItemDrawing.pattern = Pattern.fromJSON(productionScheduleItemInPathGroupJSON.pattern);\n return new JuteProductionScheduleItemInPathGroup(\n manualNonProductionItemDrawing,\n productionScheduleItemInPathGroupJSON.commercialDimensions,\n productionScheduleItemInPathGroupJSON.technicalDimensions,\n productionScheduleItemInPathGroupJSON.mainColorPosition,\n productionScheduleItemInPathGroupJSON.borderColorPosition,\n null,\n productionScheduleItemInPathGroupJSON.amountProduced,\n AssertionUtils.isNullOrUndefined(productionScheduleItemInPathGroupJSON.status) ? null : ProductionScheduleItemInPathGroupStatus[`${productionScheduleItemInPathGroupJSON.status}`],\n productionScheduleItemInPathGroupJSON.id,\n productionScheduleItemInPathGroupJSON.epId,\n productionScheduleItemInPathGroupJSON.nrWovenInPicks,\n productionScheduleItemInPathGroupJSON.nrWovenInMM,\n productionScheduleItemInPathGroupJSON.amountIncomplete\n );\n }\n\n public getCommercialCutbarsLengthInMM(): number {\n return 0.0;\n }\n\n public getTechnicalCutbarsLengthInNumberOfPicks(): number {\n return 0;\n }\n\n public getCutbarInformation(): CutbarsLength {\n return {\n cutbarBefore: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n },\n cutbarAfter: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n }\n };\n }\n\n public canBeRecolored(): boolean {\n return false;\n }\n\n public hasCutbarBefore(): boolean {\n return false;\n }\n\n public hasCutbarAfter(): boolean {\n return false;\n }\n\n public toJSON(): JSON {\n const result = super.toJSON();\n\n result['pattern'] = this._pattern.toJSON();\n\n return result;\n }\n\n public recolorDrawing(recolorInformation: ProductionScheduleItemRecolorInformation): void {\n throw new Error('RecolorDrawing not supported.');\n }\n}\n","export enum LoomDeletePolicy {\r\n NONE = 'NONE',\r\n SCHEDULE_WOVEN = 'SCHEDULE_WOVEN',\r\n TIME_PERIOD = 'TIME_PERIOD'\r\n}\r\n","import {WeaveStructureForMachineQuality} from '@domain/textile-data/weave-structure/weave-structure-for-machine-quality';\n\nexport class WeaveStructureForProductionSchedule {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n private _picksPerColorLine: number;\n private readonly _dentRepeat: number;\n private _sendRepeat: number;\n private _numberOfCloths: number;\n private readonly _numberOfGroundYarns: number;\n private readonly _numberOfCreelPositions: number;\n private readonly _numberOfSolenoidsPerPile: number;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n picksPerColorLine: number,\n dentRepeat: number,\n sendRepeat: number,\n numberOfCloths: number,\n numberOfGroundYarns: number,\n numberOfCreelPositions?: number,\n numberOfSolenoidsPerPile?: number\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._picksPerColorLine = picksPerColorLine;\n this._dentRepeat = dentRepeat;\n this._sendRepeat = sendRepeat;\n this._numberOfCloths = numberOfCloths;\n this._numberOfGroundYarns = numberOfGroundYarns;\n this._numberOfCreelPositions = numberOfCreelPositions;\n this._numberOfSolenoidsPerPile = numberOfSolenoidsPerPile;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get picksPerColorLine(): number {\n return this._picksPerColorLine;\n }\n\n public set picksPerColorLine(value: number) {\n this._picksPerColorLine = value;\n }\n\n public get dentRepeat(): number {\n return this._dentRepeat;\n }\n\n public get sendRepeat(): number {\n return this._sendRepeat;\n }\n\n public set sendRepeat(value: number) {\n this._sendRepeat = value;\n }\n\n public get numberOfCloths(): number {\n return this._numberOfCloths;\n }\n\n public set numberOfCloths(value: number) {\n this._numberOfCloths = value;\n }\n\n public get numberOfGroundYarns(): number {\n return this._numberOfGroundYarns;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public get numberOfSolenoidsPerPile(): number {\n return this._numberOfSolenoidsPerPile;\n }\n\n public static fromJSON(weaveStructureJSON: any): WeaveStructureForProductionSchedule {\n return new WeaveStructureForProductionSchedule(\n weaveStructureJSON.id,\n weaveStructureJSON.name,\n weaveStructureJSON.version,\n weaveStructureJSON.picksPerColorLine,\n weaveStructureJSON.dentRepeat,\n weaveStructureJSON.sendRepeat,\n weaveStructureJSON.numberOfCloths,\n weaveStructureJSON.numberOfGroundYarns,\n weaveStructureJSON.numberOfCreelPositions,\n weaveStructureJSON.nrSolenoidsPerPile\n );\n }\n\n public static fromWeaveStructure(weaveStructure: WeaveStructureForMachineQuality): WeaveStructureForProductionSchedule {\n return new WeaveStructureForProductionSchedule(\n weaveStructure.id,\n weaveStructure.name,\n weaveStructure.version,\n weaveStructure.picksPerColorLine,\n weaveStructure.dentRepeat,\n weaveStructure.sendRepeat,\n weaveStructure.numberOfCloths,\n weaveStructure.numberOfGroundYarns\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version,\n picksPerColorLine: this._picksPerColorLine,\n dentRepeat: this._dentRepeat,\n sendRepeat: this._sendRepeat,\n numberOfCloths: this._numberOfCloths,\n numberOfGroundYarns: this._numberOfGroundYarns\n } as any as JSON;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {WeaveStructureForProductionSchedule} from '@domain/production-schedule/weave-structure-for-production-schedule';\nimport {GeneralJuteSettings} from '@domain/textile-data/machine-quality/general-jute-settings';\nimport {Jute} from '@domain/textile-data/machine-quality/jute';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\n\nexport class MachineQualityForProductionSchedule {\n private _id: number;\n private _technicalName: string;\n private _version: number;\n private _weaveStructure: WeaveStructureForProductionSchedule;\n private _reedDensity: number;\n private _pickDensity: number;\n private _weftDensity: number;\n private _practicalPickDensity: number;\n private _buggyLengthMin: number;\n private _buggyLengthMax: number;\n private _tolerance: number;\n private _picksPerHourMin: number;\n private readonly _used: boolean;\n private _numberOfColumnsToDropForWeftSelection: number;\n private _jute: Jute[];\n private _juteGeneralSettings: GeneralJuteSettings;\n\n public constructor(\n id: number,\n technicalName: string,\n version: number,\n weaveStructure: WeaveStructureForProductionSchedule,\n reedDensity: number,\n pickDensity: number,\n weftDensity: number,\n practicalPickDensity: number,\n buggyLengthMin: number,\n buggyLengthMax: number,\n tolerance: number,\n picksPerHourMin: number,\n used: boolean,\n numberOfColumnsToDropForWeftSelection: number,\n juteConditions: Jute[],\n juteGeneralSettings: GeneralJuteSettings\n ) {\n this._id = id;\n this._technicalName = technicalName;\n this._weaveStructure = weaveStructure;\n this._reedDensity = reedDensity;\n this._pickDensity = pickDensity;\n this._weftDensity = weftDensity;\n this._practicalPickDensity = practicalPickDensity;\n this._buggyLengthMin = buggyLengthMin;\n this._buggyLengthMax = buggyLengthMax;\n this._tolerance = tolerance;\n this._picksPerHourMin = picksPerHourMin;\n this._version = version;\n this._used = used;\n this._numberOfColumnsToDropForWeftSelection = numberOfColumnsToDropForWeftSelection;\n this._jute = juteConditions;\n this._juteGeneralSettings = juteGeneralSettings;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get technicalName(): string {\n return this._technicalName;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get technicalNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.technicalName, this.version);\n }\n\n public get weaveStructure(): WeaveStructureForProductionSchedule {\n return this._weaveStructure;\n }\n\n public get reedDensity(): number {\n return this._reedDensity;\n }\n\n public get pickDensity(): number {\n return this._pickDensity;\n }\n\n public set pickDensity(value: number) {\n this._pickDensity = value;\n }\n\n public set reedDensity(value: number) {\n this._reedDensity = value;\n }\n\n public get weftDensity(): number {\n return this._weftDensity;\n }\n\n public get practicalPickDensity(): number {\n return this._practicalPickDensity;\n }\n\n public get buggyLengthMin(): number {\n return this._buggyLengthMin;\n }\n\n public get buggyLengthMax(): number {\n return this._buggyLengthMax;\n }\n\n public get tolerance(): number {\n return this._tolerance;\n }\n\n public get picksPerHourMin(): number {\n return this._picksPerHourMin;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public get numberOfColumnsToDropForWeftSelection(): number {\n return this._numberOfColumnsToDropForWeftSelection;\n }\n\n public get juteConditions(): Jute[] {\n return this._jute;\n }\n\n public set juteConditions(value: Jute[]) {\n this._jute = value;\n }\n\n public get juteGeneralSettings(): GeneralJuteSettings {\n return this._juteGeneralSettings;\n }\n\n public set juteGeneralSettings(value: GeneralJuteSettings) {\n this._juteGeneralSettings = value;\n }\n\n public static fromWeaveQuality(weaveQuality: WeaveQuality): MachineQualityForProductionSchedule {\n return new MachineQualityForProductionSchedule(\n weaveQuality.id,\n weaveQuality.technicalName,\n weaveQuality.version,\n weaveQuality.singleWidth\n ? WeaveStructureForProductionSchedule.fromWeaveStructure(weaveQuality.singleWidth.weaveStructure)\n : WeaveStructureForProductionSchedule.fromWeaveStructure(weaveQuality.doubleWidth.bottomWeaveStructure),\n weaveQuality.reedDensityInDentsPerMM,\n weaveQuality.pickDensityInPicksPerMM,\n weaveQuality.weftDensityInDentsPerMM,\n weaveQuality.practicalPickDensityInPicksPerMM,\n weaveQuality.buggyLengthMinInMM,\n weaveQuality.buggyLengthMaxInMM,\n weaveQuality.tolerance,\n weaveQuality.picksPerHourMin,\n weaveQuality.used,\n weaveQuality.numberOfColumnsToDropForWeftSelection,\n weaveQuality.jute,\n weaveQuality.juteGeneralSettings\n );\n }\n\n public static fromJSON(machineQualityJSON: any): MachineQualityForProductionSchedule {\n let result = null;\n\n if (!AssertionUtils.isNullOrUndefined(machineQualityJSON)) {\n result = new MachineQualityForProductionSchedule(\n machineQualityJSON.id,\n machineQualityJSON.technicalName,\n machineQualityJSON.version,\n !AssertionUtils.isNullOrUndefined(machineQualityJSON.weaveStructure) ? WeaveStructureForProductionSchedule.fromJSON(machineQualityJSON.weaveStructure) : null,\n machineQualityJSON.reedDensity,\n machineQualityJSON.pickDensity,\n machineQualityJSON.weftDensityInWefts,\n machineQualityJSON.practicalPickDensity,\n machineQualityJSON.buggyLengthMinInMM,\n machineQualityJSON.buggyLengthMaxInMM,\n machineQualityJSON.tolerance,\n machineQualityJSON.picksPerHourMin,\n machineQualityJSON.used,\n machineQualityJSON.nrColumnsToDropForWeftSelection,\n map(machineQualityJSON.jute, (jute: any) => {\n return Jute.fromJSON(jute);\n }),\n machineQualityJSON.juteGeneralSettings\n );\n }\n\n return result;\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n technicalName: this._technicalName,\n version: this._version,\n weaveStructure: this._weaveStructure?.toJSON(),\n reedDensity: this._reedDensity,\n pickDensity: this._pickDensity,\n weftDensityInWefts: this._weftDensity,\n practicalPickDensity: this._practicalPickDensity,\n buggyLengthMinInMM: this._buggyLengthMin,\n buggyLengthMaxInMM: this._buggyLengthMax,\n tolerance: this._tolerance,\n picksPerHourMin: this._picksPerHourMin,\n nrColumnsToDropForWeftSelection: this._numberOfColumnsToDropForWeftSelection\n } as any as JSON;\n }\n}\n","export enum MachineRoleCode {\n 'M-P',\n 'M-B'\n}\n","export class MachineSummaryJacquard {\n private _id: number;\n private _amountOfPossiblePaths: number;\n private _isSisal: boolean;\n private _allowEmptySpaceInPath: boolean;\n\n public constructor(id: number, amountOfPossiblePaths: number, isSisal: boolean, allowEmptySpaceInPath: boolean) {\n this._id = id;\n this._amountOfPossiblePaths = amountOfPossiblePaths;\n this._isSisal = isSisal;\n this._allowEmptySpaceInPath = allowEmptySpaceInPath;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get amountOfPossiblePaths(): number {\n return this._amountOfPossiblePaths;\n }\n\n public get isSisal(): boolean {\n return this._isSisal;\n }\n\n public set isSisal(value: boolean) {\n this._isSisal = value;\n }\n\n public get allowEmptySpaceInPath(): boolean {\n return this._allowEmptySpaceInPath;\n }\n\n public static fromJSON(machineSummaryJacquard: any): MachineSummaryJacquard {\n return new MachineSummaryJacquard(machineSummaryJacquard.id, machineSummaryJacquard.amountOfPossiblePaths, machineSummaryJacquard.isSisal, machineSummaryJacquard.allowEmptySpaceInPath);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n amountOfPossiblePaths: this._amountOfPossiblePaths,\n isSisal: this._isSisal,\n allowEmptySpaceInPath: this._allowEmptySpaceInPath\n } as any as JSON;\n }\n}\n","import {MachineRoleCode} from '@domain/machine/machine-role-code';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineSummaryJacquard} from '@domain/production-schedule/machine-summary-jacquard';\nimport {isEqual, isNil} from 'lodash-es';\n\nexport class MachineSummary {\n private _id: number;\n private _name: string;\n private _dentsForFabric: number;\n private _jacquard: MachineSummaryJacquard;\n private _roleCode: MachineRoleCode;\n private _type: MachineType;\n private _hmiVersion: string;\n private _remote: boolean;\n\n public constructor(id: number, name: string, dentsForFabric: number, jacquard: MachineSummaryJacquard, roleCode: MachineRoleCode, type: MachineType, hmiVersion?: string, remote?: boolean) {\n this._id = id;\n this._name = name;\n this._dentsForFabric = dentsForFabric;\n this._jacquard = jacquard;\n this._roleCode = roleCode;\n this._type = type;\n this._hmiVersion = hmiVersion;\n this._remote = remote ?? false;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get dentsForFabric(): number {\n return this._dentsForFabric;\n }\n\n public set dentsForFabric(value: number) {\n this._dentsForFabric = value;\n }\n\n public get jacquard(): MachineSummaryJacquard {\n return this._jacquard;\n }\n\n public get roleCode(): MachineRoleCode {\n return this._roleCode;\n }\n\n public set roleCode(roleCode: MachineRoleCode) {\n this._roleCode = roleCode;\n }\n\n public get type(): MachineType {\n return this._type;\n }\n\n public get hmiVersion(): string {\n return this._hmiVersion;\n }\n\n public get remote(): boolean {\n return this._remote;\n }\n\n public static fromJSON(machineSummaryJSON: any, fromProductionSchedule: boolean = false): MachineSummary {\n return new MachineSummary(\n machineSummaryJSON.id,\n machineSummaryJSON.name,\n machineSummaryJSON.dentsForFabric,\n !isNil(machineSummaryJSON.jacquard) ? MachineSummaryJacquard.fromJSON(machineSummaryJSON.jacquard) : null,\n MachineRoleCode[`${machineSummaryJSON.roleCode}`],\n MachineType[`${fromProductionSchedule ? machineSummaryJSON.type : machineSummaryJSON.machineType}`],\n machineSummaryJSON.hmiVersion,\n machineSummaryJSON.remoteMachine\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n dentsForFabric: this._dentsForFabric,\n jacquard: !isNil(this._jacquard) ? this._jacquard.toJSON() : null,\n roleCode: !isNil(this._roleCode) ? MachineRoleCode[this._roleCode] : null,\n type: MachineType[this._type],\n remoteMachine: this._remote\n } as any as JSON;\n }\n\n public getTotalWidthInDents(): number {\n return this.dentsForFabric;\n }\n\n public allowsEmptySpaceInPaths(): boolean {\n return isNil(this._jacquard) || this._jacquard.allowEmptySpaceInPath;\n }\n\n public isMachinePremium(): boolean {\n return !isNil(this._roleCode) && isEqual(this._roleCode, MachineRoleCode['M-P']);\n }\n\n public canHaveRestAndFreeZonesAndPathLabels(): boolean {\n return this._type === MachineType.CARPET_LOOM || this._type === MachineType.VELVET;\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Pattern} from '@domain/pattern';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\n\nexport class ManualNonProductionItemDrawing extends Drawing {\n private _pattern: Pattern;\n\n public constructor(id: number, name: string, dimensionsInPixels: DimensionsInPx, pattern: Pattern) {\n super(id, name, DrawingType.MANUAL_NON_PRODUCTION_ITEM, null, dimensionsInPixels, '', false, false);\n this._pattern = pattern;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public set pattern(value: Pattern) {\n this._pattern = value;\n }\n\n public static fromJSON(drawingJSON: any): ManualNonProductionItemDrawing {\n return new ManualNonProductionItemDrawing(\n drawingJSON.id,\n drawingJSON.name,\n {\n widthInPx: drawingJSON.dimensionsInPx.widthInPx,\n heightInPx: drawingJSON.dimensionsInPx.heightInPx\n },\n Pattern.fromJSON(drawingJSON.pattern)\n );\n }\n}\n","export class MappingForDesign {\n private _from: number;\n private _to: number;\n\n public constructor(from: number, to: number) {\n this._from = from;\n this._to = to;\n }\n\n public get from(): number {\n return this._from;\n }\n\n public get to(): number {\n return this._to;\n }\n\n public static fromJSON(mappingForDesignJSON: any): MappingForDesign {\n return new MappingForDesign(mappingForDesignJSON.from, mappingForDesignJSON.to);\n }\n\n public toJSON(): JSON {\n return {\n from: this._from,\n to: this._to\n } as any as JSON;\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\n\nexport class NonProductionItemDrawing extends Drawing {\n public constructor(id: number, name: string, dimensionsInPixels: DimensionsInPx, shape: string, used: boolean, repeated: boolean, shapeId?: number) {\n super(id, name, DrawingType.NON_PRODUCTION_ITEM, null, dimensionsInPixels, shape, used, repeated, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, shapeId);\n }\n\n public static fromJSON(drawingJSON: any): NonProductionItemDrawing {\n return new NonProductionItemDrawing(\n drawingJSON.id,\n drawingJSON.name,\n {\n widthInPx: drawingJSON.dimensionsInPx.widthInPx,\n heightInPx: drawingJSON.dimensionsInPx.heightInPx\n },\n drawingJSON.shape,\n false,\n drawingJSON.repeated,\n drawingJSON.shapeId\n );\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {TechnicalDimensions} from '@domain/technical-dimensions';\nimport {isNil, noop} from 'lodash-es';\nimport {NonProductionItemDrawing} from './non-production-item-drawing';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\n\nexport class NonProductionItemInPathGroup extends ProductionScheduleItemInPathGroup {\n public constructor(\n drawing: NonProductionItemDrawing,\n quantity: number,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n mainColorPosition: number,\n borderColorPosition: number,\n uuid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null\n ) {\n super(\n drawing,\n quantity,\n commercialDimensionsInMM,\n technicalDimensions,\n false,\n mainColorPosition,\n borderColorPosition,\n uuid,\n amountProduced,\n status,\n DrawingType.NON_PRODUCTION_ITEM,\n null,\n id,\n epId,\n totalWovenHeightInPicks,\n totalWovenHeightInMM,\n amountIncomplete\n );\n }\n\n public static fromJSON(productionScheduleItemInPathGroup: any): NonProductionItemInPathGroup {\n return new NonProductionItemInPathGroup(\n NonProductionItemDrawing.fromJSON(productionScheduleItemInPathGroup.design),\n productionScheduleItemInPathGroup.quantity,\n productionScheduleItemInPathGroup.commercialDimensions,\n productionScheduleItemInPathGroup.technicalDimensions,\n productionScheduleItemInPathGroup.mainColorPosition,\n productionScheduleItemInPathGroup.borderColorPosition,\n null,\n productionScheduleItemInPathGroup.amountProduced,\n isNil(productionScheduleItemInPathGroup.status) ? null : ProductionScheduleItemInPathGroupStatus[`${productionScheduleItemInPathGroup.status}`],\n productionScheduleItemInPathGroup.id,\n productionScheduleItemInPathGroup.epId,\n productionScheduleItemInPathGroup.nrWovenInPicks,\n productionScheduleItemInPathGroup.nrWovenInMM,\n productionScheduleItemInPathGroup.amountIncomplete\n );\n }\n\n public getCommercialCutbarsLengthInMM(): number {\n return 0;\n }\n\n public getCutbarInformation(): CutbarsLength {\n return {\n cutbarBefore: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n },\n cutbarAfter: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n }\n };\n }\n\n public getTechnicalCutbarsLengthInNumberOfPicks(): number {\n return 0;\n }\n\n public canBeRecolored(): boolean {\n return false;\n }\n\n public recolorDrawing(): void {\n noop();\n }\n}\n","import {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {PathLabelType} from '@domain/production-schedule/path-label-type.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class PathLabelInformationForPart {\n private _nameGenerator: NameGenerator;\n private _pathLabelType: PathLabelType;\n\n public constructor(nameGenerator: NameGenerator, pathLabelType: PathLabelType) {\n this._nameGenerator = nameGenerator;\n this._pathLabelType = pathLabelType;\n }\n\n public get nameGenerator(): NameGenerator {\n return this._nameGenerator;\n }\n\n public set nameGenerator(value: NameGenerator) {\n this._nameGenerator = value;\n }\n\n public get pathLabelType(): PathLabelType {\n return this._pathLabelType;\n }\n\n public set pathLabelType(value: PathLabelType) {\n this._pathLabelType = value;\n }\n\n public static fromJSON(pathLabelInformationForPartJSON: any): PathLabelInformationForPart {\n if (AssertionUtils.isNullOrUndefined(pathLabelInformationForPartJSON)) {\n return null;\n }\n\n return new PathLabelInformationForPart(\n AssertionUtils.isNullOrUndefined(pathLabelInformationForPartJSON.nameGenerator) ? null : NameGenerator.fromJSON(pathLabelInformationForPartJSON.nameGenerator),\n pathLabelInformationForPartJSON.pathLabelType\n );\n }\n\n public toJSON(): JSON {\n return {\n nameGenerator: this._nameGenerator?.toJSON(),\n pathLabelType: this._pathLabelType\n } as any as JSON;\n }\n\n public isText(): boolean {\n return this._pathLabelType === PathLabelType.TEXT;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PathLabelInformationForPart} from '@domain/production-schedule/path-label-information-for-part';\nimport {FontSettings} from '@domain/textile-data/finishing-and-finishing-template/finishing/font-settings';\nimport {isNil} from 'lodash-es';\n\nexport class PathLabelInformation {\n private _pathLabelBefore: PathLabelInformationForPart;\n private _pathLabelAfter: PathLabelInformationForPart;\n private _fontSettings: FontSettings;\n private _labelHeightInMM: number;\n private _labelHeightInPicks: number;\n private _labelFontSizeInMM: number;\n private _pattern: Pattern;\n\n public constructor(\n pathLabelBefore: PathLabelInformationForPart,\n pathLabelAfter: PathLabelInformationForPart,\n fontSettings: FontSettings,\n labelHeightInMM: number,\n labelHeightInPicks: number,\n labelFontSizeInMM: number,\n pattern: Pattern\n ) {\n this._pathLabelBefore = pathLabelBefore;\n this._pathLabelAfter = pathLabelAfter;\n this._fontSettings = fontSettings;\n this._labelHeightInPicks = labelHeightInPicks;\n this._labelHeightInMM = labelHeightInMM;\n this._labelFontSizeInMM = labelFontSizeInMM;\n this._pattern = pattern;\n }\n\n public get pathLabelBefore(): PathLabelInformationForPart {\n return this._pathLabelBefore;\n }\n\n public set pathLabelBefore(value: PathLabelInformationForPart) {\n this._pathLabelBefore = value;\n }\n\n public get pathLabelAfter(): PathLabelInformationForPart {\n return this._pathLabelAfter;\n }\n\n public set pathLabelAfter(value: PathLabelInformationForPart) {\n this._pathLabelAfter = value;\n }\n\n public get fontSettings(): FontSettings {\n return this._fontSettings;\n }\n\n public set fontSettings(fontSettings: FontSettings) {\n this._fontSettings = fontSettings;\n }\n\n public get labelHeightInMM(): number {\n return this._labelHeightInMM;\n }\n\n public set labelHeightInMM(labelHeightInMM: number) {\n this._labelHeightInMM = labelHeightInMM;\n }\n\n public get labelHeightInPicks(): number {\n return this._labelHeightInPicks;\n }\n\n public set labelHeightInPicks(labelHeightInPicks: number) {\n this._labelHeightInPicks = labelHeightInPicks;\n }\n\n public get labelFontSizeInMM(): number {\n return this._labelFontSizeInMM;\n }\n\n public set labelFontSizeInMM(labelFontSizeInMM: number) {\n this._labelFontSizeInMM = labelFontSizeInMM;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public static fromJSON(pathLabelInformationJSON: any): PathLabelInformation {\n return isNil(pathLabelInformationJSON)\n ? null\n : new PathLabelInformation(\n PathLabelInformationForPart.fromJSON(pathLabelInformationJSON.pathLabelBefore),\n PathLabelInformationForPart.fromJSON(pathLabelInformationJSON.pathLabelAfter),\n FontSettings.fromPathLabelInformationJSON(pathLabelInformationJSON),\n pathLabelInformationJSON.commercialLabelHeightInMM,\n pathLabelInformationJSON.technicalLabelHeightInPicks,\n pathLabelInformationJSON.commercialLabelFontSizeInMM,\n Pattern.fromJSON(pathLabelInformationJSON.pattern)\n );\n }\n\n public hasAddedPathLabelBefore(): boolean {\n return !isNil(this.pathLabelBefore);\n }\n\n public hasAddedPathLabelAfter(): boolean {\n return !isNil(this.pathLabelAfter);\n }\n\n public toJSON(): JSON {\n let result = null;\n\n if (this.hasAddedPathLabelBefore() || this.hasAddedPathLabelAfter()) {\n result = {\n pathLabelBefore: this.hasAddedPathLabelBefore() ? this._pathLabelBefore.toJSON() : null,\n pathLabelAfter: this.hasAddedPathLabelAfter() ? this._pathLabelAfter.toJSON() : null,\n commercialLabelFontSizeInMM: this._labelFontSizeInMM,\n technicalLabelHeightInPicks: this._labelHeightInPicks,\n commercialLabelHeightInMM: this._labelHeightInMM,\n pattern: this._pattern?.toJSON() ?? null,\n ...this._fontSettings.toJSON()\n } as any as JSON;\n }\n\n return result;\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {isNil} from 'lodash-es';\n\nexport class PathLabelDrawing extends Drawing {\n public constructor(id: number, name: string, image: DrawingImage, dimensionsInPixels: DimensionsInPx, shape: string, used: boolean, repeated: boolean, shapeId?: number) {\n super(id, name, DrawingType.PATHLABEL, image, dimensionsInPixels, shape, used, repeated, undefined, undefined, undefined, undefined, undefined, undefined, undefined, undefined, shapeId);\n }\n\n public static fromJSON(drawingJSON: any): PathLabelDrawing {\n const image: DrawingImage = isNil(drawingJSON.image)\n ? {}\n : {\n id: drawingJSON.image.id || null,\n data: drawingJSON.image.data || null\n };\n\n return new PathLabelDrawing(\n drawingJSON.id,\n drawingJSON.name,\n image,\n {\n widthInPx: drawingJSON.dimensionsInPx.widthInPx,\n heightInPx: drawingJSON.dimensionsInPx.heightInPx\n },\n drawingJSON.shape,\n false,\n drawingJSON.repeated,\n drawingJSON.shapeId\n );\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {PathLabelDrawing} from '@domain/production-schedule/path-label-drawing';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {TechnicalDimensions} from '@domain/technical-dimensions';\nimport {isNil} from 'lodash-es';\nimport {DrawingType} from './drawing-type.enum';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\n\nexport class PathLabelProductionScheduleItemInPathGroup extends ProductionScheduleItemInPathGroup {\n public constructor(\n drawing: Drawing,\n quantity: number,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n mainColorPosition: number,\n borderColorPosition: number,\n uuid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null\n ) {\n super(\n drawing,\n quantity,\n commercialDimensionsInMM,\n technicalDimensions,\n false,\n mainColorPosition,\n borderColorPosition,\n uuid,\n amountProduced,\n status,\n DrawingType.PATHLABEL,\n null,\n id,\n epId,\n totalWovenHeightInPicks,\n totalWovenHeightInMM,\n amountIncomplete\n );\n }\n\n public static fromJSON(productionScheduleItemInPathGroup: any): PathLabelProductionScheduleItemInPathGroup {\n return new PathLabelProductionScheduleItemInPathGroup(\n PathLabelDrawing.fromJSON(productionScheduleItemInPathGroup.design),\n productionScheduleItemInPathGroup.quantity,\n productionScheduleItemInPathGroup.commercialDimensions,\n productionScheduleItemInPathGroup.technicalDimensions,\n productionScheduleItemInPathGroup.mainColorPosition,\n productionScheduleItemInPathGroup.borderColorPosition,\n null,\n productionScheduleItemInPathGroup.amountProduced,\n isNil(productionScheduleItemInPathGroup.status) ? null : ProductionScheduleItemInPathGroupStatus[`${productionScheduleItemInPathGroup.status}`],\n productionScheduleItemInPathGroup.id,\n productionScheduleItemInPathGroup.epId,\n productionScheduleItemInPathGroup.nrWovenInPicks,\n productionScheduleItemInPathGroup.nrWovenInMM,\n productionScheduleItemInPathGroup.amountIncomplete\n );\n }\n\n public getCommercialCutbarsLengthInMM(): number {\n return 0;\n }\n\n public getCutbarInformation(): CutbarsLength {\n return {\n cutbarBefore: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n },\n cutbarAfter: {\n commercialLengthInMM: 0,\n technicalLengthInNumberOfPicks: 0\n }\n };\n }\n\n public getTechnicalCutbarsLengthInNumberOfPicks(): number {\n return 0;\n }\n\n public canBeRecolored(): boolean {\n return true;\n }\n\n public recolorDrawing(drawing: PathLabelDrawing): void {\n this.drawing = drawing;\n this.isRecolored = true;\n }\n}\n","export enum PathLabelType {\n QR_CODE = 'QRCODE',\n TEXT = 'TEXT'\n}\n","export enum ProductionScheduleItemInPathGroupStatus {\n CHANGED,\n ADDED,\n REMOVED,\n NORMAL\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {CutbarsLength} from '@domain/production-schedule/cutbars-length';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {ProductionScheduleOrderLineWithQuantity} from '@presentation/pages/texfab/production-schedule/add/drawing-library/views/order-lines-view/production-schedule-order-line-with-quantity';\nimport {AssertionUtils, UuidUtils} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {TechnicalDimensions} from '../technical-dimensions';\nimport {MachineQualityForProductionSchedule} from './machine-quality-for-production-schedule';\nimport {ProductionScheduleItemInPathGroupStatus} from './production-schedule-item-in-path-group-status';\nimport {ProductionScheduleItemRecolorInformation} from './production-schedule-item-recolor-information';\n\nexport abstract class ProductionScheduleItemInPathGroup {\n private _id: number;\n private _drawing: Drawing;\n private _quantity: number;\n private _commercialDimensionsInMM: CommercialDimensions;\n private _technicalDimensions: TechnicalDimensions;\n private _isProductionItem: boolean;\n private _mainColorPosition: number;\n private _borderColorPosition: number;\n private _uuid: string;\n private _isRecolored = false;\n private _orderLineId: number;\n private _amountProduced: number;\n private _status: ProductionScheduleItemInPathGroupStatus;\n private _epId: number;\n private _totalWovenHeightInPicks: number;\n private _totalWovenHeightInMM: number;\n private _amountIncomplete: number;\n private _machineQuality: MachineQualityForProductionSchedule;\n private _scheduleItemType: DrawingType;\n private _orderline: ProductionScheduleOrderLineWithQuantity;\n\n protected constructor(\n drawing: Drawing,\n quantity: number,\n commercialDimensionsInMM: CommercialDimensions,\n technicalDimensions: TechnicalDimensions,\n isProductionItem: boolean,\n mainColorPosition: number,\n borderColorPosition: number,\n uuid: string,\n amountProduced: number,\n status: ProductionScheduleItemInPathGroupStatus,\n scheduleItemType: DrawingType,\n orderLineId: number = null,\n id: number = null,\n epId: number = null,\n totalWovenHeightInPicks: number = null,\n totalWovenHeightInMM: number = null,\n amountIncomplete: number = null,\n machineQuality: MachineQualityForProductionSchedule = null\n ) {\n this._drawing = drawing;\n this._quantity = quantity;\n this._commercialDimensionsInMM = commercialDimensionsInMM;\n this._technicalDimensions = technicalDimensions;\n this._isProductionItem = isProductionItem;\n this._mainColorPosition = mainColorPosition;\n this._borderColorPosition = borderColorPosition;\n this._orderLineId = orderLineId;\n this._amountProduced = amountProduced;\n this._status = status;\n this._id = id;\n this._epId = epId;\n this._totalWovenHeightInPicks = totalWovenHeightInPicks;\n this._totalWovenHeightInMM = totalWovenHeightInMM;\n this._amountIncomplete = amountIncomplete;\n this._machineQuality = machineQuality;\n this._scheduleItemType = scheduleItemType;\n\n if (!isNil(uuid)) {\n this._uuid = uuid;\n } else {\n this.createUuid();\n }\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get drawing(): Drawing {\n return this._drawing;\n }\n\n public set drawing(value: Drawing) {\n this._drawing = value;\n }\n\n public get scheduleItemType(): DrawingType {\n return this._scheduleItemType;\n }\n\n public set scheduleItemType(value: DrawingType) {\n this._scheduleItemType = value;\n }\n\n public get quantity(): number {\n return this._quantity;\n }\n\n public set quantity(quantity: number) {\n this._quantity = quantity;\n }\n\n public get commercialDimensionsInMM(): CommercialDimensions {\n return this._commercialDimensionsInMM;\n }\n\n public set commercialDimensionsInMM(value: CommercialDimensions) {\n this._commercialDimensionsInMM = value;\n }\n\n public get technicalDimensions(): TechnicalDimensions {\n return this._technicalDimensions;\n }\n\n public set technicalDimensions(value: TechnicalDimensions) {\n this._technicalDimensions = value;\n }\n\n public get isProductionItem(): boolean {\n return this._isProductionItem;\n }\n\n public set isProductionItem(isProductionItem: boolean) {\n this._isProductionItem = isProductionItem;\n }\n\n public get mainColorPosition(): number {\n return this._mainColorPosition;\n }\n\n public set mainColorPosition(value: number) {\n this._mainColorPosition = value;\n }\n\n public get borderColorPosition(): number {\n return this._borderColorPosition;\n }\n\n public set borderColorPosition(value: number) {\n this._borderColorPosition = value;\n }\n\n public get uuid(): string {\n return this._uuid;\n }\n\n public get isRecolored(): boolean {\n return this._isRecolored;\n }\n\n public set isRecolored(value: boolean) {\n this._isRecolored = value;\n }\n\n public get orderLineId(): number {\n return this._orderLineId;\n }\n\n public set orderLineId(value: number) {\n this._orderLineId = value;\n }\n\n public set amountProduced(value: number) {\n this._amountProduced = value;\n }\n\n public get amountProduced(): number {\n return this._amountProduced;\n }\n\n public get status(): ProductionScheduleItemInPathGroupStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleItemInPathGroupStatus) {\n this._status = value;\n }\n\n public get epId(): number {\n return this._epId;\n }\n\n public get totalWovenHeightInPicks(): number {\n return this._totalWovenHeightInPicks;\n }\n\n public get totalWovenHeightInMM(): number {\n return this._totalWovenHeightInMM;\n }\n\n public get amountIncomplete(): number {\n return this._amountIncomplete;\n }\n\n public get machineQuality(): MachineQualityForProductionSchedule {\n return this._machineQuality;\n }\n\n public set machineQuality(value: MachineQualityForProductionSchedule) {\n this._machineQuality = value;\n }\n\n public get orderline(): ProductionScheduleOrderLineWithQuantity {\n return this._orderline;\n }\n\n public set orderline(value: ProductionScheduleOrderLineWithQuantity) {\n this._orderline = value;\n }\n\n public adjustQuantityOfDrawingsInPathGroup(value: number): void {\n this._quantity = value;\n }\n\n public createUuid(): void {\n this._uuid = UuidUtils.generateV4Uuid();\n }\n\n public adjustUuid(value: string): void {\n this._uuid = value;\n }\n\n public hasOrderLine(): boolean {\n return !AssertionUtils.isNullOrUndefined(this._orderLineId);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n design: this._drawing.toFullJSON(),\n quantity: this._quantity,\n production: this._isProductionItem,\n mainColorPosition: this._mainColorPosition,\n borderColorPosition: this._borderColorPosition,\n commercialDimensions: {\n heightInMM: !AssertionUtils.isNullOrUndefined(this._commercialDimensionsInMM) ? this._commercialDimensionsInMM.heightInMM : null,\n widthInMM: !AssertionUtils.isNullOrUndefined(this._commercialDimensionsInMM) ? this._commercialDimensionsInMM.widthInMM : null\n },\n technicalDimensions: {\n heightInPicks: !AssertionUtils.isNullOrUndefined(this._technicalDimensions) ? this._technicalDimensions.heightInPicks : null,\n widthInDents: !AssertionUtils.isNullOrUndefined(this._technicalDimensions) ? this._technicalDimensions.widthInDents : null\n },\n dimensionsInPx: {\n heightInPx: this._drawing.dimensionsInPixels.heightInPx,\n widthInPx: this._drawing.dimensionsInPixels.widthInPx\n },\n status: ProductionScheduleItemInPathGroupStatus[this._status],\n orderLineId: this._orderLineId,\n amountProduced: this._amountProduced,\n machineQuality: !AssertionUtils.isNullOrUndefined(this._machineQuality) ? this._machineQuality.toJSON() : null,\n scheduleItemType: this._scheduleItemType\n } as any as JSON;\n }\n\n public abstract getCommercialCutbarsLengthInMM(): number;\n\n public abstract getTechnicalCutbarsLengthInNumberOfPicks(): number;\n\n public abstract getCutbarInformation(): CutbarsLength;\n\n public abstract canBeRecolored(): boolean;\n\n public abstract recolorDrawing(recolorInformation: Drawing | ProductionScheduleItemRecolorInformation): void;\n}\n","import {OrderLine} from '@domain/orderbook/order-line';\nimport {OrderLineAdditionalInfo} from '@domain/orderbook/order-line-additional-info';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {OverviewListArticleForOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-article-for-order-line';\nimport {OverviewListOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-order-line';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {moment, Priority} from '@vdw/angular-component-library';\nimport {Drawing} from './drawing';\n\nexport class ProductionScheduleOrderLine extends OverviewListOrderLine {\n private _amountInProductionSchedule: number;\n private _heightInProductionScheduleInMM: number;\n\n public constructor(\n id: number,\n salesOrderReference: string,\n salesOrderLineReference: string,\n customerReference: string,\n desiredDate: Date,\n priority: Priority,\n article: OverviewListArticleForOrderLine,\n amount: number,\n amountLeft: number,\n amountProduced: number,\n amountPlanned: number,\n isSelectable: boolean,\n status: OrderLineStatus,\n orderType: string,\n canBePlanned: boolean,\n missingDesign: boolean,\n additionalInfo: OrderLineAdditionalInfo[],\n commercialLengthInMM?: number\n ) {\n super(\n id,\n salesOrderReference,\n salesOrderLineReference,\n customerReference,\n desiredDate,\n priority,\n article,\n amount,\n amountLeft,\n amountProduced,\n amountPlanned,\n isSelectable,\n status,\n orderType,\n canBePlanned,\n missingDesign,\n additionalInfo,\n commercialLengthInMM\n );\n\n this._amountInProductionSchedule = 0;\n this._heightInProductionScheduleInMM = 0;\n }\n\n public get amountInProductionSchedule(): number {\n return this._amountInProductionSchedule;\n }\n\n public set amountInProductionSchedule(amountInProductionSchedule: number) {\n this._amountInProductionSchedule = amountInProductionSchedule;\n }\n\n public get heightInProductionScheduleInMM(): number {\n return this._heightInProductionScheduleInMM;\n }\n\n public set heightInProductionScheduleInMM(heightInProductionScheduleInMM: number) {\n this._heightInProductionScheduleInMM = heightInProductionScheduleInMM;\n }\n\n public static fromOrderLine(orderLine: OrderLine, coloredYarnSet: OverviewListColoredYarnSet): ProductionScheduleOrderLine {\n return new ProductionScheduleOrderLine(\n orderLine.id,\n orderLine.salesOrderReference,\n orderLine.salesOrderLineReference,\n orderLine.customerReference,\n orderLine.desiredDate,\n orderLine.priority,\n new OverviewListArticleForOrderLine(\n orderLine.article.id,\n orderLine.article.name,\n orderLine.article.machineQuality,\n coloredYarnSet,\n orderLine.article.colorConfiguration.colorSet,\n null,\n null,\n orderLine.article.finishing,\n orderLine.article.commercialWidthInMM,\n orderLine.article.commercialHeightInMM,\n orderLine.article.design as Drawing\n ),\n orderLine.amount,\n orderLine.amount - orderLine.amountProduced,\n orderLine.amountProduced,\n orderLine.amountPlanned,\n true,\n orderLine.status,\n null,\n true,\n false,\n orderLine.additionalInfo,\n orderLine.commercialLengthInMM\n );\n }\n\n public static fromJSON(orderLineJSON: any): ProductionScheduleOrderLine {\n return new ProductionScheduleOrderLine(\n orderLineJSON.id,\n orderLineJSON.salesOrderReference,\n orderLineJSON.salesOrderLineReference,\n orderLineJSON.customerReference,\n moment(orderLineJSON.desiredDate).add(new Date().getTimezoneOffset(), 'minutes').toDate(),\n Priority[orderLineJSON.priority as string],\n OverviewListArticleForOrderLine.fromJSON(orderLineJSON.article),\n orderLineJSON.amount,\n orderLineJSON.amountLeft,\n orderLineJSON.amountProduced,\n orderLineJSON.amountPlanned,\n true,\n OrderLineStatus[`${orderLineJSON.status}`],\n orderLineJSON.orderType,\n orderLineJSON.canBePlanned ?? true,\n !!orderLineJSON.missingDesign,\n Object.keys(orderLineJSON).reduce((additionalInfo: OrderLineAdditionalInfo[], key: string) => {\n if (key.startsWith('additionalInfo')) {\n additionalInfo.push(new OrderLineAdditionalInfo(key, orderLineJSON[key]));\n }\n return additionalInfo;\n }, []),\n orderLineJSON.commercialLengthInMM\n );\n }\n\n public static fromOverviewListOrderLine(overviewListOrderLine: OverviewListOrderLine): ProductionScheduleOrderLine {\n return new ProductionScheduleOrderLine(\n overviewListOrderLine.id,\n overviewListOrderLine.salesOrderReference,\n overviewListOrderLine.salesOrderLineReference,\n overviewListOrderLine.customerReference,\n overviewListOrderLine.desiredDate,\n overviewListOrderLine.priority,\n overviewListOrderLine.article,\n overviewListOrderLine.amount,\n overviewListOrderLine.amountLeft,\n overviewListOrderLine.amountProduced,\n overviewListOrderLine.amountPlanned,\n overviewListOrderLine.isSelectable,\n overviewListOrderLine.status,\n overviewListOrderLine.orderType,\n overviewListOrderLine.canBePlanned,\n overviewListOrderLine.missingDesign,\n overviewListOrderLine.additionalInfo,\n overviewListOrderLine.commercialLengthInMM\n );\n }\n\n public isCompleted(): boolean {\n return this.amountLeft === this._amountInProductionSchedule * 2;\n }\n\n public isOverplanned(): boolean {\n return this.amountLeft < this._amountInProductionSchedule * 2;\n }\n\n public getAmountLeftForProductionSchedule(itemMultiplier: number = 2): number {\n return this.amountLeft - this._amountInProductionSchedule * itemMultiplier;\n }\n\n public getHeightLeftInMMForProductionSchedule(itemMultiplier: number = 1): number {\n return this.commercialLengthInMM - this._heightInProductionScheduleInMM * itemMultiplier;\n }\n}\n","import {BmpProductionScheduleItemInPathGroup} from '@domain/production-schedule/bmp-production-schedule-item-in-path-group';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {EpProductionScheduleItemInPathGroup} from '@domain/production-schedule/ep-production-schedule-item-in-path-group';\nimport {JuteProductionScheduleItemInPathGroup} from '@domain/production-schedule/jute-production-schedule-item-in-path-group';\nimport {PathLabelDrawing} from '@domain/production-schedule/path-label-drawing';\nimport {PathLabelProductionScheduleItemInPathGroup} from '@domain/production-schedule/path-label-production-schedule-item-in-path-group';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {ListDrawingOrderLine} from '@presentation/components/drawing-list/list-drawing-order-line';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {filter, isEqual, map, reduce, remove, uniqBy} from 'lodash-es';\nimport {NonProductionItemInPathGroup} from './non-production-item-path-group';\n\nexport class ProductionSchedulePath {\n private _name: string;\n private _pathNumber: number;\n private _commercialWidthInMM: number;\n private _technicalWidthInDents: number;\n private _pathGroups: ProductionScheduleItemInPathGroup[];\n private _startDent: number;\n private _totalLengthInMM: number;\n private _totalLengthInPicks: number;\n\n public constructor(\n name: string,\n pathNumber: number,\n commercialWidthInMM: number,\n technicalWidthInDents: number,\n pathGroups: ProductionScheduleItemInPathGroup[],\n startDent: number,\n totalLengthInMM: number,\n totalLengthInPicks: number\n ) {\n this._name = name;\n this._pathNumber = pathNumber;\n this._commercialWidthInMM = commercialWidthInMM;\n this._technicalWidthInDents = technicalWidthInDents;\n this._pathGroups = pathGroups;\n this._startDent = startDent;\n this._totalLengthInMM = totalLengthInMM;\n this._totalLengthInPicks = totalLengthInPicks;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get pathNumber(): number {\n return this._pathNumber;\n }\n\n public set pathNumber(value: number) {\n this._pathNumber = value;\n }\n\n public get commercialWidthInMM(): number {\n return this._commercialWidthInMM;\n }\n\n public set commercialWidthInMM(value: number) {\n this._commercialWidthInMM = value;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public set technicalWidthInDents(value: number) {\n this._technicalWidthInDents = value;\n }\n\n public get pathGroups(): ProductionScheduleItemInPathGroup[] {\n return this._pathGroups;\n }\n\n public set pathGroups(value: ProductionScheduleItemInPathGroup[]) {\n this._pathGroups = value;\n }\n\n public get startDent(): number {\n return this._startDent;\n }\n\n public set startDent(value: number) {\n this._startDent = value;\n }\n\n public get totalLengthInMM(): number {\n return this._totalLengthInMM;\n }\n\n public set totalLengthInMM(value: number) {\n this._totalLengthInMM = value;\n }\n\n public get totalLengthInPicks(): number {\n return this._totalLengthInPicks;\n }\n\n public set totalLengthInPicks(value: number) {\n this._totalLengthInPicks = value;\n }\n\n public static fromJSON(productionSchedulePathJSON: any): ProductionSchedulePath {\n return new ProductionSchedulePath(\n productionSchedulePathJSON.name,\n productionSchedulePathJSON.pathNumber,\n productionSchedulePathJSON.commercialWidthInMM,\n productionSchedulePathJSON.technicalWidthInDents,\n map(productionSchedulePathJSON.scheduleItems, (pathGroup: any) => {\n let result;\n\n switch (pathGroup.design.drawingType) {\n case DrawingType.BMP:\n result = BmpProductionScheduleItemInPathGroup.fromJSON(pathGroup);\n break;\n case DrawingType.EP:\n result = EpProductionScheduleItemInPathGroup.fromJSON(pathGroup);\n break;\n case DrawingType.PATHLABEL:\n result = PathLabelProductionScheduleItemInPathGroup.fromJSON(pathGroup);\n break;\n case DrawingType.NON_PRODUCTION_ITEM:\n result = NonProductionItemInPathGroup.fromJSON(pathGroup);\n break;\n case DrawingType.MANUAL_NON_PRODUCTION_ITEM:\n result = JuteProductionScheduleItemInPathGroup.fromJSON(pathGroup);\n break;\n }\n\n return result;\n }),\n productionSchedulePathJSON.startDent,\n productionSchedulePathJSON.totalLengthInMM,\n productionSchedulePathJSON.totalLengthInPicks\n );\n }\n\n public setProductionScheduleItemInPathGroupAt(index: number, productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup): void {\n if (!AssertionUtils.isNullOrUndefined(this.getProductionScheduleItemInPathGroupAt(index))) {\n this.pathGroups[index] = productionScheduleItemInPathGroup;\n }\n }\n\n public hasProductionScheduleItem(productionScheduleItem: ProductionScheduleItemInPathGroup): boolean {\n return this.pathGroups.some((pathGroup: ProductionScheduleItemInPathGroup) => pathGroup.uuid === productionScheduleItem.uuid);\n }\n\n public getUniqueProductionScheduleItems(): ProductionScheduleItemInPathGroup[] {\n return uniqBy(\n filter(\n this.pathGroups,\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) =>\n productionScheduleItemInPathGroup instanceof BmpProductionScheduleItemInPathGroup || productionScheduleItemInPathGroup instanceof EpProductionScheduleItemInPathGroup\n ),\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => {\n return `${productionScheduleItemInPathGroup.drawing.image.id}_${productionScheduleItemInPathGroup.orderLineId}`;\n }\n );\n }\n\n public getNonRecoloredProductionScheduleItems(): ProductionScheduleItemInPathGroup[] {\n return filter(\n this.pathGroups,\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) =>\n (productionScheduleItemInPathGroup instanceof BmpProductionScheduleItemInPathGroup || productionScheduleItemInPathGroup instanceof EpProductionScheduleItemInPathGroup) &&\n !productionScheduleItemInPathGroup.isRecolored\n );\n }\n\n public getUniquePathLabelDrawings(): PathLabelDrawing[] {\n return uniqBy(\n map(\n filter(this.pathGroups, (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => isEqual(productionScheduleItemInPathGroup.scheduleItemType, DrawingType.PATHLABEL)),\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => productionScheduleItemInPathGroup.drawing\n ),\n 'image.id'\n );\n }\n\n public equals(other: ProductionSchedulePath): boolean {\n return this.name === other.name;\n }\n\n public toJSON(): JSON {\n const productionSchedulePathJSON = {\n name: this._name,\n pathNumber: this._pathNumber,\n startDent: this._startDent,\n commercialWidthInMM: this._commercialWidthInMM,\n technicalWidthInDents: this._technicalWidthInDents,\n scheduleItems: map(this._pathGroups, (pathGroup: ProductionScheduleItemInPathGroup) => pathGroup.toJSON())\n } as any as JSON;\n\n if (!AssertionUtils.isNullOrUndefined(this._totalLengthInPicks)) {\n productionSchedulePathJSON['totalLengthInPicks'] = this._totalLengthInPicks;\n }\n\n return productionSchedulePathJSON;\n }\n\n public getProductionScheduleItemInPathGroup(uuid: string): ProductionScheduleItemInPathGroup {\n return this.pathGroups.find((pathGroup: ProductionScheduleItemInPathGroup) => pathGroup.uuid === uuid);\n }\n\n public getOrderLineQuantityInProductionScheduleItems(orderLineId: number): number {\n return reduce(\n this.pathGroups,\n (quantity: number, productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => {\n if (productionScheduleItemInPathGroup.hasOrderLine() && isEqual(productionScheduleItemInPathGroup.orderLineId, orderLineId)) {\n quantity += productionScheduleItemInPathGroup.quantity;\n }\n\n return quantity;\n },\n 0\n );\n }\n\n public getOrderLineHeightInMMInProductionScheduleItems(orderLineId: number): number {\n return this.pathGroups.reduce((heightInMM: number, productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => {\n if (productionScheduleItemInPathGroup.hasOrderLine() && productionScheduleItemInPathGroup.orderLineId === orderLineId) {\n heightInMM += productionScheduleItemInPathGroup.commercialDimensionsInMM?.heightInMM * productionScheduleItemInPathGroup.quantity;\n }\n\n return heightInMM;\n }, 0);\n }\n\n public getProductionScheduleItemsForListDrawing(listDrawing: ListDrawing): ProductionScheduleItemInPathGroup[] {\n return reduce(\n this._pathGroups,\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionScheduleItem: ProductionScheduleItemInPathGroup) => {\n if (\n (listDrawing instanceof ListDrawingOrderLine && isEqual(productionScheduleItem.orderLineId, listDrawing.orderLine.id)) ||\n (listDrawing instanceof ListDrawingConfiguration && !productionScheduleItem.hasOrderLine() && isEqual(productionScheduleItem.drawing.id, listDrawing.drawing.id))\n ) {\n productionScheduleItems.push(productionScheduleItem);\n }\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionScheduleItemsForOrderLine(orderLineId: number): ProductionScheduleItemInPathGroup[] {\n return filter(this._pathGroups, {orderLineId});\n }\n\n public updatePathLength(productionSchedule: ProductionSchedule): void {\n const otherProductionSchedulePath = productionSchedule.getProductionSchedulePath(this.pathNumber);\n\n this.totalLengthInMM = otherProductionSchedulePath.totalLengthInMM;\n this.totalLengthInPicks = otherProductionSchedulePath.totalLengthInPicks;\n }\n\n public removePathLabelsAndNonProductionItemsFromPathGroups(): void {\n remove(this._pathGroups, (pathGroup: ProductionScheduleItemInPathGroup) => {\n return pathGroup instanceof PathLabelProductionScheduleItemInPathGroup || pathGroup instanceof NonProductionItemInPathGroup;\n });\n }\n\n private getProductionScheduleItemInPathGroupAt(index: number): ProductionScheduleItemInPathGroup {\n return this.pathGroups.length > index ? this.pathGroups[index] : null;\n }\n}\n","export enum ProductionSchedulePhase {\n PRESELECTION = 'PRESELECTION',\n CONFIGURE = 'CONFIGURE',\n BUILD = 'BUILD',\n VERIFY = 'VERIFY',\n COMPLETE = 'COMPLETE'\n}\n\nexport namespace ProductionSchedulePhase {\n const phasesWithIcon = new Map();\n phasesWithIcon.set(ProductionSchedulePhase.PRESELECTION, 'library-blue');\n phasesWithIcon.set(ProductionSchedulePhase.CONFIGURE, 'add-blue');\n phasesWithIcon.set(ProductionSchedulePhase.BUILD, 'builder-blue');\n phasesWithIcon.set(ProductionSchedulePhase.VERIFY, 'verify-blue');\n\n export function getIcon(productionSchedulePhase: ProductionSchedulePhase): string {\n return phasesWithIcon.get(productionSchedulePhase);\n }\n}\n","import {StringUtils} from '@vdw/angular-component-library';\n\nexport class ProductionScheduleProductConfiguration {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n\n public constructor(id: number, name: string, version: number) {\n this._id = id;\n this._name = name;\n this._version = version;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._name, this._version);\n }\n\n public static fromJSON(productConfigurationJSON: any): ProductionScheduleProductConfiguration {\n return new ProductionScheduleProductConfiguration(productConfigurationJSON.id, productConfigurationJSON.name, productConfigurationJSON.version);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version\n } as any as JSON;\n }\n}\n","export enum ProductionScheduleStatus {\n DRAFT = 'DRAFT',\n VERIFIED_WITH_ERRORS = 'VERIFIED_WITH_ERRORS',\n VERIFIED_WITH_WARNINGS = 'VERIFIED_WITH_WARNINGS',\n VERIFIED = 'VERIFIED',\n COMPLETED = 'COMPLETED',\n CREATING = 'CREATING',\n CREATED = 'CREATED',\n PROCESSING = 'PROCESSING',\n PROCESSED = 'PROCESSED',\n FINALIZING = 'FINALIZING',\n FINALIZED = 'FINALIZED',\n TRANSLATING = 'TRANSLATING',\n TRANSLATED = 'TRANSLATED',\n SENDING = 'SENDING',\n ARRIVED = 'ARRIVED',\n EXECUTING = 'EXECUTING',\n EXECUTED = 'EXECUTED',\n EXECUTED_COMPLETE = 'EXECUTED_COMPLETE',\n EXECUTED_PARTIAL = 'EXECUTED_PARTIAL',\n CANCELLED = 'CANCELLED',\n QUEUING = 'QUEUING',\n QUEUED = 'QUEUED',\n FAILURE = 'FAILURE',\n TO_PLAN = 'TO_PLAN',\n TO_RECONFIRM = 'TO_RECONFIRM',\n SENT = 'SENT',\n PLANNING = 'PLANNING',\n PLANNED = 'PLANNED',\n REPLANNING = 'REPLANNING',\n REPLANNED = 'REPLANNED',\n REPLANNED_WITH_WARNINGS = 'REPLANNED_WITH_WARNINGS',\n PRODUCING = 'PRODUCING',\n PRODUCED_COMPLETELY = 'PRODUCED_COMPLETELY',\n PRODUCED_PARTIALLY = 'PRODUCED_PARTIALLY',\n NO_PRODUCTION_INFORMATION_RECEIVED = 'NO_PRODUCTION_INFORMATION_RECEIVED'\n}\n\nconst draftIconName = 'draft';\nconst verifiedIconName = 'verified';\nconst verifiedWithErrorsIconName = 'verified-error';\nconst verifiedWithWarningsIconName = 'verified-with-warnings';\nconst completedIconName = 'confirm';\nconst processingIconName = 'processing';\nconst processingGreenIconName = 'processing-green';\nconst sendingIconName = 'send';\nconst arrivedIconName = 'arrived';\nconst executingIconName = 'execute';\nconst executedPartialIconName = 'executed-partial';\nconst executedCompleteIconName = 'executed-complete';\nconst cancelledIconName = 'cancelled';\nconst queuedIconName = 'hourglass-green';\nconst queuingIconName = 'hourglass';\nconst failedIconName = 'failed';\nconst toReconfirmIconName = 'reconfirm';\n\nconst productionScheduleStatusIconMap: Map = new Map([\n [ProductionScheduleStatus.DRAFT, draftIconName],\n [ProductionScheduleStatus.VERIFIED, verifiedIconName],\n [ProductionScheduleStatus.VERIFIED_WITH_ERRORS, verifiedWithErrorsIconName],\n [ProductionScheduleStatus.VERIFIED_WITH_WARNINGS, verifiedWithWarningsIconName],\n [ProductionScheduleStatus.COMPLETED, completedIconName],\n [ProductionScheduleStatus.CREATING, processingIconName],\n [ProductionScheduleStatus.CREATED, processingIconName],\n [ProductionScheduleStatus.PROCESSING, processingIconName],\n [ProductionScheduleStatus.PROCESSED, processingGreenIconName],\n [ProductionScheduleStatus.FINALIZING, processingGreenIconName],\n [ProductionScheduleStatus.FINALIZED, processingGreenIconName],\n [ProductionScheduleStatus.TRANSLATING, processingGreenIconName],\n [ProductionScheduleStatus.TRANSLATED, processingGreenIconName],\n [ProductionScheduleStatus.SENDING, sendingIconName],\n [ProductionScheduleStatus.ARRIVED, arrivedIconName],\n [ProductionScheduleStatus.EXECUTING, executingIconName],\n [ProductionScheduleStatus.EXECUTED, executingIconName],\n [ProductionScheduleStatus.EXECUTED_COMPLETE, executedCompleteIconName],\n [ProductionScheduleStatus.EXECUTED_PARTIAL, executedPartialIconName],\n [ProductionScheduleStatus.CANCELLED, cancelledIconName],\n [ProductionScheduleStatus.QUEUING, queuingIconName],\n [ProductionScheduleStatus.QUEUED, queuedIconName],\n [ProductionScheduleStatus.FAILURE, failedIconName],\n [ProductionScheduleStatus.TO_PLAN, verifiedIconName],\n [ProductionScheduleStatus.TO_RECONFIRM, toReconfirmIconName]\n]);\n\nexport namespace ProductionScheduleStatus {\n export function getStatusIconName(status: ProductionScheduleStatus): string {\n return productionScheduleStatusIconMap.get(status);\n }\n}\n","import {BmpProductionScheduleItemInPathGroup} from '@domain/production-schedule/bmp-production-schedule-item-in-path-group';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {PathLabelDrawing} from '@domain/production-schedule/path-label-drawing';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleErrors} from '@domain/production-schedule/production-schedule-errors';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {each, filter, find, flatMap, isEmpty, isEqual, map, reduce, size, some, sumBy, uniqBy} from 'lodash-es';\n\nexport class ProductionSchedulePathsOfColoredYarnSet {\n private _productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent;\n private _productionSchedulePaths: ProductionSchedulePath[];\n private _errors: ProductionScheduleErrors;\n\n public constructor(productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent, productionSchedulePaths: ProductionSchedulePath[], errors: ProductionScheduleErrors) {\n this._productionScheduleColoredYarnSet = productionScheduleColoredYarnSet;\n this._productionSchedulePaths = productionSchedulePaths;\n this._errors = errors;\n }\n\n public get productionSchedulePaths(): ProductionSchedulePath[] {\n return this._productionSchedulePaths;\n }\n\n public set productionSchedulePaths(productionSchedulePaths: ProductionSchedulePath[]) {\n this._productionSchedulePaths = productionSchedulePaths;\n }\n\n public get productionScheduleColoredYarnSet(): OverviewListColoredYarnSetWithStartDent {\n return this._productionScheduleColoredYarnSet;\n }\n\n public set productionScheduleColoredYarnSet(productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent) {\n this._productionScheduleColoredYarnSet = productionScheduleColoredYarnSet;\n }\n\n public get errors(): ProductionScheduleErrors {\n return this._errors;\n }\n\n public set errors(errors: ProductionScheduleErrors) {\n this._errors = errors;\n }\n\n public static fromJSON(productionSchedulePathsOfColoredYarnSetJSON: any): ProductionSchedulePathsOfColoredYarnSet {\n return new ProductionSchedulePathsOfColoredYarnSet(\n OverviewListColoredYarnSetWithStartDent.fromJSON(productionSchedulePathsOfColoredYarnSetJSON),\n productionSchedulePathsOfColoredYarnSetJSON.productionSchedulePaths.map((productionSchedulePathJSON: any) => ProductionSchedulePath.fromJSON(productionSchedulePathJSON)),\n productionSchedulePathsOfColoredYarnSetJSON.errors\n );\n }\n\n public getProductionSchedulePath(pathNumber: number): ProductionSchedulePath {\n return find(this.productionSchedulePaths, ['pathNumber', pathNumber]);\n }\n\n public hasProductionScheduleItem(productionScheduleItem: ProductionScheduleItemInPathGroup): boolean {\n return some(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.hasProductionScheduleItem(productionScheduleItem));\n }\n\n public hasProductionSchedulePath(productionSchedulePath: ProductionSchedulePath): boolean {\n return some(this.productionSchedulePaths, ['name', productionSchedulePath.name]);\n }\n\n public getProductionSchedulePathAt(index: number): ProductionSchedulePath {\n return size(this.productionSchedulePaths) > index ? this.productionSchedulePaths[index] : null;\n }\n\n public getNonRecoloredProductionScheduleItems(): ProductionScheduleItemInPathGroup[] {\n return flatMap(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n return productionSchedulePath.getNonRecoloredProductionScheduleItems();\n });\n }\n\n public getUniquePathLabelDrawings(): PathLabelDrawing[] {\n return uniqBy(\n flatMap(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n return map(productionSchedulePath.getUniquePathLabelDrawings());\n }),\n 'image.id'\n );\n }\n\n public toJSON(): JSON {\n return {\n coloredYarnSet: this._productionScheduleColoredYarnSet.coloredYarnSet.toJSON(),\n startDent: this._productionScheduleColoredYarnSet.startDent,\n productionSchedulePaths: map(this._productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.toJSON()),\n technicalWidthInDents: this._productionScheduleColoredYarnSet.technicalWidthInDents\n } as any as JSON;\n }\n\n public getProductionSchedulePathsWidthInDents(): number {\n return sumBy(this._productionSchedulePaths, 'technicalWidthInDents');\n }\n\n public getProductionSchedulePathsWidthInMillimeters(): number {\n return sumBy(this._productionSchedulePaths, 'commercialWidthInMM');\n }\n\n public updatePathLengths(productionSchedule: ProductionSchedule): void {\n each(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.updatePathLength(productionSchedule);\n });\n }\n\n public isEqual(other: ProductionSchedulePathsOfColoredYarnSet): boolean {\n return isEqual(this.productionScheduleColoredYarnSet.coloredYarnSet.id, other.productionScheduleColoredYarnSet.coloredYarnSet.id);\n }\n\n public updateLoadedPathLabelDrawing(pathLabelDrawing: PathLabelDrawing): void {\n const productionScheduleItems: ProductionScheduleItemInPathGroup[] = filter(\n flatMap(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n return productionSchedulePath.pathGroups;\n }),\n ['drawing.image.id', pathLabelDrawing.image.id]\n );\n\n each(productionScheduleItems, (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => {\n productionScheduleItemInPathGroup.recolorDrawing(pathLabelDrawing);\n });\n }\n\n public updateFinishing(finishing: FinishingForProductionSchedule): void {\n const productionscheduleItems: ProductionScheduleItemInPathGroup[] = filter(\n flatMap(this.productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.pathGroups),\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup) => productionScheduleItemInPathGroup instanceof BmpProductionScheduleItemInPathGroup\n );\n each(productionscheduleItems, (productionScheduleItemInPathGroup: BmpProductionScheduleItemInPathGroup) => {\n productionScheduleItemInPathGroup.updateFinishing(finishing);\n });\n }\n\n public getOrderLineQuantityInProductionSchedulePaths(orderLineId: number): number {\n return reduce(\n this.productionSchedulePaths,\n (quantity: number, productionSchedulePath: ProductionSchedulePath) => {\n return quantity + productionSchedulePath.getOrderLineQuantityInProductionScheduleItems(orderLineId);\n },\n 0\n );\n }\n\n public getOrderLineHeightInMMInProductionSchedulePaths(orderLineId: number): number {\n return this.productionSchedulePaths.reduce(\n (heightInMM: number, productionSchedulePath: ProductionSchedulePath) => heightInMM + productionSchedulePath.getOrderLineHeightInMMInProductionScheduleItems(orderLineId),\n 0\n );\n }\n\n public getProductionScheduleItemsForListDrawing(listDrawing: ListDrawing): ProductionScheduleItemInPathGroup[] {\n return reduce(\n this._productionSchedulePaths,\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionSchedulePath: ProductionSchedulePath) => {\n productionScheduleItems.push(...productionSchedulePath.getProductionScheduleItemsForListDrawing(listDrawing));\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionScheduleItemsForOrderLine(orderLineId: number): ProductionScheduleItemInPathGroup[] {\n return reduce(\n this._productionSchedulePaths,\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionSchedulePath: ProductionSchedulePath) => {\n productionScheduleItems.push(...productionSchedulePath.getProductionScheduleItemsForOrderLine(orderLineId));\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionSchedulePathForProductionScheduleItem(productionScheduleItem: ProductionScheduleItemInPathGroup): ProductionSchedulePath {\n return find(this._productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n return productionSchedulePath.hasProductionScheduleItem(productionScheduleItem);\n });\n }\n\n public hasProductionSchedulePaths(): boolean {\n return !isEmpty(this._productionSchedulePaths);\n }\n\n public removePathLabelsAndNonProductionItemsFromProductionSchedulePaths(): void {\n each(this._productionSchedulePaths, (productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.removePathLabelsAndNonProductionItemsFromPathGroups();\n });\n }\n}\n","import {calculateDrawingWidthInDents} from '@application/helper/production-schedule-builder/calculate-drawing-width-in-dents';\nimport {getListDrawingFromProductionScheduleItem} from '@application/helper/production-schedule/get-list-drawing-from-production-schedule-item';\nimport {isMultipleOf} from '@application/validators/is-multiple-of-validator';\nimport {IdName} from '@domain/id-name';\nimport {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {CreelForProductionSchedule} from '@domain/production-schedule/creel-for-production-schedule';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {FreeZone} from '@domain/production-schedule/free-zone/free-zone';\nimport {InitialFreeZone} from '@domain/production-schedule/free-zone/initial-free-zone';\nimport {JuteInformation} from '@domain/production-schedule/jute-information';\nimport {JuteInformationForPart} from '@domain/production-schedule/jute-information-for-part';\nimport {MachineQualityForProductionSchedule} from '@domain/production-schedule/machine-quality-for-production-schedule';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {PathLabelDrawing} from '@domain/production-schedule/path-label-drawing';\nimport {PathLabelInformation} from '@domain/production-schedule/path-label-information';\nimport {ProductionScheduleErrors} from '@domain/production-schedule/production-schedule-errors';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ProductionScheduleWarnings} from '@domain/production-schedule/production-schedule-warnings';\nimport {InitialRestZone} from '@domain/production-schedule/rest-zone/initial-rest-zone';\nimport {RestZone} from '@domain/production-schedule/rest-zone/rest-zone';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {GeneralJuteSettings} from '@domain/textile-data/machine-quality/general-jute-settings';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {ListDrawingOrderLine} from '@presentation/components/drawing-list/list-drawing-order-line';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {AssertionUtils, convertCommercialUnit, moment, Unit} from '@vdw/angular-component-library';\nimport {isEqual, maxBy, reject} from 'lodash-es';\nimport {BuggyForProductionSchedule} from './buggy-for-production-schedule';\nimport {NonProductionItemInPathGroup} from './non-production-item-path-group';\nimport {PathLabelProductionScheduleItemInPathGroup} from './path-label-production-schedule-item-in-path-group';\nimport {ProductionScheduleOrderLine} from './production-schedule-order-line';\nimport {ProductionSchedulePhase} from './production-schedule-phase.enum';\nimport {ProductionScheduleProductConfiguration} from './production-schedule-product-configuration';\n\nexport class ProductionSchedule {\n private _id: string | number;\n private _name: string;\n private _comment: string;\n private _machine: MachineSummary;\n private _machineQuality: MachineQualityForProductionSchedule;\n private _practicalPickDensityInPicksPerMM: number;\n private _coloredYarnSets: OverviewListColoredYarnSetWithStartDent[];\n private _initialRestZones: InitialRestZone;\n private _restZones: RestZone[];\n private _initialFreeZones: InitialFreeZone;\n private _freeZones: FreeZone[];\n private _finishing: FinishingForProductionSchedule;\n private _status: ProductionScheduleStatus;\n private _designs: Drawing[];\n private _productionSchedulePathsOfColoredYarnSets: ProductionSchedulePathsOfColoredYarnSet[];\n private _dateCreated: Date;\n private _dueDate: Date;\n private _pathLabelInformation: PathLabelInformation;\n private _warnings: ProductionScheduleWarnings;\n private _errors: ProductionScheduleErrors;\n private _loaded = false;\n private _mappingForCurrentPositionOnMachine: CreelMap[];\n private _creel: CreelForProductionSchedule;\n private _orderLines: ProductionScheduleOrderLine[] = [];\n private _runId: number;\n private _juteInformation: JuteInformation;\n private _completingPartially = false;\n private _buggy: BuggyForProductionSchedule;\n private _productConfiguration: ProductionScheduleProductConfiguration;\n private _numberOfRepeats: number;\n private _missingDesigns: boolean;\n private _isSample: boolean;\n private _canAddJute: boolean;\n private _hmiVersion: string;\n private _addToPlanboard?: boolean;\n private _juteGeneralSettings: GeneralJuteSettings;\n private _preselectionId: number;\n private _step: ProductionSchedulePhase;\n private _hasSavedManually: boolean;\n\n public constructor(\n id: string | number,\n name: string,\n comment: string,\n machine: MachineSummary,\n machineQuality: MachineQualityForProductionSchedule,\n practicalPickDensityInPicksPerMM: number,\n coloredYarnSets: OverviewListColoredYarnSetWithStartDent[],\n initialRestZones: InitialRestZone,\n restZones: RestZone[],\n initialFreeZones: InitialFreeZone,\n freeZones: FreeZone[],\n finishing: FinishingForProductionSchedule,\n status: ProductionScheduleStatus,\n designs: Drawing[],\n productionSchedulePathsOfColoredYarnSets: ProductionSchedulePathsOfColoredYarnSet[],\n dateCreated: Date,\n dueDate: Date,\n pathLabelInformation: PathLabelInformation,\n warnings: ProductionScheduleWarnings,\n errors: ProductionScheduleErrors,\n mappingForCurrentPositionOnMachine: CreelMap[],\n creel: CreelForProductionSchedule,\n runId: number,\n juteInformation: JuteInformation,\n buggy: BuggyForProductionSchedule,\n productConfiguration: ProductionScheduleProductConfiguration,\n numberOfRepeats: number,\n hmiVersion: string,\n missingDesigns: boolean,\n juteGeneralSettings: GeneralJuteSettings,\n preselectionId?: number,\n isSample: boolean = false,\n canAddJute: boolean = true,\n addToPlanBoard: boolean = undefined,\n step?: ProductionSchedulePhase,\n hasSavedManually?: boolean\n ) {\n this._id = id;\n this._name = name;\n this._comment = comment;\n this._machine = machine;\n this._machineQuality = machineQuality;\n this._practicalPickDensityInPicksPerMM = practicalPickDensityInPicksPerMM;\n this._coloredYarnSets = coloredYarnSets;\n this._initialRestZones = initialRestZones;\n this._restZones = restZones;\n this._initialFreeZones = initialFreeZones;\n this._freeZones = freeZones;\n this._finishing = finishing;\n this._status = status;\n this._designs = designs;\n this._productionSchedulePathsOfColoredYarnSets = productionSchedulePathsOfColoredYarnSets;\n this._dateCreated = dateCreated;\n this._dueDate = dueDate;\n this._pathLabelInformation = pathLabelInformation;\n this._warnings = warnings;\n this._errors = errors;\n this._mappingForCurrentPositionOnMachine = mappingForCurrentPositionOnMachine;\n this._creel = creel;\n this._runId = runId;\n this._juteInformation = juteInformation;\n this._buggy = buggy;\n this._productConfiguration = productConfiguration;\n this._numberOfRepeats = numberOfRepeats;\n this._missingDesigns = missingDesigns;\n this._isSample = isSample;\n this._canAddJute = canAddJute;\n this._hmiVersion = hmiVersion;\n this._addToPlanboard = addToPlanBoard;\n this._juteGeneralSettings = juteGeneralSettings;\n this._preselectionId = preselectionId;\n this._step = step;\n this._hasSavedManually = hasSavedManually;\n }\n\n public get id(): string | number {\n return this._id;\n }\n\n public set id(value: string | number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public set comment(value: string) {\n this._comment = value;\n }\n\n public get machine(): MachineSummary {\n return this._machine;\n }\n\n public set machine(value: MachineSummary) {\n this._machine = value;\n }\n\n public get machineQuality(): MachineQualityForProductionSchedule {\n return this._machineQuality;\n }\n\n public set machineQuality(value: MachineQualityForProductionSchedule) {\n this._machineQuality = value;\n }\n\n public get practicalPickDensityInPicksPerMM(): number {\n return this._practicalPickDensityInPicksPerMM;\n }\n\n public set practicalPickDensityInPicksPerMM(value: number) {\n this._practicalPickDensityInPicksPerMM = value;\n }\n\n public get coloredYarnSets(): OverviewListColoredYarnSetWithStartDent[] {\n return this._coloredYarnSets;\n }\n\n public set coloredYarnSets(value: OverviewListColoredYarnSetWithStartDent[]) {\n this._coloredYarnSets = value;\n }\n\n public get initialRestZones(): InitialRestZone {\n return this._initialRestZones;\n }\n\n public set initialRestZones(value: InitialRestZone) {\n this._initialRestZones = value;\n }\n\n public get restZones(): RestZone[] {\n return this._restZones;\n }\n\n public set restZones(value: RestZone[]) {\n this._restZones = value;\n }\n\n public get initialFreeZones(): InitialFreeZone {\n return this._initialFreeZones;\n }\n\n public set initialFreeZones(value: InitialFreeZone) {\n this._initialFreeZones = value;\n }\n\n public get freeZones(): FreeZone[] {\n return this._freeZones;\n }\n\n public set freeZones(value: FreeZone[]) {\n this._freeZones = value;\n }\n\n public get finishing(): FinishingForProductionSchedule {\n return this._finishing;\n }\n\n public set finishing(value: FinishingForProductionSchedule) {\n this._finishing = value;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get designs(): Drawing[] {\n return this._designs;\n }\n\n public set designs(value: Drawing[]) {\n this._designs = value;\n }\n\n public get productionSchedulePathsOfColoredYarnSets(): ProductionSchedulePathsOfColoredYarnSet[] {\n return this._productionSchedulePathsOfColoredYarnSets;\n }\n\n public set productionSchedulePathsOfColoredYarnSets(value: ProductionSchedulePathsOfColoredYarnSet[]) {\n this._productionSchedulePathsOfColoredYarnSets = value;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public set dateCreated(value: Date) {\n this._dateCreated = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public set dueDate(value: Date) {\n this._dueDate = value;\n }\n\n public get pathLabelInformation(): PathLabelInformation {\n return this._pathLabelInformation;\n }\n\n public set pathLabelInformation(value: PathLabelInformation) {\n this._pathLabelInformation = value;\n }\n\n public get warnings(): ProductionScheduleWarnings {\n return this._warnings;\n }\n\n public set warnings(value: ProductionScheduleWarnings) {\n this._warnings = value;\n }\n\n public get errors(): ProductionScheduleErrors {\n return this._errors;\n }\n\n public set errors(value: ProductionScheduleErrors) {\n this._errors = value;\n }\n\n public set loaded(value: boolean) {\n this._loaded = value;\n }\n\n public get mappingForCurrentPositionOnMachine(): CreelMap[] {\n return this._mappingForCurrentPositionOnMachine;\n }\n\n public set mappingForCurrentPositionOnMachine(value: CreelMap[]) {\n this._mappingForCurrentPositionOnMachine = value;\n }\n\n public get creel(): CreelForProductionSchedule {\n return this._creel;\n }\n\n public set creel(value: CreelForProductionSchedule) {\n this._creel = value;\n }\n\n public get orderLines(): ProductionScheduleOrderLine[] {\n return this._orderLines;\n }\n\n public set orderLines(orderLines: ProductionScheduleOrderLine[]) {\n this._orderLines = orderLines;\n }\n\n public get runId(): number {\n return this._runId;\n }\n\n public set runId(runId: number) {\n this._runId = runId;\n }\n\n public get juteInformation(): JuteInformation {\n return this._juteInformation;\n }\n\n public set juteInformation(value: JuteInformation) {\n this._juteInformation = value;\n }\n\n public get completingPartially(): boolean {\n return this._completingPartially;\n }\n\n public set completingPartially(value: boolean) {\n this._completingPartially = value;\n }\n\n public get buggy(): BuggyForProductionSchedule {\n return this._buggy;\n }\n\n public set buggy(value: BuggyForProductionSchedule) {\n this._buggy = value;\n }\n\n public get productConfiguration(): ProductionScheduleProductConfiguration {\n return this._productConfiguration;\n }\n\n public set productConfiguration(productConfiguration: ProductionScheduleProductConfiguration) {\n this._productConfiguration = productConfiguration;\n }\n\n public get numberOfRepeats(): number {\n return this._numberOfRepeats;\n }\n\n public set numberOfRepeats(numberOfRepeats: number) {\n this._numberOfRepeats = numberOfRepeats;\n }\n\n public get missingDesigns(): boolean {\n return this._missingDesigns;\n }\n\n public set missingDesigns(missingDesigns: boolean) {\n this._missingDesigns = missingDesigns;\n }\n\n public get isSample(): boolean {\n return this._isSample;\n }\n\n public set isSample(isSample: boolean) {\n this._isSample = isSample;\n }\n\n public get canAddJute(): boolean {\n return this._canAddJute;\n }\n\n public set canAddJute(canAddJute: boolean) {\n this._canAddJute = canAddJute;\n }\n\n public get hmiVersion(): string {\n return this._hmiVersion;\n }\n\n public set hmiVersion(hmiVersion: string) {\n this._hmiVersion = hmiVersion;\n }\n\n public get addToPlanboard(): boolean {\n return this._addToPlanboard;\n }\n\n public set addToPlanboard(addToPlanboard: boolean) {\n this._addToPlanboard = addToPlanboard;\n }\n\n public get juteGeneralSettings(): GeneralJuteSettings {\n return this._juteGeneralSettings;\n }\n\n public set juteGeneralSettings(value: GeneralJuteSettings) {\n this._juteGeneralSettings = value;\n }\n\n public get preselectionId(): number {\n return this._preselectionId;\n }\n\n public set preselectionId(value: number) {\n this._preselectionId = value;\n }\n\n public get step(): ProductionSchedulePhase {\n return this._step;\n }\n\n public get hasSavedManually(): boolean {\n return this._hasSavedManually;\n }\n\n public set hasSavedManually(value: boolean) {\n this._hasSavedManually = value;\n }\n\n public static createEmptyProductionSchedule(): ProductionSchedule {\n const productionSchedule = new ProductionSchedule(\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n null,\n [],\n null,\n [],\n null,\n ProductionScheduleStatus.DRAFT,\n [],\n [],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n 1,\n null,\n false,\n null,\n 0,\n false\n );\n productionSchedule.loaded = true;\n return productionSchedule;\n }\n\n public static fromJSON(productionScheduleJSON: any): ProductionSchedule {\n const coloredYarnSetsWithStartDent = productionScheduleJSON.coloredYarnSets.map((coloredYarnSetJSON: any) => OverviewListColoredYarnSetWithStartDent.fromJSON(coloredYarnSetJSON));\n let productionSchedulePathsOfColoredYarnSets = productionScheduleJSON.coloredYarnSetPaths.map((coloredYarnSetPathJSON: any) =>\n ProductionSchedulePathsOfColoredYarnSet.fromJSON(coloredYarnSetPathJSON)\n );\n\n const coloredYarnSetsChanged = coloredYarnSetsWithStartDent.some((coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent, index: number) => {\n const productionSchedulePathsOfColoredYarnSet = productionSchedulePathsOfColoredYarnSets[index];\n\n return (\n AssertionUtils.isNullOrUndefined(productionSchedulePathsOfColoredYarnSet) ||\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.coloredYarnSet.id !== coloredYarnSetWithStartDent.coloredYarnSet.id\n );\n });\n\n if (coloredYarnSetsChanged) {\n productionSchedulePathsOfColoredYarnSets = [];\n } else {\n productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet, index: number) => {\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet = coloredYarnSetsWithStartDent[index];\n });\n }\n\n return new ProductionSchedule(\n productionScheduleJSON.id,\n productionScheduleJSON.name,\n productionScheduleJSON.comment,\n MachineSummary.fromJSON(productionScheduleJSON.machine, true),\n MachineQualityForProductionSchedule.fromJSON(productionScheduleJSON.machineQuality),\n productionScheduleJSON.practicalPickDensityInPicksPerMM,\n coloredYarnSetsWithStartDent,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.initialRestZones) ? InitialRestZone.fromJSON(productionScheduleJSON.initialRestZones) : null,\n productionScheduleJSON.restZones.map((restZoneJSON: any) => RestZone.fromJSON(restZoneJSON)),\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.initialFreeZones) ? InitialFreeZone.fromJSON(productionScheduleJSON.initialFreeZones) : null,\n productionScheduleJSON.freeZones.map((freeZoneJSON: any) => FreeZone.fromJSON(freeZoneJSON)),\n FinishingForProductionSchedule.fromJSON(productionScheduleJSON.finishing),\n productionScheduleJSON.status,\n productionScheduleJSON.designs.map((drawingJSON: any) => (drawingJSON.drawingType === DrawingType.BMP ? BmpDrawing.fromJSON(drawingJSON) : null)),\n productionSchedulePathsOfColoredYarnSets,\n new Date(productionScheduleJSON.dateCreated),\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.dueDate) ? moment(productionScheduleJSON.dueDate).add(new Date().getTimezoneOffset(), 'minutes').toDate() : null,\n PathLabelInformation.fromJSON(productionScheduleJSON.pathLabelInformation),\n productionScheduleJSON.warnings,\n productionScheduleJSON.errors,\n productionScheduleJSON.mappingForCurrentPositionOnMachine,\n CreelForProductionSchedule.fromJSON(productionScheduleJSON.creel),\n productionScheduleJSON.runId ?? null,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.juteInformation) ? JuteInformation.fromJSON(productionScheduleJSON.juteInformation) : null,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.buggy) ? BuggyForProductionSchedule.fromJSONForSchedule(productionScheduleJSON.buggy) : null,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.productConfiguration) ? ProductionScheduleProductConfiguration.fromJSON(productionScheduleJSON.productConfiguration) : null,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.numberOfRepeats) ? productionScheduleJSON.numberOfRepeats : 1,\n productionScheduleJSON.hmiVersion,\n productionScheduleJSON.missingDesigns,\n !AssertionUtils.isNullOrUndefined(productionScheduleJSON.juteGeneralSettings) ? GeneralJuteSettings.fromJSON(productionScheduleJSON.juteGeneralSettings) : null,\n productionScheduleJSON.preselectionId,\n productionScheduleJSON.isSample,\n productionScheduleJSON.canAddJute,\n productionScheduleJSON.addToPlanboard,\n productionScheduleJSON.step,\n productionScheduleJSON.hasSavedManually\n );\n }\n\n public static modifyProductionScheduleAfterVerify(productionSchedule: ProductionSchedule, newProductionSchedule: ProductionSchedule): ProductionSchedule {\n productionSchedule.restZones = newProductionSchedule.restZones;\n productionSchedule.freeZones = newProductionSchedule.freeZones;\n productionSchedule.status = newProductionSchedule.status;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets.forEach(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet, productionSchedulePathsOfColoredYarnSetIndex: number) => {\n productionSchedulePathsOfColoredYarnSet.errors = newProductionSchedule.productionSchedulePathsOfColoredYarnSets[productionSchedulePathsOfColoredYarnSetIndex].errors;\n\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath, productionSchedulePathIndex: number) => {\n productionSchedulePath.startDent =\n newProductionSchedule.productionSchedulePathsOfColoredYarnSets[productionSchedulePathsOfColoredYarnSetIndex].productionSchedulePaths[productionSchedulePathIndex].startDent;\n\n productionSchedulePath.totalLengthInPicks =\n newProductionSchedule.productionSchedulePathsOfColoredYarnSets[productionSchedulePathsOfColoredYarnSetIndex].productionSchedulePaths[productionSchedulePathIndex].totalLengthInPicks;\n\n productionSchedulePath.totalLengthInMM =\n newProductionSchedule.productionSchedulePathsOfColoredYarnSets[productionSchedulePathsOfColoredYarnSetIndex].productionSchedulePaths[productionSchedulePathIndex].totalLengthInMM;\n\n const updatedPathGroups =\n newProductionSchedule.productionSchedulePathsOfColoredYarnSets[productionSchedulePathsOfColoredYarnSetIndex].productionSchedulePaths[productionSchedulePathIndex].pathGroups;\n\n if (productionSchedulePath.pathGroups.length !== updatedPathGroups.length) {\n productionSchedulePath.pathGroups = updatedPathGroups;\n }\n });\n }\n );\n\n productionSchedule.warnings = newProductionSchedule.warnings;\n productionSchedule.errors = newProductionSchedule.errors;\n\n productionSchedule.missingDesigns = newProductionSchedule.missingDesigns;\n\n return productionSchedule;\n }\n\n public getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDent: number): ProductionSchedulePathsOfColoredYarnSet {\n return this.productionSchedulePathsOfColoredYarnSets.find(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent === startDent\n );\n }\n\n public getProductionSchedulePathsOfColoredYarnSetFromDent(dent: number): ProductionSchedulePathsOfColoredYarnSet {\n return this.productionSchedulePathsOfColoredYarnSets.find(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent <= dent &&\n dent < productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent + productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.technicalWidthInDents\n );\n }\n\n public getProductionSchedulePath(pathNumber: number): ProductionSchedulePath {\n return this.productionSchedulePathsOfColoredYarnSets\n ?.flatMap((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePathsOfColoredYarnSet.productionSchedulePaths)\n ?.find((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.pathNumber === pathNumber);\n }\n\n public getProductionSchedulePathsOfColoredYarnSetAt(index: number): ProductionSchedulePathsOfColoredYarnSet {\n return this.productionSchedulePathsOfColoredYarnSets.length > index ? this.productionSchedulePathsOfColoredYarnSets[index] : null;\n }\n\n public getProductionScheduleColoredYarnSetAtStartDent(startDent: number): OverviewListColoredYarnSetWithStartDent {\n return this.coloredYarnSets.find((overviewListColoredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) => overviewListColoredYarnSetWithStartDent.startDent === startDent);\n }\n\n public isProductionScheduleWithEmptyContent(): boolean {\n const emptyProductionSchedule = ProductionSchedule.createEmptyProductionSchedule();\n emptyProductionSchedule.id = this.id;\n emptyProductionSchedule.name = '';\n emptyProductionSchedule.comment = '';\n emptyProductionSchedule.machine = this.machine;\n emptyProductionSchedule.coloredYarnSets = this.coloredYarnSets;\n emptyProductionSchedule.creel = this.creel;\n emptyProductionSchedule.machineQuality = this.machineQuality;\n emptyProductionSchedule.practicalPickDensityInPicksPerMM = this.practicalPickDensityInPicksPerMM;\n emptyProductionSchedule.dateCreated = this.dateCreated;\n emptyProductionSchedule.loaded = this._loaded;\n emptyProductionSchedule.orderLines = this._orderLines;\n emptyProductionSchedule.runId = this._runId;\n emptyProductionSchedule.mappingForCurrentPositionOnMachine = this._mappingForCurrentPositionOnMachine;\n emptyProductionSchedule.productConfiguration = this._productConfiguration;\n emptyProductionSchedule.missingDesigns = this._missingDesigns;\n emptyProductionSchedule.isSample = this._isSample;\n emptyProductionSchedule.canAddJute = this._canAddJute;\n emptyProductionSchedule.juteGeneralSettings = this._juteGeneralSettings;\n\n return isEqual(this, emptyProductionSchedule);\n }\n\n public getTotalProductionScheduleWidthInDents(): number {\n return this._coloredYarnSets.reduce(\n (technicalWidthInDents: number, overviewListColoredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) =>\n technicalWidthInDents + overviewListColoredYarnSetWithStartDent.technicalWidthInDents,\n 0\n );\n }\n\n public getProductionScheduleLengthInMillimeters(): number {\n let productionScheduleLengthInMillimeters = 0;\n\n this.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n const currentPathLength = productionSchedulePath.totalLengthInMM;\n\n if (AssertionUtils.isNullOrUndefined(productionScheduleLengthInMillimeters) || currentPathLength > productionScheduleLengthInMillimeters) {\n productionScheduleLengthInMillimeters = currentPathLength;\n }\n });\n });\n\n return productionScheduleLengthInMillimeters;\n }\n\n public getProductionScheduleLengthInPicks(): number {\n let productionScheduleLengthInPicks = 0;\n\n this.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n const currentPathLength = productionSchedulePath.totalLengthInPicks;\n\n if (AssertionUtils.isNullOrUndefined(productionScheduleLengthInPicks) || currentPathLength > productionScheduleLengthInPicks) {\n productionScheduleLengthInPicks = currentPathLength;\n }\n });\n });\n\n return productionScheduleLengthInPicks;\n }\n\n public initProductionSchedulePathsForEachColoredYarnSet(productionScheduleColoredYarnSets: OverviewListColoredYarnSetWithStartDent[]): void {\n this.productionSchedulePathsOfColoredYarnSets = [];\n\n productionScheduleColoredYarnSets.forEach((productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent) =>\n this.productionSchedulePathsOfColoredYarnSets.push(new ProductionSchedulePathsOfColoredYarnSet(productionScheduleColoredYarnSet, [], null))\n );\n }\n\n public toJSON(complete: boolean = false, isMachineQualityChanged: boolean = false): JSON {\n const json = {\n name: this._name,\n status: this._status,\n machine: this._machine.toJSON(),\n machineQuality: this._machineQuality.toJSON(),\n practicalPickDensityInPicksPerMM: this._practicalPickDensityInPicksPerMM,\n coloredYarnSets: this._coloredYarnSets.map((productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent) => productionScheduleColoredYarnSet.toJSON()),\n initialRestZones: this._initialRestZones?.toJSON() ?? null,\n initialFreeZones: this._initialFreeZones?.toJSON() ?? null,\n finishing: this._finishing?.toJSON() ?? null,\n comment: this._comment,\n dueDate: !AssertionUtils.isNullOrUndefined(this._dueDate) ? moment(this._dueDate).startOf('day').subtract(new Date().getTimezoneOffset(), 'minutes').toISOString() : null,\n pathLabelInformation: this._pathLabelInformation?.toJSON() ?? null,\n freeZones: this._freeZones.map((freeZone: FreeZone) => freeZone.toJSON()),\n restZones: this._restZones.map((restZone: RestZone) => restZone.toJSON()),\n warnings: this._warnings,\n errors: this._errors,\n mappingForCurrentPositionOnMachine: this._mappingForCurrentPositionOnMachine,\n creel: this._creel.toJSON(),\n runId: this._runId,\n juteInformation: this.juteInformation?.toJSON() ?? null,\n buggy: this._buggy?.toJSON() ?? null,\n productConfiguration: this._productConfiguration?.toJSON() ?? null,\n numberOfRepeats: this._numberOfRepeats,\n missingDesigns: this._missingDesigns,\n isSample: this._isSample,\n hmiVersion: this._hmiVersion,\n canAddJute: this._canAddJute,\n addToPlanboard: this._addToPlanboard,\n juteGeneralSettings: this._juteGeneralSettings,\n preselectionId: this._preselectionId\n } as any as JSON;\n\n if (complete) {\n json['id'] = this._id;\n json['coloredYarnSetPaths'] = this._productionSchedulePathsOfColoredYarnSets.map((productionSchedulePaths: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePaths.toJSON());\n } else if (isMachineQualityChanged) {\n json['coloredYarnSetPaths'] = [];\n } else {\n json['dateCreated'] = this._dateCreated.toISOString();\n }\n\n return json;\n }\n\n public toNameGenerationJSON(): JSON {\n return {\n machine: new IdName(this._machine.id, this._machine.name),\n machineQuality: this._machineQuality.toJSON(),\n creel: new IdName(this._creel.id, this._creel.name),\n buggy: this._buggy?.toJSON() ?? new BuggyForProductionSchedule(0, null)\n } as any as JSON;\n }\n\n public getNonRecoloredProductionScheduleItemsPerColoredYarnSet(): Map {\n return new Map(\n this.productionSchedulePathsOfColoredYarnSets.map((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => [\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet,\n productionSchedulePathsOfColoredYarnSet.getNonRecoloredProductionScheduleItems()\n ])\n );\n }\n\n public getAmountOfNonRecoloredProductionScheduleItems(): number {\n return this.productionSchedulePathsOfColoredYarnSets.reduce(\n (amountOfNonRecoloredProductionScheduleItems: number, productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n amountOfNonRecoloredProductionScheduleItems + productionSchedulePathsOfColoredYarnSet.getNonRecoloredProductionScheduleItems().length,\n 0\n );\n }\n\n public getUniquePathLabelDrawingsPerColoredYarnSet(): Map {\n return new Map(\n this.productionSchedulePathsOfColoredYarnSets.map((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n const pathLabelDrawings = productionSchedulePathsOfColoredYarnSet.getUniquePathLabelDrawings();\n\n return [productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet, pathLabelDrawings];\n })\n );\n }\n\n public hasAtLeastOneProductionScheduleItemPerColoredYarnSet(): boolean {\n return (\n this.productionSchedulePathsOfColoredYarnSets.length > 0 &&\n this.productionSchedulePathsOfColoredYarnSets.every((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n return productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.some((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.pathGroups.length > 0);\n })\n );\n }\n\n public updateLoadedPathLabelDrawing(pathLabelDrawing: PathLabelDrawing): void {\n this.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.updateLoadedPathLabelDrawing(pathLabelDrawing)\n );\n }\n\n public hasZoneErrors(): boolean {\n return this.restZones.some((restZone: RestZone) => restZone.hasErrors()) || this.freeZones.some((freeZone: FreeZone) => freeZone.hasErrors());\n }\n\n public isProductionScheduleVerified(): boolean {\n return this.status === ProductionScheduleStatus.VERIFIED || this.status === ProductionScheduleStatus.VERIFIED_WITH_WARNINGS || this.status === ProductionScheduleStatus.VERIFIED_WITH_ERRORS;\n }\n\n public isProductionScheduleVerifiedWithNoErrors(): boolean {\n return (\n !this.hasZoneErrors() &&\n (this.status === ProductionScheduleStatus.VERIFIED || this.status === ProductionScheduleStatus.VERIFIED_WITH_WARNINGS || this.status === ProductionScheduleStatus.CREATED)\n );\n }\n\n public hasProductionScheduleErrors(): boolean {\n return this.errors !== null && Object.values(this.errors).some((error: number) => !AssertionUtils.isNullOrUndefined(error));\n }\n\n public getColoredYarnSetForProductionScheduleItem(productionScheduleItem: ProductionScheduleItemInPathGroup): OverviewListColoredYarnSet {\n return this.productionSchedulePathsOfColoredYarnSets.find((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.hasProductionScheduleItem(productionScheduleItem)\n ).productionScheduleColoredYarnSet.coloredYarnSet;\n }\n\n public getProductionScheduleColoredYarnSetForProductionSchedulePath(productionSchedulePath: ProductionSchedulePath): OverviewListColoredYarnSetWithStartDent {\n return this.productionSchedulePathsOfColoredYarnSets.find((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.hasProductionSchedulePath(productionSchedulePath)\n ).productionScheduleColoredYarnSet;\n }\n\n public canMoveProductionScheduleItemToProductionSchedulePath(\n indexInSourceProductionSchedulePath: number,\n sourceProductionSchedulePathNumber: number,\n indexInDestinationProductionSchedulePath: number,\n destinationProductionSchedulePathNumber: number,\n productionScheduleItem: ProductionScheduleItemInPathGroup\n ): boolean {\n const isInSamePath = sourceProductionSchedulePathNumber === destinationProductionSchedulePathNumber;\n let result = false;\n\n if (isInSamePath) {\n const isOnSamePositionOfSamePath = indexInSourceProductionSchedulePath === indexInDestinationProductionSchedulePath;\n const sourceProductionSchedulePath = this.getProductionSchedulePath(sourceProductionSchedulePathNumber);\n const hasOnlyOneProductionScheduleItemInSamePath = sourceProductionSchedulePath.pathGroups.length === 1;\n\n result = !isOnSamePositionOfSamePath && !hasOnlyOneProductionScheduleItemInSamePath;\n } else {\n const destinationProductionSchedulePath = this.getProductionSchedulePath(destinationProductionSchedulePathNumber);\n const listDrawing = getListDrawingFromProductionScheduleItem(productionScheduleItem, this);\n const destinationColoredYarnSetWithStartDent = this.getProductionScheduleColoredYarnSetForProductionSchedulePath(destinationProductionSchedulePath);\n\n if (this._machine.allowsEmptySpaceInPaths() || destinationProductionSchedulePath.technicalWidthInDents === productionScheduleItem.technicalDimensions.widthInDents) {\n const startDentOfSourceColoredYarnSet = this.getProductionScheduleColoredYarnSetForProductionSchedulePath(this.getProductionSchedulePath(sourceProductionSchedulePathNumber)).startDent;\n\n if (destinationColoredYarnSetWithStartDent.startDent === startDentOfSourceColoredYarnSet) {\n const productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet = this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDentOfSourceColoredYarnSet);\n const sourceProductionSchedulePath: ProductionSchedulePath = productionSchedulePathsOfColoredYarnSet.getProductionSchedulePath(sourceProductionSchedulePathNumber);\n\n const widerProductionScheduleItemInSourceProductionSchedulePath = maxBy(\n reject(sourceProductionSchedulePath.pathGroups, {uuid: productionScheduleItem.uuid}),\n 'technicalDimensions.widthInDents'\n );\n\n const widthOfWiderProductionScheduleItemInSourceProductionSchedulePath = widerProductionScheduleItemInSourceProductionSchedulePath?.technicalDimensions.widthInDents ?? 0;\n\n const differenceBetweenProductionScheduleItemWidthAndDestinationProductionSchedulePathWidth = Math.max(\n productionScheduleItem.technicalDimensions.widthInDents - destinationProductionSchedulePath.technicalWidthInDents,\n 0\n );\n\n const differenceBetweenProductionScheduleItemWidthAndWiderProductionScheduleItemInSourceProductionSchedulePathWidth = Math.max(\n productionScheduleItem.technicalDimensions.widthInDents - widthOfWiderProductionScheduleItemInSourceProductionSchedulePath,\n 0\n );\n\n const newProductionSchedulePathsWidthInDents =\n productionSchedulePathsOfColoredYarnSet.getProductionSchedulePathsWidthInDents() +\n differenceBetweenProductionScheduleItemWidthAndDestinationProductionSchedulePathWidth -\n differenceBetweenProductionScheduleItemWidthAndWiderProductionScheduleItemInSourceProductionSchedulePathWidth;\n\n result = newProductionSchedulePathsWidthInDents <= productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.technicalWidthInDents;\n } else {\n result = this.canAddProductionScheduleItemToProductionSchedulePath(listDrawing, destinationProductionSchedulePathNumber, destinationColoredYarnSetWithStartDent);\n }\n }\n }\n return result;\n }\n\n public canMoveProductionScheduleItemToColoredYarnSet(\n sourceProductionSchedulePathNumber: number,\n startDentOfDestinationColoredYarnSet: number,\n productionScheduleItem: ProductionScheduleItemInPathGroup\n ): boolean {\n let result = false;\n const listDrawing = getListDrawingFromProductionScheduleItem(productionScheduleItem, this);\n\n if (this.isLessThanAmountOfPossiblePaths()) {\n const sourceProductionSchedulePath = this.getProductionSchedulePath(sourceProductionSchedulePathNumber);\n const sourceColoredYarnSetWithStartDent = this.getProductionScheduleColoredYarnSetForProductionSchedulePath(sourceProductionSchedulePath);\n\n if (sourceColoredYarnSetWithStartDent.startDent === startDentOfDestinationColoredYarnSet) {\n const destinationColoredYarnSetWithStartDent = sourceColoredYarnSetWithStartDent;\n const productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet = this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDentOfDestinationColoredYarnSet);\n const widerProductionScheduleItemInSourceProductionSchedulePath = maxBy(\n reject(sourceProductionSchedulePath.pathGroups, {uuid: productionScheduleItem.uuid}),\n 'technicalDimensions.widthInDents'\n );\n\n const widthOfWiderProductionScheduleItemInSourceProductionSchedulePath = widerProductionScheduleItemInSourceProductionSchedulePath?.technicalDimensions.widthInDents ?? 0;\n\n const differenceBetweenProductionScheduleItemWidthAndWiderProductionScheduleItemInSourceProductionSchedulePathWidth = Math.max(\n productionScheduleItem.technicalDimensions.widthInDents - widthOfWiderProductionScheduleItemInSourceProductionSchedulePath,\n 0\n );\n\n result =\n productionSchedulePathsOfColoredYarnSet.getProductionSchedulePathsWidthInDents() +\n productionScheduleItem.technicalDimensions.widthInDents -\n differenceBetweenProductionScheduleItemWidthAndWiderProductionScheduleItemInSourceProductionSchedulePathWidth <=\n destinationColoredYarnSetWithStartDent.technicalWidthInDents;\n } else {\n result = this.canAddProductionScheduleItemToColoredYarnSet(startDentOfDestinationColoredYarnSet, listDrawing);\n }\n }\n return result;\n }\n\n public canMoveProductionSchedulePathToColoredYarnSet(sourceProductionSchedulePathNumber: number, startDentOfSourceColoredYarnSet: number, startDentOfDestinationColoredYarnSet: number): boolean {\n let result = false;\n\n const destinationColoredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent = this.getProductionScheduleColoredYarnSetAtStartDent(startDentOfDestinationColoredYarnSet);\n\n if (startDentOfSourceColoredYarnSet === startDentOfDestinationColoredYarnSet) {\n result = true;\n } else {\n const sourceProductionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet = this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDentOfSourceColoredYarnSet);\n const destinationProductionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet =\n this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDentOfDestinationColoredYarnSet);\n const productionSchedulePath = sourceProductionSchedulePathsOfColoredYarnSet.getProductionSchedulePath(sourceProductionSchedulePathNumber);\n\n result =\n destinationProductionSchedulePathsOfColoredYarnSet.getProductionSchedulePathsWidthInDents() + productionSchedulePath.technicalWidthInDents <=\n destinationColoredYarnSetWithStartDent.technicalWidthInDents;\n }\n return result;\n }\n\n public canAddProductionScheduleItemToProductionSchedulePath(\n listDrawing: ListDrawing,\n productionSchedulePathNumber: number,\n productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent\n ): boolean {\n let result = false;\n if (!listDrawing) {\n return result;\n }\n\n const drawingWidthInDents =\n listDrawing instanceof ListDrawingOrderLine ? listDrawing.orderLine?.article?.technicalWidthInDents : calculateDrawingWidthInDents(listDrawing.drawing, this.machineQuality);\n\n const drawingHasSameWidthAsProductionSchedulePath = this.getProductionSchedulePath(productionSchedulePathNumber)?.technicalWidthInDents === drawingWidthInDents;\n\n if (this._machine.allowsEmptySpaceInPaths() || drawingHasSameWidthAsProductionSchedulePath) {\n result = this.enoughWidthToAddProductionScheduleItemToProductionSchedulePath(listDrawing, productionSchedulePathNumber, productionScheduleColoredYarnSet);\n }\n return result;\n }\n\n public canAddProductionScheduleItemToProductionSchedulePathForNewBuilder(productionScheduleItem: ProductionScheduleItemInPathGroup | ListDrawing, technicalWidthInDents: number): boolean {\n let result = false;\n let listDrawing: ListDrawing;\n if (productionScheduleItem instanceof ProductionScheduleItemInPathGroup) {\n listDrawing = getListDrawingFromProductionScheduleItem(productionScheduleItem, this);\n } else {\n listDrawing = productionScheduleItem;\n }\n if (!listDrawing) {\n return result;\n }\n\n result = this.hasExcactWidthOfProductionSchedulePath(listDrawing, technicalWidthInDents);\n\n return result;\n }\n\n public enoughWidthToAddProductionScheduleItemToProductionSchedulePath(\n listDrawing: ListDrawing,\n productionSchedulePathNumber: number,\n productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent\n ): boolean {\n const drawingWidthInDents =\n listDrawing instanceof ListDrawingOrderLine ? listDrawing.orderLine?.article.technicalWidthInDents : calculateDrawingWidthInDents(listDrawing.drawing, this.machineQuality);\n const productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet = this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(productionScheduleColoredYarnSet?.startDent);\n const productionSchedulePath: ProductionSchedulePath = productionSchedulePathsOfColoredYarnSet.getProductionSchedulePath(productionSchedulePathNumber);\n\n const differenceBetweenDrawingWidthAndPathWidth = Math.max(drawingWidthInDents - productionSchedulePath.technicalWidthInDents, 0);\n\n return (\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.reduce(\n (sumTechnicalWidthInDents: number, path: ProductionSchedulePath) => sumTechnicalWidthInDents + path.technicalWidthInDents,\n 0\n ) +\n differenceBetweenDrawingWidthAndPathWidth <=\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.technicalWidthInDents\n );\n }\n\n public hasExcactWidthOfProductionSchedulePath(listDrawing: ListDrawing, technicalWidthInDents: number): boolean {\n const drawingWidthInDents =\n listDrawing instanceof ListDrawingOrderLine ? listDrawing.orderLine?.article.technicalWidthInDents : calculateDrawingWidthInDents(listDrawing.drawing, this.machineQuality);\n\n const differenceBetweenDrawingWidthAndPathWidth = Math.abs(drawingWidthInDents - technicalWidthInDents);\n\n return differenceBetweenDrawingWidthAndPathWidth === 0;\n }\n\n public canAddProductionScheduleItemToColoredYarnSet(startDentOfColoredYarnSet: number, listDrawing: ListDrawing): boolean {\n return this.isLessThanAmountOfPossiblePaths() ? this.enoughWidthToAddProductionScheduleItemToColoredYarnSet(startDentOfColoredYarnSet, listDrawing) : false;\n }\n\n public enoughWidthToAddProductionScheduleItemToColoredYarnSet(startDentOfColoredYarnSet: number, listDrawing: ListDrawing): boolean {\n const {technicalWidthInDents} = this.getProductionScheduleColoredYarnSetAtStartDent(startDentOfColoredYarnSet);\n const totalWidthOfProductionSchedulePathsInDents = this.getProductionSchedulePathsOfColoredYarnSetAtStartDent(startDentOfColoredYarnSet).getProductionSchedulePathsWidthInDents();\n const drawingWidthInDents =\n listDrawing instanceof ListDrawingOrderLine ? listDrawing.orderLine?.article.technicalWidthInDents : calculateDrawingWidthInDents(listDrawing.drawing, this.machineQuality);\n return totalWidthOfProductionSchedulePathsInDents + drawingWidthInDents <= technicalWidthInDents;\n }\n\n public canBeModified(): boolean {\n return (\n this._status === ProductionScheduleStatus.DRAFT ||\n this._status === ProductionScheduleStatus.VERIFIED ||\n this._status === ProductionScheduleStatus.VERIFIED_WITH_ERRORS ||\n this._status === ProductionScheduleStatus.VERIFIED_WITH_WARNINGS ||\n this._status === ProductionScheduleStatus.CREATED\n );\n }\n\n public isDraft(): boolean {\n return this._status === ProductionScheduleStatus.DRAFT;\n }\n\n public hasBeenConfigured(): boolean {\n let isPathLabelInformationValid = true;\n let isJuteInformationValid = true;\n\n if (!AssertionUtils.isNullOrUndefined(this.pathLabelInformation) && this.pathLabelInformation.hasAddedPathLabelBefore() && this.pathLabelInformation.hasAddedPathLabelAfter()) {\n let areFontSettingsValid = true;\n\n if (this.pathLabelInformation.pathLabelBefore.isText() || this.pathLabelInformation.pathLabelAfter.isText()) {\n const {fontStyle, fontWeight, fontFamily} = this.pathLabelInformation.fontSettings;\n areFontSettingsValid = !AssertionUtils.isNullOrUndefined(fontStyle) && !AssertionUtils.isNullOrUndefined(fontWeight) && !AssertionUtils.isNullOrUndefined(fontFamily);\n }\n\n isPathLabelInformationValid =\n !AssertionUtils.isNullOrUndefined(this.pathLabelInformation.labelHeightInPicks) &&\n isMultipleOf(this.pathLabelInformation.labelHeightInPicks, this.machineQuality?.weaveStructure?.sendRepeat) &&\n !AssertionUtils.isNullOrUndefined(this.pathLabelInformation.labelHeightInMM) &&\n this.pathLabelInformation.labelFontSizeInMM &&\n !AssertionUtils.isNullOrUndefined(this.pathLabelInformation.pattern) &&\n areFontSettingsValid;\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.juteInformation)) {\n const sendRepeat = this.machineQuality?.weaveStructure?.sendRepeat;\n\n if (!AssertionUtils.isNullOrUndefined(this.juteInformation.juteBefore)) {\n isJuteInformationValid = JuteInformationForPart.isValid(this.juteInformation.juteBefore, sendRepeat);\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.juteInformation.juteAfter)) {\n isJuteInformationValid = isJuteInformationValid && JuteInformationForPart.isValid(this.juteInformation.juteAfter, sendRepeat);\n }\n }\n\n return (\n !AssertionUtils.isNullOrUndefined(this.name) &&\n !AssertionUtils.isNullOrUndefined(this.machine) &&\n this.coloredYarnSets.length > 0 &&\n !AssertionUtils.isNullOrUndefined(this.machineQuality) &&\n !AssertionUtils.isNullOrUndefined(this.practicalPickDensityInPicksPerMM) &&\n this.areInitialFreeZonesValid() &&\n this.areInitialRestZonesValid() &&\n isPathLabelInformationValid &&\n isJuteInformationValid\n );\n }\n\n public isRestZoneConfigurable(): boolean {\n return this.coloredYarnSets.length === 1;\n }\n\n public hasAddedDesigns(): boolean {\n return this.designs.length > 0;\n }\n\n public updateFinishing(finishing: FinishingForProductionSchedule): void {\n this.finishing = finishing;\n this.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.updateFinishing(finishing);\n });\n }\n\n public canPrintWeavingOrderForProductionSchedule(): boolean {\n const productionScheduleStatusesThatAllowPrintingWeavingOrder: ProductionScheduleStatus[] = [\n ProductionScheduleStatus.PROCESSED,\n ProductionScheduleStatus.FINALIZING,\n ProductionScheduleStatus.FINALIZED,\n ProductionScheduleStatus.TRANSLATING,\n ProductionScheduleStatus.TRANSLATED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.EXECUTING,\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL,\n ProductionScheduleStatus.CANCELLED,\n ProductionScheduleStatus.QUEUING,\n ProductionScheduleStatus.QUEUED\n ];\n\n return productionScheduleStatusesThatAllowPrintingWeavingOrder.includes(this.status);\n }\n\n public isExecuted(): boolean {\n const executedProductionScheduleStatus: ProductionScheduleStatus[] = [ProductionScheduleStatus.EXECUTED, ProductionScheduleStatus.EXECUTED_COMPLETE, ProductionScheduleStatus.EXECUTED_PARTIAL];\n\n return executedProductionScheduleStatus.includes(this.status);\n }\n\n public isPartiallyOrCompletelyExecuted(): boolean {\n const executedProductionScheduleStatus: ProductionScheduleStatus[] = [ProductionScheduleStatus.EXECUTED_COMPLETE, ProductionScheduleStatus.EXECUTED_PARTIAL];\n\n return executedProductionScheduleStatus.includes(this.status);\n }\n\n public isCreelMappingApplied(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.mappingForCurrentPositionOnMachine);\n }\n\n public hasOrderLines(): boolean {\n return this._orderLines.length > 0;\n }\n\n public updateOrderLineQuantities(): void {\n if (this.hasOrderLines()) {\n this._orderLines.forEach((orderLine: ProductionScheduleOrderLine) => {\n orderLine.amountInProductionSchedule = this.getOrderLineQuantityInProductionSchedulePathsColoredYarnSets(orderLine.id);\n orderLine.heightInProductionScheduleInMM = this.getOrderLineHeightInMMInProductionSchedulePathsColoredYarnSets(orderLine.id);\n });\n }\n }\n\n public updatePathLengths(productionSchedule: ProductionSchedule): void {\n this.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.updatePathLengths(productionSchedule)\n );\n }\n\n public getOrderLineQuantityInProductionSchedulePathsColoredYarnSets(orderLineId: number): number {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (quantity: number, productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n quantity + productionSchedulePathsOfColoredYarnSet.getOrderLineQuantityInProductionSchedulePaths(orderLineId),\n 0\n );\n }\n\n public getOrderLineHeightInMMInProductionSchedulePathsColoredYarnSets(orderLineId: number): number {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (lengthInMM: number, productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n lengthInMM + productionSchedulePathsOfColoredYarnSet.getOrderLineHeightInMMInProductionSchedulePaths(orderLineId),\n 0\n );\n }\n\n public getProductionScheduleItemsForListDrawing(listDrawing: ListDrawing): ProductionScheduleItemInPathGroup[] {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionScheduleItems.push(...productionSchedulePathsOfColoredYarnSet.getProductionScheduleItemsForListDrawing(listDrawing));\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionScheduleItemsForOrderLine(orderLineId: number): ProductionScheduleItemInPathGroup[] {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionScheduleItems.push(...productionSchedulePathsOfColoredYarnSet.getProductionScheduleItemsForOrderLine(orderLineId));\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionScheduleItemsForOrderLineIdAndColoredYarnSet(orderLineId: number, coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent): ProductionScheduleItemInPathGroup[] {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (productionScheduleItems: ProductionScheduleItemInPathGroup[], productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n if (\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent === coloredYarnSetWithStartDent.startDent &&\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.coloredYarnSet.id === coloredYarnSetWithStartDent.coloredYarnSet.id\n ) {\n productionScheduleItems.push(...productionSchedulePathsOfColoredYarnSet.getProductionScheduleItemsForOrderLine(orderLineId));\n }\n\n return productionScheduleItems;\n },\n []\n );\n }\n\n public getProductionSchedulePathsOfColoredYarnSetForProductionScheduleItem(productionScheduleItem: ProductionScheduleItemInPathGroup): ProductionSchedulePathsOfColoredYarnSet {\n return this._productionSchedulePathsOfColoredYarnSets.find((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.hasProductionScheduleItem(productionScheduleItem)\n );\n }\n\n public isRelatedToRun(): boolean {\n return !AssertionUtils.isNullOrUndefined(this._runId);\n }\n\n public canBeDecreated(): boolean {\n return (\n this._status === ProductionScheduleStatus.CREATED ||\n this._status === ProductionScheduleStatus.PROCESSED ||\n this._status === ProductionScheduleStatus.TRANSLATED ||\n this._status === ProductionScheduleStatus.FAILURE ||\n this._status === ProductionScheduleStatus.ARRIVED ||\n this._status === ProductionScheduleStatus.QUEUED ||\n this._status === ProductionScheduleStatus.CREATING ||\n this._status === ProductionScheduleStatus.PROCESSING ||\n this._status === ProductionScheduleStatus.TRANSLATING ||\n this._status === ProductionScheduleStatus.TO_RECONFIRM ||\n this._status === ProductionScheduleStatus.TO_PLAN\n );\n }\n\n public isBeingDecreated(): boolean {\n return !AssertionUtils.isNullOrUndefined(this._id) && !isNaN(Number(this._id)) && this.canBeModified();\n }\n\n public removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets(): void {\n this._productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.removePathLabelsAndNonProductionItemsFromProductionSchedulePaths()\n );\n }\n\n public canCalculateYarnConsumption(): boolean {\n const productionScheduleStatusesThatAllowToCalculateYarnConsumption = [\n ProductionScheduleStatus.TRANSLATED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.EXECUTING,\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL,\n ProductionScheduleStatus.CANCELLED,\n ProductionScheduleStatus.QUEUING,\n ProductionScheduleStatus.QUEUED\n ];\n\n return productionScheduleStatusesThatAllowToCalculateYarnConsumption.includes(this._status);\n }\n\n public isStatusAtleastProcessed(): boolean {\n const productionScheduleStatuses: ProductionScheduleStatus[] = [\n ProductionScheduleStatus.PROCESSED,\n ProductionScheduleStatus.FINALIZING,\n ProductionScheduleStatus.FINALIZED,\n ProductionScheduleStatus.TRANSLATING,\n ProductionScheduleStatus.TRANSLATED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.EXECUTING,\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL,\n ProductionScheduleStatus.QUEUING,\n ProductionScheduleStatus.QUEUED\n ];\n\n return productionScheduleStatuses.includes(this.status);\n }\n\n public getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath(): {\n pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks: number;\n pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit: number;\n } {\n let longestProductionSchedulePath: ProductionSchedulePath;\n this.productionSchedulePathsOfColoredYarnSets?.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n let longestPathLengthInPicks = 0;\n productionSchedulePathsOfColoredYarnSet?.productionSchedulePaths?.forEach((productionSchedulePath: ProductionSchedulePath) => {\n if (productionSchedulePath?.totalLengthInPicks > longestPathLengthInPicks) {\n longestProductionSchedulePath = productionSchedulePath;\n }\n });\n });\n\n let pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks = 0;\n let pathLabelsOrNonProductionItemsFromLongestPathLengthInMM = 0;\n\n longestProductionSchedulePath?.pathGroups?.forEach((pathGroup: ProductionScheduleItemInPathGroup) => {\n if (pathGroup instanceof PathLabelProductionScheduleItemInPathGroup || pathGroup instanceof NonProductionItemInPathGroup) {\n pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks += pathGroup?.technicalDimensions.heightInPicks ?? 0;\n pathLabelsOrNonProductionItemsFromLongestPathLengthInMM += pathGroup?.commercialDimensionsInMM.heightInMM ?? 0;\n }\n });\n\n const pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit = Math.round(\n convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: pathLabelsOrNonProductionItemsFromLongestPathLengthInMM}, to: Unit.CENTIMETER})\n );\n\n return {pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks, pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit};\n }\n\n public getProductionScheduleItemMultiplier(): number {\n return this._machineQuality?.weaveStructure?.numberOfCloths ?? 1;\n }\n\n private isLessThanAmountOfPossiblePaths(): boolean {\n return AssertionUtils.isNullOrUndefined(this.machine.jacquard.amountOfPossiblePaths) || this.calculateTotalAmountOfAllPathsAfterAddingDrawing() <= this.machine.jacquard.amountOfPossiblePaths;\n }\n\n private calculateTotalAmountOfAllPathsAfterAddingDrawing(): number {\n return this._productionSchedulePathsOfColoredYarnSets.reduce(\n (totalAmountOfAllPaths: number, productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n totalAmountOfAllPaths + productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.length,\n 1\n );\n }\n\n private areInitialFreeZonesValid(): boolean {\n return !this.machine.canHaveRestAndFreeZonesAndPathLabels() || (!AssertionUtils.isNullOrUndefined(this.initialFreeZones) && this.initialFreeZones.isValid());\n }\n\n private areInitialRestZonesValid(): boolean {\n return !this.machine.canHaveRestAndFreeZonesAndPathLabels() || (!AssertionUtils.isNullOrUndefined(this.initialRestZones) && this.initialRestZones.isValid(this.isRestZoneConfigurable()));\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {RestZonePosition} from '@domain/production-schedule/rest-zone/rest-zone-position.enum';\nimport {UserDefinedRest} from '@domain/production-schedule/rest-zone/user-defined-rest';\nimport {isEqual, isNil} from 'lodash-es';\n\nexport class InitialRestZone {\n private readonly _position: RestZonePosition;\n private readonly _commercialWidthInMM: number;\n private readonly _technicalWidthInDents: number;\n private readonly _pattern: Pattern;\n private readonly _userDefinedRest: UserDefinedRest;\n\n public constructor(position: RestZonePosition, commercialWidthInMM: number, technicalWidthInNumberOfDents: number, pattern: Pattern, userDefinedRest: UserDefinedRest) {\n this._position = position;\n this._commercialWidthInMM = commercialWidthInMM;\n this._technicalWidthInDents = technicalWidthInNumberOfDents;\n this._pattern = pattern;\n this._userDefinedRest = userDefinedRest;\n\n if (this._pattern?.visualisations?.some((x: PatternVisualisation) => x.isWeavePatternVisualisation())) {\n this._pattern.clearName();\n }\n }\n\n public get position(): RestZonePosition {\n return this._position;\n }\n\n public get commercialWidthInMM(): number {\n return this._commercialWidthInMM;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public get userDefinedRest(): UserDefinedRest {\n return this._userDefinedRest;\n }\n\n public static fromJSON(initialRestZoneJSON: any): InitialRestZone {\n return new InitialRestZone(\n RestZonePosition[`${initialRestZoneJSON.position}`],\n initialRestZoneJSON.commercialWidthInMM,\n initialRestZoneJSON.technicalWidthInDents,\n Pattern.fromJSON(initialRestZoneJSON.pattern),\n isNil(initialRestZoneJSON.userDefinedRest)\n ? null\n : {\n position: RestZonePosition[`${initialRestZoneJSON.userDefinedRest.position}`],\n technicalWidthInDents: initialRestZoneJSON.userDefinedRest.technicalWidthInDents\n }\n );\n }\n\n public toJSON(): JSON {\n const result = {\n position: RestZonePosition[this._position],\n pattern: this._pattern.toJSON()\n };\n\n if (isEqual(this._position, RestZonePosition.USER_DEFINED)) {\n result['userDefinedRest'] = {\n position: RestZonePosition[this._userDefinedRest.position],\n technicalWidthInDents: this._userDefinedRest.technicalWidthInDents\n };\n }\n\n return result as any as JSON;\n }\n\n public isValid(isConfigurable: boolean): boolean {\n let isValid = !isNil(this.pattern);\n\n if (isValid && isConfigurable) {\n isValid = !isNil(this.position);\n if (isValid && isEqual(this._position, RestZonePosition.USER_DEFINED)) {\n isValid = !isNil(this.userDefinedRest.technicalWidthInDents);\n }\n }\n\n return isValid;\n }\n}\n","export enum RestZonePosition {\n LEFT,\n RIGHT,\n SYMMETRICAL,\n USER_DEFINED\n}\n\nexport namespace RestZonePosition {\n export function getUserDefinedRestZonePositions(): RestZonePosition[] {\n return [RestZonePosition.LEFT, RestZonePosition.RIGHT];\n }\n\n export function getRestZonePositions(): RestZonePosition[] {\n return [RestZonePosition.LEFT, RestZonePosition.RIGHT, RestZonePosition.SYMMETRICAL, RestZonePosition.USER_DEFINED];\n }\n}\n","import {ZoneErrors} from '@domain/production-schedule/zone-errors';\nimport {ZoneWarnings} from '@domain/production-schedule/zone-warnings';\nimport {isNil} from 'lodash-es';\n\nexport class RestZone {\n private _technicalWidthInDents: number;\n private _startDent: number;\n private _coloredYarnSetPathNr: number;\n private _errors: ZoneErrors;\n private _warnings: ZoneWarnings;\n\n public constructor(technicalWidthInDents: number, startDent: number, coloredYarnSetPathNr: number, errors?: ZoneErrors, warnings?: ZoneWarnings) {\n this._technicalWidthInDents = technicalWidthInDents;\n this._startDent = startDent;\n this._coloredYarnSetPathNr = coloredYarnSetPathNr;\n this._errors = errors;\n this._warnings = warnings;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public set technicalWidthInDents(value: number) {\n this._technicalWidthInDents = value;\n }\n\n public get startDent(): number {\n return this._startDent;\n }\n\n public set startDent(value: number) {\n this._startDent = value;\n }\n\n public get coloredYarnSetPathNr(): number {\n return this._coloredYarnSetPathNr;\n }\n\n public set coloredYarnSetPathNr(value: number) {\n this._coloredYarnSetPathNr = value;\n }\n\n public get errors(): ZoneErrors {\n return this._errors;\n }\n\n public set errors(value: ZoneErrors) {\n this._errors = value;\n }\n\n public get warnings(): ZoneWarnings {\n return this._warnings;\n }\n\n public set warnings(value: ZoneWarnings) {\n this._warnings = value;\n }\n\n public static fromJSON(restZoneJSON: any): RestZone {\n return new RestZone(restZoneJSON.technicalWidthInDents, restZoneJSON.startDent, restZoneJSON.coloredYarnSetPathNr, restZoneJSON.errors, restZoneJSON.warnings);\n }\n\n public hasErrors(): boolean {\n return !isNil(this.errors);\n }\n\n public toJSON(): JSON {\n return {\n technicalWidthInDents: this._technicalWidthInDents,\n startDent: this._startDent,\n startPick: 0,\n coloredYarnSetPathNr: this._coloredYarnSetPathNr\n } as any as JSON;\n }\n}\n","import {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {isNil} from 'lodash-es';\nimport {DrawingImage} from './drawing-image';\n\nexport class TftDrawing extends Drawing {\n public constructor(id: number, name: string, image: DrawingImage, shape: string, repeated: boolean, sizeInKB?: number, shapeId?: number) {\n super(id, name, DrawingType.TFT, image, null, shape, false, repeated, [], null, [], false, null, sizeInKB, undefined, undefined, shapeId);\n }\n\n public static fromJSON(drawingJSON: any): TftDrawing {\n const image: DrawingImage = isNil(drawingJSON.image)\n ? {}\n : {\n id: drawingJSON.image.id || null,\n data: drawingJSON.image.data || null\n };\n\n return new TftDrawing(drawingJSON.id, drawingJSON.name, image, drawingJSON.shape, drawingJSON.repeated, drawingJSON.sizeInKB, drawingJSON.shapeId);\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n imageId: this.image.id,\n drawingType: `${DrawingType[this.drawingType]}`,\n shape: this.shape,\n shapeId: this.shapeId\n } as any as JSON;\n }\n}\n","export enum Permission {\n TEXBOT_SHOW_ICON,\n TEXBOT_DOCUMENTS_VIEW,\n TEXBOT_TRAINING_VIEW,\n TEXBOT_TRAINING_MANAGE,\n\n TEXEDIT_SHOW_ICON,\n TEXEDIT_CADCAM_PRODUCT_CONFIGURATION_VIEW,\n TEXEDIT_CADCAM_WEAVESTRUCTURE_EDIT,\n TEXEDIT_VIEW_EP,\n TEXEDIT_EDIT,\n TEXEDIT_PROC,\n TEXEDIT_ADVANCED_PROC,\n TEXEDIT_TUFTLINK,\n TEXEDIT_EDIT_DRAWING_LIBRARY,\n TEXEDIT_VIEW_DRAWING_LIBRARY,\n TEXEDIT_DESIGN_YARN_PERCENTAGES,\n TEXEDIT_DRAWING_COLOR_MAP,\n TEXEDIT_PREVIEW_BMP,\n\n TEXSTYLE_SHOW_ICON,\n TEXSTYLE_VIEW,\n TEXSTYLE_EDIT,\n TEXSTYLE_VIEW_WEAVE_STRUCTURES,\n TEXSTYLE_EDIT_WEAVE_STRUCTURES,\n TEXSTYLE_WEAVE_STRUCTURES_EDIT_PATTERN,\n TEXSTYLE_QUALITY_SELVEDGES_VIEW,\n TEXSTYLE_QUALITY_SELVEDGES_EDIT_PATTERN,\n TEXSTYLE_QUALITY_SELVEDGES_EDIT_LABEL,\n TEXSTYLE_QUALITY_EDIT_ALTERNATIVES,\n TEXSTYLE_MACHINE_QUALITY_PATH_WIDTHS,\n TEXSTYLE_COLOR_VIEW,\n TEXSTYLE_COLOR_EDIT,\n TEXSTYLE_YARN_VIEW,\n TEXSTYLE_YARN_EDIT,\n TEXSTYLE_COLORSET_VIEW,\n TEXSTYLE_COLORSET_EDIT,\n TEXSTYLE_YARNSET_VIEW,\n TEXSTYLE_YARNSET_EDIT,\n TEXSTYLE_COLOREDYARNSET_VIEW,\n TEXSTYLE_COLOREDYARNSET_EDIT,\n TEXSTYLE_WEFTCOLOREDYARNSET_VIEW,\n TEXSTYLE_WEFTCOLOREDYARNSET_EDIT,\n TEXSTYLE_CREEL_VIEW,\n TEXSTYLE_CREEL_EDIT,\n TEXSTYLE_TUFT_PRODUCT_VIEW,\n TEXSTYLE_TUFT_PRODUCT_EDIT,\n TEXSTYLE_WEAVE_PRODUCT_VIEW,\n TEXSTYLE_WEAVE_PRODUCT_EDIT,\n TEXSTYLE_PLASTIC_PRODUCT_VIEW,\n TEXSTYLE_PLASTIC_PRODUCT_EDIT,\n TEXSTYLE_FINISHING_VIEW,\n TEXSTYLE_FINISHING_EDIT,\n TEXSTYLE_MACHINE_QUALITY_VIEW,\n TEXSTYLE_MACHINE_QUALITY_EDIT,\n TEXSTYLE_PLASTIC_TOOL_VIEW,\n TEXSTYLE_PLASTIC_TOOL_EDIT,\n TEXSTYLE_STOCK_LOCATION_VIEW,\n TEXSTYLE_STOCK_LOCATION_EDIT,\n TEXSTYLE_RAW_MATERIAL_VIEW,\n TEXSTYLE_RAW_MATERIAL_EDIT,\n\n TEXFAB_SHOW_ICON,\n TEXFAB_VIEWEP,\n TEXFAB_SCHEDULE,\n TEXFAB_PLANNINGBOARD,\n TEXFAB_PLANNINGBOARD_NEW,\n TEXFAB_CARPET_PLANNING,\n TEXFAB_WEAVE_PLANNING,\n TEXFAB_TUFT_PLANNING,\n TEXFAB_PLASTIC_PLANNING,\n TEXFAB_PROJECTS,\n TEXFAB_YARNCONSUMPTION,\n TEXFAB_YARNCONSUMPTION_FOR_SMARTCREEL_PVD_FILE,\n TEXFAB_SMARTCREEL,\n TEXFAB_VIEW,\n TEXFAB_ORDERBOOK,\n TEXFAB_CARPET_QUEUE,\n TEXFAB_TUFT_QUEUE,\n TEXFAB_TUFT_ORDER_VIEW,\n TEXFAB_TUFT_ORDER_EDIT,\n TEXFAB_WEAVE_QUEUE,\n TEXFAB_WEAVE_ORDER_VIEW,\n TEXFAB_WEAVE_ORDER_EDIT,\n TEXFAB_PLASTIC_QUEUE,\n\n TEXFAB_CUSTOMER_VIEW,\n TEXFAB_CUSTOMER_EDIT,\n TEXFAB_ARTICLE_VIEW,\n TEXFAB_ARTICLE_EDIT,\n TEXFAB_SALES_ORDER_VIEW,\n TEXFAB_SALES_ORDER_EDIT,\n TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW,\n TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT,\n TEXFAB_NEW_BUILDER,\n TEXFAB_QUANTITY_SUGGESTION,\n TEXFAB_SCHEDULE_FEEDBACK,\n TEXFAB_VERIFY_NEW,\n TEXFAB_PLASTIC_ORDER_VIEW,\n TEXFAB_PLASTIC_ORDER_EDIT,\n\n TEXBI_SHOW_ICON,\n TEXBI_EVENT_BOARD_VIEW,\n TEXBI_EVENT_BOARD_EDIT,\n TEXBI_READ_A_REPORT,\n TEXBI_EXTRUSION_VIBRATION_FORM,\n TEXBI_EXTRUSION_VIBRATION_REPORT,\n\n TEXSTATE_VIEW,\n TEXSTATE_FILETRANSFER,\n TEXSTATE_EDIT_MACHINE,\n TEXSTATE_VIEW_LIVE,\n TEXSTATE_SHOW_ICON,\n TEXSTATE_VNC,\n TEXSTATE_MANAGE_GROUPS,\n TEXSTATE_MANAGE_FLOORPLAN_ITEM,\n TEXSTATE_VIEW_LIVE_STATUS,\n TEXSTATE_VIEW_LIVE_STARTSTOP_MESSAGES,\n TEXSTATE_VIEW_LIVE_DECLARATION_MESSAGES,\n TEXSTATE_VIEW_LIVE_ORDER_MESSAGES,\n TEXSTATE_VIEW_LIVE_FIXED_DATA_TEMPLATE,\n TEXSTATE_VIEW_HISTORY_MESSAGES,\n TEXSTATE_VIEW_DYNAMIC_DATA_TEMPLATE,\n TEXSTATE_EDIT_DYNAMIC_DATA_TEMPLATE,\n\n SETTINGS_SHOW_ICON,\n SETTINGS_DECLARATIONS_VIEW,\n SETTINGS_DECLARATIONS_EDIT,\n SETTINGS_DATA_UNIT_SETUP_VIEW,\n SETTINGS_DATA_UNIT_SETUP_EDIT,\n SETTINGS_DATA_UNIT_SETUP_CATALOG_VIEW,\n SETTINGS_DATA_UNIT_SETUP_CATALOG_EDIT,\n SETTINGS_DATA_UNIT_SETUP_CATALOG_REVIEW,\n SETTINGS_OPERATOR_VIEW,\n SETTINGS_OPERATOR_EDIT,\n SETTINGS_OPERATOR_TYPE_VIEW,\n SETTINGS_OPERATOR_TYPE_EDIT,\n SETTINGS_REPORT_ITEM_VIEW,\n SETTINGS_REPORT_ITEM_EDIT,\n SETTINGS_AUTOMATIC_STOP_GROUP_VIEW,\n SETTINGS_AUTOMATIC_STOP_GROUP_EDIT,\n REJECT_REASON_VIEW,\n REJECT_REASON_EDIT,\n\n SALES_VIEW,\n DESIGNS_VIEW,\n\n ALERT_VIEW_NOTIFICATIONS,\n ALERT_VIEW_EVENTS,\n ALERT_EDIT_EVENTS,\n\n ACCESS_ALL,\n\n MANAGEMENT_APPLICATION,\n PROFILE_CREDITS,\n PROFILE_SPEEDTEST,\n JOB_VIEW,\n CHANGE_INDIVIDUAL_FINISHING,\n ADD_PATH_LABEL,\n SCHEDULE_DUE_DATE,\n PRINT_WEAVE_ORDER,\n PRINT_BUGGY_OVERVIEW,\n VIEW_LOSS,\n VIEW_MIN_MAX_BUGGY,\n CAN_SIGN_TERMSANDCONDITIONS,\n FINISHING_LABEL,\n FINISHING_CUTTINGLINE,\n ADD_JUTE,\n\n PLAN_IN_BUGGIES,\n VIEW_BUGGIES,\n EDIT_BUGGIES,\n FIXED_SCHEDULE_VIEW,\n FIXED_SCHEDULE_EDIT,\n SHIFT_VIEW,\n SHIFT_EDIT,\n SHIFT_PATTERN_VIEW,\n SHIFT_PATTERN_EDIT,\n SHIFT_SCHEDULE_VIEW,\n SHIFT_SCHEDULE_EDIT,\n MANAGE_WEAVE_STRUCTURE_VIEW,\n MANAGE_WEAVE_STRUCTURE_EDIT,\n COMPANY_WEAVE_STRUCTURE_VIEW,\n COMPANY_WEAVE_STRUCTURE_EDIT,\n\n PHYSICAL_QUANTITY_VIEW,\n PHYSICAL_QUANTITY_EDIT,\n\n RESOURCE_TYPE_VIEW,\n RESOURCE_TYPE_EDIT,\n\n MACHINE_DATA_SOURCE_VIEW,\n MACHINE_DATA_SOURCE_EDIT,\n\n ADMIN_DEVICE_TEMPLATE_VIEW,\n ADMIN_DEVICE_TEMPLATE_EDIT,\n DEVICE_TEMPLATE_VIEW,\n DEVICE_TEMPLATE_EDIT,\n\n ADD_MANUAL_JUTE,\n EXPORT_WEAVE_STRUCTURES\n}\n","import {Permission} from '@domain/profile/permission.enum';\nimport {isEqual, map, snakeCase, some, toUpper} from 'lodash-es';\n\nexport class RoleInfo {\n private readonly _role: string;\n private readonly _permissions: Permission[];\n\n public constructor(role: string, permissions: Permission[]) {\n this._role = role;\n this._permissions = permissions;\n }\n\n public get role(): string {\n return this._role;\n }\n\n public get permissions(): Permission[] {\n return this._permissions;\n }\n\n public static fromJSON(roleInfoJSON: any): RoleInfo {\n return new RoleInfo(\n roleInfoJSON.role,\n map(roleInfoJSON.permissions, (permission: any) => Permission[toUpper(snakeCase(permission as string))])\n );\n }\n\n public toJSON(): JSON {\n return {\n role: this._role,\n permissions: map(this._permissions, (permission: any) => Permission[permission])\n } as any as JSON;\n }\n\n public hasPermission(permissionToCheck: Permission): boolean {\n return some(this._permissions, (permission: Permission) => isEqual(permissionToCheck, permission));\n }\n}\n","export class UserIdentity {\n private readonly _subscriptionId: string;\n private readonly _companyId: string;\n private readonly _userId: string;\n\n public constructor(userId: string, companyId: string, subscriptionId: string) {\n this._userId = userId;\n this._companyId = companyId;\n this._subscriptionId = subscriptionId;\n }\n\n public get subscriptionId(): string {\n return this._subscriptionId;\n }\n\n public get companyId(): string {\n return this._companyId;\n }\n\n public get userId(): string {\n return this._userId;\n }\n\n public static fromJSON(userIdentityJSON: any): UserIdentity {\n return new UserIdentity(userIdentityJSON.userId, userIdentityJSON.companyId, userIdentityJSON.subscriptionId);\n }\n\n public toJSON(): JSON {\n return {\n userId: this._userId,\n companyId: this._companyId,\n subscriptionId: this._subscriptionId\n } as unknown as JSON;\n }\n}\n","import {Permission} from '@domain/profile/permission.enum';\nimport {RoleInfo} from '@domain/profile/role-info';\nimport {UserIdentity} from '@domain/profile/user-identity';\nimport {flatMap, isEmpty, isNil, map, some, uniq} from 'lodash-es';\nimport {Company} from './company';\nimport {TimeZone} from './time-zone';\n\nexport class Subscription {\n private readonly _id: string;\n private readonly _name: string;\n private readonly _roles: RoleInfo[];\n private readonly _timeZone: TimeZone;\n private _company: Company;\n private readonly _userIdentity: UserIdentity;\n private _acceptedTermsAndConditions: boolean;\n private _locked: boolean;\n\n public constructor(id: string, name: string, roles: RoleInfo[], timeZone: TimeZone, company: Company, userIdentity: UserIdentity, acceptedTermsAndConditions: boolean, locked: boolean) {\n this._id = id;\n this._name = name;\n this._roles = roles;\n this._timeZone = timeZone;\n this._company = company;\n this._userIdentity = userIdentity;\n this._acceptedTermsAndConditions = acceptedTermsAndConditions;\n this._locked = locked;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get roles(): RoleInfo[] {\n return this._roles;\n }\n\n public get company(): Company {\n return this._company;\n }\n\n public set company(company: Company) {\n this._company = company;\n }\n\n public get timeZone(): TimeZone {\n return this._timeZone;\n }\n\n public get userIdentity(): UserIdentity {\n return this._userIdentity;\n }\n\n public get acceptedTermsAndConditions(): boolean {\n return this._acceptedTermsAndConditions;\n }\n\n public get locked(): boolean {\n return this._locked;\n }\n\n public static fromJSON(subscriptionJSON: any): Subscription {\n const subscriptionTimeZone = isNil(subscriptionJSON.subscriptionTimeZone) ? null : subscriptionJSON.subscriptionTimeZone;\n const identity = isNil(subscriptionJSON.identityUser) ? null : UserIdentity.fromJSON(subscriptionJSON.identityUser);\n\n return new Subscription(\n subscriptionJSON.id,\n subscriptionJSON.name,\n map(subscriptionJSON.roles, (roleJSON: any) => RoleInfo.fromJSON(roleJSON)),\n subscriptionTimeZone,\n null,\n identity,\n subscriptionJSON.acceptedTermsAndConditions,\n subscriptionJSON.isLocked\n );\n }\n\n public static fromLocalStorage(subscriptionJSONString: any): Subscription {\n return Subscription.fromJSON(subscriptionJSONString);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n roles: map(this._roles, (role: RoleInfo) => role.toJSON()),\n subscriptionTimeZone: this.timeZone,\n identityUser: this.userIdentity.toJSON()\n } as any as JSON;\n }\n\n public getAllPermissions(): Permission[] {\n return uniq(flatMap(this._roles, (role: RoleInfo) => role.permissions));\n }\n\n public hasPermission(permission: Permission): boolean {\n return some(this._roles, (role: RoleInfo) => role.hasPermission(permission));\n }\n\n public isValid(): boolean {\n return !(some(this.roles, (roleInfo: RoleInfo) => isEmpty(roleInfo.role)) || isNil(this.timeZone) || isNil(this.userIdentity));\n }\n\n public hasAtLeastOneOfThePermissions(permissions: Permission[]): boolean {\n return some(permissions, (permission: Permission) => this.hasPermission(permission));\n }\n\n public hasAllPermissions(...permissions: Permission[]): boolean {\n return permissions.every((permission: Permission) => this.hasPermission(permission));\n }\n}\n","export enum VersionableType {\n CLIENT,\n TEXTILE,\n MACHINE,\n PRODUCTION,\n MESSAGING,\n WORKER\n}\n","export interface PropertyValue {\n propertyName: string;\n possiblePropertyValues?: any[];\n propertyValue?: any;\n headerName?: string;\n}\n\nexport function getProperty(listOfCustomSettings: PropertyValue[], propertyName: string): PropertyValue {\n return listOfCustomSettings.find((propertyValue: PropertyValue) => propertyValue.propertyName === propertyName);\n}\n\nexport function getPropertyValue(listOfCustomSettings: PropertyValue[], propertyName: string): any {\n return listOfCustomSettings.find((customSetting: PropertyValue) => customSetting.propertyName === propertyName)?.propertyValue;\n}\n\nexport function getPossiblePropertyValues(listOfCustomSettings: PropertyValue[], propertyName: string): any {\n return listOfCustomSettings.find((customSetting: PropertyValue) => customSetting.propertyName === propertyName)?.possiblePropertyValues;\n}\n","export enum ReportItemTemplateField {\n MACHINE_EFFICIENCY_VALUE = 1,\n MACHINE_EFFICIENCY_LEVEL = 2,\n OPERATOR_EFFICIENCY = 3,\n ACTUAL_ROTATIONS_PER_MINUTE = 4,\n ORDER_NAME = 5,\n ORDER_PROGRESS = 6,\n PRODUCTION_TIME = 7,\n REMAINING_TIME = 8,\n REMAINING_PICKS = 9,\n DECLARATION_CODE = 10,\n DECLARATION_ABBREVIATION = 11,\n DECLARATION_COLOR = 12,\n DECLARATION_PATTERN = 13,\n PICKS = 14,\n STANDARD_RPM = 15,\n WEAVE_PRODUCT = 16,\n AVERAGE_RPM = 17,\n QUALITY = 18,\n SPEED_EFFICIENCY = 19,\n PRODUCTION = 20,\n RUN_TIMESTAMP = 21,\n STOP_TIMESTAMP = 22,\n PICKS_REQUIRED = 23,\n PICKS_PRODUCED = 24,\n QTY_REQUIRED = 25,\n QTY_PRODUCED = 26,\n STOP_GROUPS = 27,\n GROUP_EFFICIENCY_VALUE = 28,\n ESTIMATED_TIME_OF_COMPLETION = 29,\n MACHINE_STATE = 30,\n LOT_ID = 31,\n WEIGHT = 32,\n PACKAGES = 33,\n PRODUCTIVE_SPEED = 34,\n SPINDLE_EFFICIENCY = 35,\n SYSTEM_EFFICIENCY = 36,\n CUTS_PER_10KM = 37,\n JOINTS_PER_10KM = 38,\n YARN_FAULTS_PER_10KM = 39,\n GROUP = 40,\n OVERALL_EFFICIENCY = 41,\n BATCH_NUMBER = 42,\n REMAINING_BATCH_TIME = 43,\n TOTAL_ALARM_TIME = 44,\n TOTAL_STOP_TIME = 45,\n WATER_CONSUMPTION = 46,\n STEAM_CONSUMPTION = 47,\n TEMP_MAIN_TANK = 48,\n TEMP_SIDE_TANK = 49,\n ACTIVE_MAIN_FUNCTION = 50,\n ACTIVE_FUNCTION_WINDOW_1 = 51,\n ACTIVE_FUNCTION_WINDOW_2 = 52,\n ACTIVE_FUNCTION_WINDOW_3 = 53,\n TIME_TILL_NEXT_OPERATOR_CALL = 54,\n TIME_TILL_NEXT_PREPARATION = 55,\n PROCESS_NUMBER = 56,\n ACTUAL_TREATMENT_NUMBER = 57,\n NEXT_BATCH_NUMBER = 58,\n BATCH_LOAD = 59,\n LIQUOR_RATIO = 60,\n REEL_SPEED = 61,\n PUMP_SPEED = 62,\n ACTIVE_PREPARATION = 63,\n ACTIVE_PREPARATION_STEP_NUMBER = 64,\n DECLARATION_TIME = 66,\n AIR_CONSUMPTION = 67,\n POWER_CONSUMPTION = 68,\n SEC_AIR = 69,\n SEC_POWER = 70,\n AUTOMATIC_STOP = 71,\n AUTOMATIC_STOP_TIME = 72,\n AUTOMATIC_STOP_TEXT = 73,\n TUFT_PRODUCT = 74,\n STITCHES = 75,\n QTY_REMAINING = 76,\n TOTAL_RUN_TIME = 77,\n TOTAL_STOP_GROUP_TIME = 78,\n TOTAL_DECLARATION_TIME = 79,\n DECLARATIONS = 80,\n REACTIVE_ENERGY_CONSUMPTION = 81,\n APPARENT_ENERGY_CONSUMPTION = 82,\n CAPACITIVE_ENERGY = 83,\n INDUCTIVE_ENERGY = 84,\n FREQUENCY = 85,\n U12 = 86,\n U31 = 87,\n U23 = 88,\n CUSTOMER = 89,\n COLOR = 90,\n PRODUCT_GROUP = 91,\n PRODUCT_UOM = 92,\n PRODUCT_SPEED = 93,\n PRODUCT_EFFICIENCY = 94,\n PRODUCT_MOUNT_TIME = 95,\n PRODUCT_DISMOUNT_TIME = 96,\n PRODUCT_LOAD_TIME = 97,\n PRODUCT_UNLOAD_TIME = 98,\n DUE_DATE = 99,\n MOUNT_TIME = 100,\n DISMOUNT_TIME = 101,\n LOAD_TIME = 102,\n UNLOAD_TIME = 103,\n AVAILABILITY_LOSS_PERCENT = 104,\n AVAILABILITY_LOSS_TIME = 105,\n PERFORMANCE_LOSS_PERCENT = 106,\n PERFORMANCE_LOSS_TIME = 107,\n QUALITY_LOSS = 108,\n OEE_PERCENT = 109,\n MEAN_TIME_BETWEEN_FAILURE = 110,\n MEAN_TIME_TO_REPAIR = 111,\n BASE_LOAD_ENERGY = 113,\n PROCESS_LOAD_ENERGY = 114,\n AUTO_STOPS_PER_HOURS = 115,\n GAS_CONSUMPTION = 116,\n TOOL_NAME = 501,\n TOOL_TYPE = 502,\n TOOL_WEIGHT = 503,\n TOOL_SPEED = 504,\n TOOL_STATUS = 505,\n NUMBER_CAVITIES = 506,\n USED_CAVITIES = 507,\n MOUNT_TIME_TOOL = 508,\n DISMOUNT_TIME_TOOL = 509,\n WAIVE_CYCLE = 510,\n PIECE_CYCLE = 511,\n PLASTIC_PRODUCT = 512,\n MATERIAL_PLASTICS = 513,\n ORDER_PLASTICS = 514,\n ORDER_TOOL = 515,\n REJECT_NAME = 517,\n REJECT_CODE = 518,\n REJECT_GROUP = 519,\n SCRAP_INDICATOR = 520,\n CYCLES_DONE = 521,\n ITEMS_PRODUCED = 522,\n CYCLES_WAIVED = 523,\n ITEMS_REJECTED = 524,\n MEAN_CYCLE_TIME = 525,\n MEAN_TIME_TO_ATTEND = 526,\n PERCENTAGE_REJECTED = 527,\n NONE = 9999\n}\n","import {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\n\nexport class ArticleForSalesOrderLine {\n private _id: number;\n private _name: string;\n private _design: {\n shape: string;\n repeated: boolean;\n };\n\n public constructor(id: number, name: string, design: {shape: string; repeated: boolean}) {\n this._id = id;\n this._name = name;\n this._design = design;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get design(): {shape: string; repeated: boolean} {\n return this._design;\n }\n\n public static fromJSON(articleJSON: any): ArticleForSalesOrderLine {\n return new ArticleForSalesOrderLine(articleJSON.id, articleJSON.name, {\n shape: articleJSON.design.shape,\n repeated: articleJSON.design.repeated\n });\n }\n\n public static fromOverviewListArticle(article: OverviewListArticle): ArticleForSalesOrderLine {\n return new ArticleForSalesOrderLine(article.id, article.name, {\n shape: article.design.shape,\n repeated: article.design.repeated\n });\n }\n}\n","import {Customer} from '@domain/customer/customer';\n\nexport class CustomerForSalesOrder {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(customerJSON: any): CustomerForSalesOrder {\n return new CustomerForSalesOrder(customerJSON.id, customerJSON.name);\n }\n\n public static fromCustomer(customer: Customer): CustomerForSalesOrder {\n return new CustomerForSalesOrder(customer.id, customer.name);\n }\n}\n","import {ArticleForSalesOrderLine} from '@domain/sales-order/article-for-sales-order-line';\n\nexport class OrderLineForSalesOrder {\n private _id: number;\n private _article: ArticleForSalesOrderLine;\n private _amount: number;\n private _amountPlanned: number;\n private _amountLeft: number;\n private _amountProduced: number;\n private _commercialLengthInMM: number;\n\n public constructor(id: number, article: ArticleForSalesOrderLine, amount: number, amountPlanned: number, amountLeft: number, amountProduced: number, commercialLengthInMM?: number) {\n this._id = id;\n this._article = article;\n this._amount = amount;\n this._amountPlanned = amountPlanned;\n this._amountLeft = amountLeft;\n this._amountProduced = amountProduced;\n this._commercialLengthInMM = commercialLengthInMM;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get article(): ArticleForSalesOrderLine {\n return this._article;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public get amountPlanned(): number {\n return this._amountPlanned;\n }\n\n public get amountLeft(): number {\n return this._amountLeft;\n }\n\n public get amountProduced(): number {\n return this._amountProduced;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public static fromJSON(orderLineJSON: any): OrderLineForSalesOrder {\n return new OrderLineForSalesOrder(\n orderLineJSON.id,\n ArticleForSalesOrderLine.fromJSON(orderLineJSON.article),\n orderLineJSON.amount,\n orderLineJSON.amountPlanned,\n orderLineJSON.amountLeft,\n orderLineJSON.amountProduced,\n orderLineJSON.commercialLengthInMM\n );\n }\n\n public toJSON(): JSON {\n const orderLineJSON = {\n articleId: this._article.id,\n amount: this._amount\n } as any as JSON;\n\n if (this._article.design.repeated) {\n orderLineJSON['commercialLengthInMM'] = this._commercialLengthInMM;\n }\n return orderLineJSON;\n }\n}\n","export enum PaymentStatus {\n OPEN = 'OPEN',\n ADVANCE_PAID = 'ADVANCE_PAID',\n PAID = 'PAID'\n}\n","import {CustomerForSalesOrder} from '@domain/sales-order/customer-for-sales-order';\nimport {OrderLineForSalesOrder} from '@domain/sales-order/order-line-for-sales-order';\nimport {PaymentStatus} from '@domain/sales-order/payment-status';\nimport {EnumUtils, Priority, TimeUtils} from '@vdw/angular-component-library';\nimport {map, sum} from 'lodash-es';\nimport {SalesOrderStatus} from './sales-order-status';\n\nexport class SalesOrder {\n private _id: number;\n private _orderNumber: number;\n private _customer: CustomerForSalesOrder;\n private _desiredDate: Date;\n private _priority: Priority;\n private _paymentStatus: PaymentStatus;\n private _orderLines: OrderLineForSalesOrder[];\n private _status: SalesOrderStatus;\n private _used: boolean;\n\n public constructor(\n id: number,\n orderNumber: number,\n customer: CustomerForSalesOrder,\n desiredDate: Date,\n priority: Priority,\n paymentStatus: PaymentStatus,\n orderLines: OrderLineForSalesOrder[],\n status: SalesOrderStatus,\n used?: boolean\n ) {\n this._id = id;\n this._orderNumber = orderNumber;\n this._customer = customer;\n this._desiredDate = desiredDate;\n this._priority = priority;\n this._paymentStatus = paymentStatus;\n this._orderLines = orderLines;\n this._status = status;\n this._used = used;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get orderNumber(): number {\n return this._orderNumber;\n }\n\n public set orderNumber(value: number) {\n this._orderNumber = value;\n }\n\n public get customer(): CustomerForSalesOrder {\n return this._customer;\n }\n\n public set customer(value: CustomerForSalesOrder) {\n this._customer = value;\n }\n\n public get desiredDate(): Date {\n return this._desiredDate;\n }\n\n public set desiredDate(value: Date) {\n this._desiredDate = value;\n }\n\n public get priority(): Priority {\n return this._priority;\n }\n\n public set priority(value: Priority) {\n this._priority = value;\n }\n\n public get paymentStatus(): PaymentStatus {\n return this._paymentStatus;\n }\n\n public set paymentStatus(value: PaymentStatus) {\n this._paymentStatus = value;\n }\n\n public get orderLines(): OrderLineForSalesOrder[] {\n return this._orderLines;\n }\n\n public set orderLines(value: OrderLineForSalesOrder[]) {\n this._orderLines = value;\n }\n\n public get status(): SalesOrderStatus {\n return this._status;\n }\n\n public set status(value: SalesOrderStatus) {\n this._status = value;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(value: boolean) {\n this._used = value;\n }\n\n public static createEmptySalesOrder(): SalesOrder {\n return new SalesOrder(null, null, null, null, null, null, [], null);\n }\n\n public static fromJSON(salesOrderJSON: any): SalesOrder {\n return new SalesOrder(\n salesOrderJSON.id,\n salesOrderJSON.orderNumber,\n CustomerForSalesOrder.fromJSON(salesOrderJSON.customer),\n new Date(salesOrderJSON.desiredDate),\n salesOrderJSON.priority,\n salesOrderJSON.paymentStatus,\n map(salesOrderJSON.orderLines, (orderLineJSON: any) => OrderLineForSalesOrder.fromJSON(orderLineJSON)),\n salesOrderJSON.status,\n salesOrderJSON.used\n );\n }\n\n public getTotalAmountRequested(): number {\n return sum(map(this._orderLines, (orderLine: OrderLineForSalesOrder) => orderLine.amount));\n }\n\n public getTotalAmountProduced(): number {\n return sum(map(this._orderLines, (orderLine: OrderLineForSalesOrder) => orderLine.amountProduced));\n }\n\n public toJSON(): JSON {\n return {\n orderNumber: this._orderNumber,\n customerId: this._customer.id,\n priority: EnumUtils.getKeyFromValue(Priority, this._priority),\n desiredDate: TimeUtils.convertToUTCDate(this._desiredDate).toISOString(),\n paymentStatus: EnumUtils.getKeyFromValue(PaymentStatus, this._paymentStatus),\n orderLines: map(this._orderLines, (orderLine: OrderLineForSalesOrder) => orderLine.toJSON())\n } as any as JSON;\n }\n}\n","import {PatternVisualisation} from './pattern-visualisation';\nimport {PatternVisualisationType} from './pattern-visualisation-type.enum';\n\nexport class SvgPatternVisualisation extends PatternVisualisation {\n private _svg: string;\n\n public constructor(svg: string) {\n super(PatternVisualisationType.PATTERN);\n\n this._svg = svg;\n }\n\n public get svg(): string {\n return this._svg;\n }\n\n public static fromJSON(patternVisualisationJSON: any): SvgPatternVisualisation {\n return new SvgPatternVisualisation(patternVisualisationJSON.pattern);\n }\n\n public toJSON(): JSON {\n return {\n pattern: this._svg,\n patternType: PatternVisualisationType[this.type]\n } as any as JSON;\n }\n}\n","export enum TargetForListOfDrawingsEnum {\n DRAWING_LIBRARY = 'drawing-library',\n PRODUCTION_ORDER = 'production-schedule',\n PRODUCT_CONFIGURATION = 'product-configuration'\n}\n","import {IdName} from '@domain/id-name';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {UnitOfMeasurement} from '@domain/textile-data/plastic-product/unit-of-measurement.enum';\n\nexport class IdNameUnitOfMeasurement extends IdName {\n private _unitOfMeasurement: UnitOfMeasurement;\n private _speedUnit: StandardSpeed;\n\n public constructor(id: number, name: string, unitOfMeasurement: UnitOfMeasurement, speedUnit: StandardSpeed) {\n super(id, name);\n\n this._unitOfMeasurement = unitOfMeasurement;\n this._speedUnit = speedUnit;\n }\n\n public get unitOfMeasurement(): UnitOfMeasurement {\n return this._unitOfMeasurement;\n }\n\n public set unitOfMeasurement(value: UnitOfMeasurement) {\n this._unitOfMeasurement = value;\n }\n\n public get speedUnit(): StandardSpeed {\n return this._speedUnit;\n }\n\n public set speedUnit(value: StandardSpeed) {\n this._speedUnit = value;\n }\n\n public static fromJSON(object: any): IdNameUnitOfMeasurement {\n return new IdNameUnitOfMeasurement(object.id, object.name, object.unitOfMeasurement, object.speedUnit);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n unitOfMeasurement: this.unitOfMeasurement,\n speedUnit: this.speedUnit\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {convertSpeedAndCycleTime} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {IdNameUnitOfMeasurement} from './id-name-unit-of-measurement';\n\nexport class PlasticProductionOrder {\n private _id: number;\n private _name: string;\n private _status: ProductionScheduleStatus;\n private _dueDate: Date;\n private _plasticProduct: IdNameUnitOfMeasurement;\n private _plannedQuantity: number;\n private _machine: IdName;\n private _machineGroup: IdName;\n private _tool: IdName;\n private _plannedSpeed: number;\n private _plannedEfficiency: number;\n\n public constructor(\n id: number,\n name: string,\n status: ProductionScheduleStatus,\n dueDate: Date,\n plasticProduct: IdNameUnitOfMeasurement,\n plannedQuantity: number,\n machine: IdName,\n machineGroup: IdName,\n tool: IdName,\n plannedSpeed: number,\n plannedEfficiency: number\n ) {\n this._id = id;\n this._name = name;\n this._status = status;\n this._dueDate = dueDate;\n this._plasticProduct = plasticProduct;\n this._plannedQuantity = plannedQuantity;\n this._machine = machine;\n this._machineGroup = machineGroup;\n this._tool = tool;\n this._plannedSpeed = plannedSpeed;\n this._plannedEfficiency = plannedEfficiency;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public set dueDate(value: Date) {\n this._dueDate = value;\n }\n\n public get plasticProduct(): IdNameUnitOfMeasurement {\n return this._plasticProduct;\n }\n\n public set plasticProduct(value: IdNameUnitOfMeasurement) {\n this._plasticProduct = value;\n }\n\n public get plannedQuantity(): number {\n return this._plannedQuantity;\n }\n\n public set plannedQuantity(value: number) {\n this._plannedQuantity = value;\n }\n\n public get machine(): IdName {\n return this._machine;\n }\n\n public set machine(value: IdName) {\n this._machine = value;\n }\n\n public get machineGroup(): IdName {\n return this._machineGroup;\n }\n\n public set machineGroup(value: IdName) {\n this._machineGroup = value;\n }\n\n public get tool(): IdName {\n return this._tool;\n }\n\n public set tool(value: IdName) {\n this._tool = value;\n }\n\n public get plannedSpeed(): number {\n return this._plannedSpeed;\n }\n\n public set plannedSpeed(value: number) {\n this._plannedSpeed = value;\n }\n\n public get plannedEfficiency(): number {\n return this._plannedEfficiency;\n }\n\n public set plannedEfficiency(value: number) {\n this._plannedEfficiency = value;\n }\n\n public static fromJSON(plasticProductionOrderJSON: any): PlasticProductionOrder {\n return new PlasticProductionOrder(\n plasticProductionOrderJSON.id,\n plasticProductionOrderJSON.name,\n plasticProductionOrderJSON.status,\n plasticProductionOrderJSON.dueDate ? new Date(plasticProductionOrderJSON.dueDate) : null,\n plasticProductionOrderJSON.plasticProduct ? IdNameUnitOfMeasurement.fromJSON(plasticProductionOrderJSON.plasticProduct) : null,\n plasticProductionOrderJSON.plannedQuantity,\n plasticProductionOrderJSON.machine ? IdName.fromJSON(plasticProductionOrderJSON.machine) : null,\n plasticProductionOrderJSON.machineGroup ? IdName.fromJSON(plasticProductionOrderJSON.machineGroup) : null,\n plasticProductionOrderJSON.tool ? IdName.fromJSON(plasticProductionOrderJSON.tool) : null,\n plasticProductionOrderJSON.plasticProduct.speedUnit === StandardSpeed.SPEED\n ? convertSpeedAndCycleTime(plasticProductionOrderJSON.plannedSpeedInCycleTime)\n : plasticProductionOrderJSON.plannedSpeedInCycleTime,\n plasticProductionOrderJSON.plannedEfficiency\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n dueDate: this._dueDate ? moment(this._dueDate).startOf('day').subtract(this._dueDate.getTimezoneOffset(), 'minutes').toISOString() : null,\n plasticProduct: this._plasticProduct ? this._plasticProduct.toJSON() : null,\n plannedQuantity: this._plannedQuantity,\n machineId: this._machine?.id,\n machineName: this._machine?.name,\n machineGroupId: this._machineGroup?.id,\n tool: this._tool ? this._tool.toJSON() : null,\n plannedSpeedInCycleTime: this._plasticProduct?.speedUnit === StandardSpeed.SPEED ? convertSpeedAndCycleTime(this._plannedSpeed) : this.plannedSpeed,\n plannedEfficiency: this._plannedEfficiency\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {IdNameVersion} from '@domain/id-name-version';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport moment from 'moment';\n\nexport class TuftProductionOrder {\n private _id: number;\n private _name: string;\n private _tuftProduct: IdNameVersion;\n private _machine: IdName;\n private _plannedQuantityInMeters: number;\n private _tuftingNotes: string;\n private _dateCreated: Date;\n private _dueDate: Date;\n private _status: ProductionScheduleStatus;\n\n public constructor(\n id: number,\n name: string,\n tuftProduct: IdNameVersion,\n machine: IdName,\n plannedQuantityInMeters: number,\n tuftingNotes: string,\n dateCreated: Date,\n dueDate: Date,\n status: ProductionScheduleStatus\n ) {\n this._id = id;\n this._name = name;\n this._tuftProduct = tuftProduct;\n this._machine = machine;\n this._plannedQuantityInMeters = plannedQuantityInMeters;\n this._tuftingNotes = tuftingNotes;\n this._dateCreated = dateCreated;\n this._dueDate = dueDate;\n this._status = status;\n }\n\n public static fromJSON(tuftProductionOrderJSON: any): TuftProductionOrder {\n return new TuftProductionOrder(\n tuftProductionOrderJSON.id,\n tuftProductionOrderJSON.name,\n IdNameVersion.fromJSON(tuftProductionOrderJSON.tuftProduct),\n tuftProductionOrderJSON.machine ? IdName.fromJSON(tuftProductionOrderJSON.machine) : null,\n tuftProductionOrderJSON.plannedQuantityInMeters,\n tuftProductionOrderJSON.tuftingNotes,\n new Date(tuftProductionOrderJSON.creationDate),\n tuftProductionOrderJSON.dueDate ? new Date(tuftProductionOrderJSON.dueDate) : null,\n tuftProductionOrderJSON.status\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n tuftProduct: this._tuftProduct.toJSON(),\n machine: this._machine?.toJSON(),\n plannedQuantityInMeters: this.plannedQuantityInMeters,\n tuftingNotes: this.tuftingNotes,\n creationDate: this._dateCreated ? this._dateCreated.toISOString() : new Date().toISOString(),\n dueDate: moment(this._dueDate).startOf('day').subtract(new Date().getTimezoneOffset(), 'minutes').toISOString(),\n status: this.status\n } as any as JSON;\n }\n\n public static createEmptyTuftProductionOrder(): TuftProductionOrder {\n return new TuftProductionOrder(null, null, null, null, null, null, null, null, null);\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get tuftProduct(): IdNameVersion {\n return this._tuftProduct;\n }\n\n public set tuftProduct(value: IdNameVersion) {\n this._tuftProduct = value;\n }\n\n public get machine(): IdName {\n return this._machine;\n }\n\n public set machine(value: IdName) {\n this._machine = value;\n }\n\n public get plannedQuantityInMeters(): number {\n return this._plannedQuantityInMeters;\n }\n\n public set plannedQuantityInMeters(value: number) {\n this._plannedQuantityInMeters = value;\n }\n\n public get tuftingNotes(): string {\n return this._tuftingNotes;\n }\n\n public set tuftingNotes(value: string) {\n this._tuftingNotes = value;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public set dateCreated(value: Date) {\n this._dateCreated = value;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public set dueDate(value: Date) {\n this._dueDate = value;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n}\n","import {MaterialSet} from '@domain/textile-data/colored-yarn-set/material-set';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {Color} from '@vdw/angular-component-library';\nimport {flatMap, map, size, uniqBy} from 'lodash-es';\n\nexport class ColorSet extends MaterialSet {\n public constructor(id: number, name: string, creelPositions: CreelPosition[], used: boolean, technicalCode: string, alternativeColorSetIds?: number[]) {\n super(id, name, creelPositions, used, technicalCode, alternativeColorSetIds);\n }\n\n public static createEmptyColorSet(): ColorSet {\n return new ColorSet(null, null, [], null, null, null);\n }\n\n public static fromJSON(colorSetJSON: any): ColorSet {\n return new ColorSet(\n colorSetJSON.id,\n colorSetJSON.name,\n map(colorSetJSON.creelPositions, (creelPositionJSON: any) => {\n return CreelPosition.fromJSON(creelPositionJSON);\n }),\n colorSetJSON.used,\n colorSetJSON.technicalCode ?? null,\n colorSetJSON.alternativeColorSetIds ?? null\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n creelPositions: map(this.creelPositions, (creelPosition: CreelPosition, indexOfCreelPosition: number) => {\n return {\n creelPosition: indexOfCreelPosition + 1,\n creel: creelPosition.toJSON()\n };\n }),\n technicalCode: this.technicalCode,\n alternativeColorSetIds: this.alternativeColorSetIds ?? []\n } as any as JSON;\n }\n\n public getColors(): Color[] {\n return uniqBy(flatMap(this.creelPositions, (creelPosition: CreelPosition) => creelPosition.getUniqueItems()) as Color[], 'id');\n }\n\n public getSizeOfCreelPositions(): number {\n return size(this.creelPositions);\n }\n\n public isColorSet(): boolean {\n return true;\n }\n\n public isYarnSet(): boolean {\n return false;\n }\n}\n","import {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {HorizontalPositionOfCreelPositionType} from '@domain/textile-data/creel/horizontal-position-of-creel-position-type.enum';\nimport {Color} from '@vdw/angular-component-library';\nimport {fill} from 'lodash-es';\n\nexport class HorizontalPositionOfColorCreelPosition extends HorizontalPositionOfCreelPosition {\n private readonly _color: Color;\n\n public constructor(amount: number, color: Color, isSelected: boolean = false) {\n super(HorizontalPositionOfCreelPositionType.COLOR, amount, isSelected);\n\n this._color = color;\n }\n\n public get color(): Color {\n return this._color;\n }\n\n public static fromJSON(colorCreelPositionJSON: any): HorizontalPositionOfColorCreelPosition {\n return new HorizontalPositionOfColorCreelPosition(colorCreelPositionJSON.amount, Color.fromJSON(colorCreelPositionJSON.single));\n }\n\n public toJSON(): JSON {\n return {\n type: HorizontalPositionOfCreelPositionType[this.type],\n id: this.color.id,\n amount: this.amount\n } as any as JSON;\n }\n\n public getAmountOfDentsInHorizontalPositionOfCreelPosition(): number {\n return this.amount;\n }\n\n public getPatternForHorizontalPositionOfCreelPosition(): Color[] {\n return fill(new Array(this.amount), this.color);\n }\n}\n","import {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {isNil} from 'lodash-es';\n\nexport class ColoredYarnSet extends OverviewListColoredYarnSet {\n private readonly _colorSet: ColorSet;\n private readonly _yarnSet: YarnSet;\n private _alternativeColoredYarnSetIds: number[];\n private _technicalCode: string;\n\n public constructor(id: number, name: string, colorSet: ColorSet, yarnSet: YarnSet, used: boolean, technicalCode: string, alternativeColoredYarnSetIds: number[] = []) {\n const overviewListColorSet: OverviewListColorSet = !isNil(colorSet) ? OverviewListColorSet.fromColorSet(colorSet) : null;\n const overviewListYarnSet: OverviewListYarnSet = !isNil(yarnSet) ? OverviewListYarnSet.fromYarnSet(yarnSet) : null;\n\n super(id, name, overviewListColorSet, overviewListYarnSet, used);\n this._colorSet = colorSet;\n this._yarnSet = yarnSet;\n\n this._alternativeColoredYarnSetIds = alternativeColoredYarnSetIds;\n this._technicalCode = technicalCode;\n }\n\n public get colorSet(): ColorSet {\n return this._colorSet;\n }\n\n public get yarnSet(): YarnSet {\n return this._yarnSet;\n }\n\n public get alternativeColoredYarnSetIds(): number[] {\n return this._alternativeColoredYarnSetIds;\n }\n\n public set alternativeColoredYarnSetIds(value: number[]) {\n this._alternativeColoredYarnSetIds = value;\n }\n\n public get technicalCode(): string {\n return this._technicalCode;\n }\n\n public static createEmptyColoredYarnSet(): ColoredYarnSet {\n return new ColoredYarnSet(null, null, null, null, null, null, []);\n }\n\n public static fromJSON(coloredYarnSetJSON: any): ColoredYarnSet {\n return new ColoredYarnSet(\n coloredYarnSetJSON.id,\n coloredYarnSetJSON.name,\n ColorSet.fromJSON(coloredYarnSetJSON.colorSet),\n YarnSet.fromJSON(coloredYarnSetJSON.yarnSet),\n coloredYarnSetJSON.used,\n coloredYarnSetJSON.technicalCode,\n coloredYarnSetJSON.alternativeColoredYarnSetIds\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n colorSetId: this.colorSet.id,\n yarnSetId: this.yarnSet.id,\n alternativeColoredYarnSetIds: this._alternativeColoredYarnSetIds,\n technicalCode: this._technicalCode\n } as any as JSON;\n }\n}\n","import {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {HorizontalPositionOfCreelPositionType} from '@domain/textile-data/creel/horizontal-position-of-creel-position-type.enum';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {fill, flatMap, map, sumBy} from 'lodash-es';\n\nexport class HorizontalPositionOfGroupCreelPosition extends HorizontalPositionOfCreelPosition {\n private readonly _group: HorizontalPositionOfCreelPosition[];\n\n public constructor(amount: number, group: HorizontalPositionOfCreelPosition[], isSelected: boolean = false) {\n super(HorizontalPositionOfCreelPositionType.GROUP, amount, isSelected);\n\n this._group = group;\n }\n\n public get group(): HorizontalPositionOfCreelPosition[] {\n return this._group;\n }\n\n public static fromJSON(groupCreelPositionJSON: any): HorizontalPositionOfGroupCreelPosition {\n return new HorizontalPositionOfGroupCreelPosition(\n groupCreelPositionJSON.amount,\n map(groupCreelPositionJSON.group, (groupJSON: any) => {\n let position: HorizontalPositionOfCreelPosition;\n const type: HorizontalPositionOfCreelPositionType = groupJSON.type as HorizontalPositionOfCreelPositionType;\n const valueOfType: HorizontalPositionOfCreelPositionType = HorizontalPositionOfCreelPositionType[type] as any as HorizontalPositionOfCreelPositionType;\n\n switch (valueOfType) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n position = HorizontalPositionOfColorCreelPosition.fromJSON(groupJSON);\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n position = HorizontalPositionOfGroupCreelPosition.fromJSON(groupJSON);\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n position = HorizontalPositionOfYarnTypeCreelPosition.fromJSON(groupJSON);\n break;\n }\n return position;\n })\n );\n }\n\n public toJSON(): JSON {\n return {\n type: HorizontalPositionOfCreelPositionType[this.type],\n group: map(this.group, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result: JSON;\n\n switch (horizontalPositionOfCreelPosition.type) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfColorCreelPosition).toJSON();\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).toJSON();\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfYarnTypeCreelPosition).toJSON();\n break;\n }\n\n return result;\n }),\n amount: this.amount\n } as any as JSON;\n }\n\n public getItems(): YarnType[] | Color[] {\n return flatMap(this.group, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result;\n\n switch (horizontalPositionOfCreelPosition.type) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfColorCreelPosition).color;\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).getItems();\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfYarnTypeCreelPosition).yarnType;\n break;\n default:\n result = [];\n }\n\n return result;\n });\n }\n\n public getAmountOfDentsInHorizontalPositionOfCreelPosition(): number {\n const result = sumBy(this.group, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n return horizontalPositionOfCreelPosition.getAmountOfDentsInHorizontalPositionOfCreelPosition();\n });\n\n return result * this.amount;\n }\n\n public getPatternForHorizontalPositionOfCreelPosition(): Color[] | OverviewListYarnType[] {\n return flatMap(\n fill(\n Array(this.amount),\n flatMap(this.group, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n return horizontalPositionOfCreelPosition.getPatternForHorizontalPositionOfCreelPosition();\n })\n )\n ) as any as Color[] | OverviewListYarnType[];\n }\n}\n","import {CreelPosition} from '@domain/textile-data/creel/creel-position';\n\nexport abstract class MaterialSet {\n private _id: number;\n private _name: string;\n private _creelPositions: CreelPosition[];\n private _used: boolean;\n private _technicalCode: string;\n private _alternativeColorSetIds: number[];\n\n protected constructor(id: number, name: string, creelPositions: CreelPosition[], used: boolean, technicalCode: string = '', alternativeColorSetIds?: number[]) {\n this._id = id;\n this._name = name;\n this._creelPositions = creelPositions;\n this._used = used;\n this._technicalCode = technicalCode;\n this._alternativeColorSetIds = alternativeColorSetIds;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get creelPositions(): CreelPosition[] {\n return this._creelPositions;\n }\n\n public set creelPositions(value: CreelPosition[]) {\n this._creelPositions = value;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public get technicalCode(): string {\n return this._technicalCode;\n }\n\n public set technicalCode(value: string) {\n this._technicalCode = value;\n }\n\n public get alternativeColorSetIds(): number[] {\n return this._alternativeColorSetIds;\n }\n\n public set alternativeColorSetIds(value: number[]) {\n this._alternativeColorSetIds = value;\n }\n\n public abstract isColorSet(): boolean;\n\n public abstract isYarnSet(): boolean;\n}\n","export enum ColoredYarnSetPosition {\n BOTTOM,\n TOP\n}\n","import {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {HorizontalPositionOfCreelPositionType} from '@domain/textile-data/creel/horizontal-position-of-creel-position-type.enum';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {each, flatMap, isNil, map, size, uniqBy} from 'lodash-es';\n\nexport class CreelPosition {\n private readonly _horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[];\n private _isSelected: boolean;\n\n public constructor(creelPositionHorizontalPositions: HorizontalPositionOfCreelPosition[], isSelected: boolean = false) {\n this._horizontalPositionsOfCreelPosition = creelPositionHorizontalPositions;\n this._isSelected = isSelected;\n }\n\n public get horizontalPositionsOfCreelPosition(): HorizontalPositionOfCreelPosition[] {\n return this._horizontalPositionsOfCreelPosition;\n }\n\n public static fromJSON(creelPositionJSON: any): CreelPosition {\n return new CreelPosition(\n map(creelPositionJSON.creel, (creelJSON: any) => {\n let position: HorizontalPositionOfCreelPosition;\n\n const type: HorizontalPositionOfCreelPositionType = creelJSON.type as HorizontalPositionOfCreelPositionType;\n const valueOfType: HorizontalPositionOfCreelPositionType = HorizontalPositionOfCreelPositionType[type] as any as HorizontalPositionOfCreelPositionType;\n\n switch (valueOfType) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n position = HorizontalPositionOfColorCreelPosition.fromJSON(creelJSON);\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n position = HorizontalPositionOfGroupCreelPosition.fromJSON(creelJSON);\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n position = HorizontalPositionOfYarnTypeCreelPosition.fromJSON(creelJSON);\n break;\n }\n return position;\n })\n );\n }\n\n public toJSON(): JSON {\n return map(this.horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result: JSON;\n\n switch (horizontalPositionOfCreelPosition.type) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfColorCreelPosition).toJSON();\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).toJSON();\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfYarnTypeCreelPosition).toJSON();\n break;\n }\n\n return result;\n }) as any as JSON;\n }\n\n public getSortedItems(): MaterialType[] {\n return flatMap(this.horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result;\n\n switch (horizontalPositionOfCreelPosition.type) {\n case HorizontalPositionOfCreelPositionType.COLOR:\n result = !isNil(horizontalPositionOfCreelPosition.amount)\n ? Array(horizontalPositionOfCreelPosition.amount).fill((horizontalPositionOfCreelPosition as HorizontalPositionOfColorCreelPosition).color)\n : (horizontalPositionOfCreelPosition as HorizontalPositionOfColorCreelPosition).color;\n break;\n case HorizontalPositionOfCreelPositionType.GROUP:\n result = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).getItems();\n break;\n case HorizontalPositionOfCreelPositionType.YARN_TYPE:\n result = !isNil(horizontalPositionOfCreelPosition.amount)\n ? Array(horizontalPositionOfCreelPosition.amount).fill((horizontalPositionOfCreelPosition as HorizontalPositionOfYarnTypeCreelPosition).yarnType)\n : (horizontalPositionOfCreelPosition as HorizontalPositionOfYarnTypeCreelPosition).yarnType;\n\n break;\n default:\n result = [];\n }\n\n return result;\n });\n }\n\n public getPatternForGivenNumberOfDents(numberOfDents: number): Color[] | OverviewListYarnType[] {\n const patternForGivenNumberOfDents = [];\n\n while (this.hasMaximumSizeOfDentsBeenReached(patternForGivenNumberOfDents, numberOfDents)) {\n each(this.horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n if (this.hasMaximumSizeOfDentsBeenReached(patternForGivenNumberOfDents, numberOfDents)) {\n each(horizontalPositionOfCreelPosition.getPatternForHorizontalPositionOfCreelPosition(), (item: Color | OverviewListYarnType) => {\n if (this.hasMaximumSizeOfDentsBeenReached(patternForGivenNumberOfDents, numberOfDents)) {\n patternForGivenNumberOfDents.push(item);\n } else {\n return false;\n }\n });\n } else {\n return false;\n }\n });\n }\n\n return patternForGivenNumberOfDents;\n }\n\n public getUniqueItems(): MaterialType[] {\n return uniqBy(this.getSortedItems(), 'id');\n }\n\n public get isSelected(): boolean {\n return this._isSelected;\n }\n\n public set isSelected(value: boolean) {\n this._isSelected = value;\n }\n\n private hasMaximumSizeOfDentsBeenReached(mapped: any[], numberOfDents: number): boolean {\n return size(mapped) < numberOfDents;\n }\n}\n\nexport type MaterialType = OverviewListYarnType | Color;\n","export enum HorizontalPositionOfCreelPositionType {\n COLOR,\n GROUP,\n YARN_TYPE\n}\n","import {HorizontalPositionOfCreelPositionType} from '@domain/textile-data/creel/horizontal-position-of-creel-position-type.enum';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\n\nexport abstract class HorizontalPositionOfCreelPosition {\n private readonly _type: HorizontalPositionOfCreelPositionType;\n private _amount: number;\n private _isSelected: boolean;\n private _id: string;\n\n protected constructor(type: HorizontalPositionOfCreelPositionType, amount: number, isSelected: boolean = false) {\n this._type = type;\n this._amount = amount;\n this._isSelected = isSelected;\n }\n\n public get type(): HorizontalPositionOfCreelPositionType {\n return this._type;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public set amount(value: number) {\n this._amount = value;\n }\n\n public get isSelected(): boolean {\n return this._isSelected;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public set id(value: string) {\n this._id = value;\n }\n\n public set isSelected(value: boolean) {\n this._isSelected = value;\n }\n\n public isColor(): boolean {\n return isEqual(this.type, HorizontalPositionOfCreelPositionType.COLOR);\n }\n\n public isGroup(): boolean {\n return isEqual(this.type, HorizontalPositionOfCreelPositionType.GROUP);\n }\n\n public isYarnType(): boolean {\n return isEqual(this.type, HorizontalPositionOfCreelPositionType.YARN_TYPE);\n }\n\n public abstract getAmountOfDentsInHorizontalPositionOfCreelPosition(): number;\n\n public abstract getPatternForHorizontalPositionOfCreelPosition(): Color[] | OverviewListYarnType[];\n}\n","import {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {ColoredYarnSetPosition} from './colored-yarn-set-position';\nimport {CreelMap} from './creel-map';\nimport {OverviewListCreelPosition} from './overview-list-creel-position';\n\nexport class OverviewListColoredYarnSetWithStartDent {\n private _coloredYarnSet: OverviewListColoredYarnSet;\n private _startDent: number;\n private _technicalWidthInDents: number;\n private _position: ColoredYarnSetPosition;\n\n public constructor(coloredYarnSet: OverviewListColoredYarnSet, startDent: number, technicalWidthInDents: number) {\n this._coloredYarnSet = coloredYarnSet;\n this._startDent = startDent;\n this._technicalWidthInDents = technicalWidthInDents;\n }\n\n public get coloredYarnSet(): OverviewListColoredYarnSet {\n return this._coloredYarnSet;\n }\n\n public set coloredYarnSet(value: OverviewListColoredYarnSet) {\n this._coloredYarnSet = value;\n }\n\n public get startDent(): number {\n return this._startDent;\n }\n\n public set startDent(value: number) {\n this._startDent = value;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public set technicalWidthInDents(value: number) {\n this._technicalWidthInDents = value;\n }\n\n public get position(): ColoredYarnSetPosition {\n return this._position;\n }\n\n public set position(position: ColoredYarnSetPosition) {\n this._position = position;\n }\n\n public static fromJSON(coloredYarnSetWithStartDentJSON: any): OverviewListColoredYarnSetWithStartDent {\n const coloredYarnSet = new OverviewListColoredYarnSetWithStartDent(\n OverviewListColoredYarnSet.fromJSON(coloredYarnSetWithStartDentJSON.coloredYarnSet),\n coloredYarnSetWithStartDentJSON.startDent,\n coloredYarnSetWithStartDentJSON.technicalWidthInDents\n );\n\n if (!AssertionUtils.isNullOrUndefined(coloredYarnSetWithStartDentJSON.bottomTop)) {\n coloredYarnSet.position = ColoredYarnSetPosition[`${coloredYarnSetWithStartDentJSON.bottomTop}`];\n }\n\n return coloredYarnSet;\n }\n\n public toJSON(): JSON {\n return {\n startDent: this._startDent,\n technicalWidthInDents: this._technicalWidthInDents,\n coloredYarnSet: {\n id: this._coloredYarnSet.id,\n name: this._coloredYarnSet.name,\n colorSet: this._coloredYarnSet.overviewListColorSet.toJSON(),\n yarnSet: this._coloredYarnSet.overviewListYarnSet.toJSON()\n },\n bottomTop: AssertionUtils.isNullOrUndefined(this.position) ? ColoredYarnSetPosition.BOTTOM : this.position\n } as any as JSON;\n }\n\n public isBottomPosition(): boolean {\n return this._position === ColoredYarnSetPosition.BOTTOM;\n }\n\n public isEqual(other: OverviewListColoredYarnSetWithStartDent): boolean {\n return this.coloredYarnSet.id === other.coloredYarnSet.id && this._position === other.position;\n }\n\n public getOriginalMappingForCurrentPositionOnMachine(): CreelMap {\n return {\n coloredYarnSetId: this.coloredYarnSet.id,\n creelPositions: this.coloredYarnSet.overviewListColorSet.creelPositions.map((creelPosition: OverviewListCreelPosition) => ({\n creelPosition: creelPosition.position,\n currentPositionOnMachine: creelPosition.position\n }))\n };\n }\n}\n","import {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {first, join, map, size, uniqBy} from 'lodash-es';\n\nexport class OverviewListCreelPosition {\n private _items: MaterialTypeOverviewList[];\n private _position: number;\n private _percentageOfColorsInDrawingImage: number;\n private _needsToBeFromSameBath: boolean;\n\n public constructor(items: MaterialTypeOverviewList[], position?: number, percentageOfColorsInDrawingImage?: number, needsToBeFromSameBath: boolean = false) {\n this._items = items;\n this._position = position;\n this._percentageOfColorsInDrawingImage = percentageOfColorsInDrawingImage;\n this._needsToBeFromSameBath = needsToBeFromSameBath;\n }\n\n public get items(): MaterialTypeOverviewList[] {\n return this._items;\n }\n\n public get position(): number {\n return this._position;\n }\n\n public get percentageOfColorsInDrawingImage(): number {\n return this._percentageOfColorsInDrawingImage;\n }\n\n public get needsToBeFromSameBath(): boolean {\n return this._needsToBeFromSameBath;\n }\n\n public set needsToBeFromSameBath(needsToBeFromSameBath: boolean) {\n this._needsToBeFromSameBath = needsToBeFromSameBath;\n }\n\n public static fromCreelPosition(creelPosition: CreelPosition, position: number): OverviewListCreelPosition {\n return new OverviewListCreelPosition(creelPosition.getUniqueItems(), position);\n }\n\n public getUniqueItems(): MaterialTypeOverviewList[] {\n return uniqBy(this._items, 'id');\n }\n\n public hasMultipleItems(): boolean {\n return size(this.getUniqueItems()) > 1;\n }\n\n public getItemNames(): string {\n return join(\n map(this.items, (materialType: MaterialTypeOverviewList) => materialType.name),\n ', '\n );\n }\n\n public getFirstItem(): Color {\n return first(this.items as Color[]);\n }\n}\n\nexport type MaterialTypeOverviewList = OverviewListYarnType | Color;\n","import {BackcoatingInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing/backcoating-information';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\n\nexport abstract class AbstractFinishing {\n private _id: number | string;\n private _name: string;\n private _finishingType: FinishingType;\n private _backcoatingInformation: BackcoatingInformation;\n private _used: boolean;\n\n public constructor(id: number | string, name: string, finishingType: FinishingType, backcoatingInformation: BackcoatingInformation, used: boolean) {\n this._id = id;\n this._name = name;\n this._finishingType = finishingType;\n this._backcoatingInformation = backcoatingInformation;\n this._used = used;\n }\n\n public get id(): number | string {\n return this._id;\n }\n\n public set id(value: number | string) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get finishingType(): FinishingType {\n return this._finishingType;\n }\n\n public get backcoatingInformation(): BackcoatingInformation {\n return this._backcoatingInformation;\n }\n\n public get used(): boolean {\n return this._used;\n }\n}\n","import {isNil} from 'lodash-es';\nimport {CuttingLinePatternType} from './cutting-line-pattern-type.enum';\n\nexport class CuttingLineProperties {\n private _patternType: CuttingLinePatternType;\n\n public constructor(patternType?: CuttingLinePatternType) {\n this._patternType = patternType;\n }\n\n public get patternType(): CuttingLinePatternType {\n return this._patternType;\n }\n\n public static fromJSON(cuttingLinePropertiesJSON: any): CuttingLineProperties {\n return isNil(cuttingLinePropertiesJSON) ? null : new CuttingLineProperties(cuttingLinePropertiesJSON.patternType);\n }\n\n public toJSON(): JSON {\n return {patternType: this._patternType} as any as JSON;\n }\n}\n","import {isNil} from 'lodash-es';\n\nexport class FinishingTemplateCutbarProperties {\n private _commercialLengthInMM: number;\n\n public constructor(commercialLengthInMM: number) {\n this._commercialLengthInMM = commercialLengthInMM;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public static fromJSON(cutbarPropertiesJSON: any): FinishingTemplateCutbarProperties {\n return isNil(cutbarPropertiesJSON) ? null : new FinishingTemplateCutbarProperties(cutbarPropertiesJSON.commercialLengthInMM);\n }\n\n public toJSON(): JSON {\n return {commercialLengthInMM: this._commercialLengthInMM} as any as JSON;\n }\n}\n","import {CuttingLineProperties} from '@domain/textile-data/finishing-and-finishing-template/cutting-line-properties';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {FoldingCorrectionProperties} from '../folding-correction-properties';\nimport {FinishingTemplateCutbarProperties} from './finishing-template-cutbar-properties';\n\nexport class FinishingTemplateCutbarsInformation {\n private _cutbarBeforeProperties: FinishingTemplateCutbarProperties;\n private _cutbarAfterProperties: FinishingTemplateCutbarProperties;\n private _cuttingLineProperties: CuttingLineProperties;\n private _foldingCorrectionProperties: FoldingCorrectionProperties;\n\n public constructor(\n cutbarBeforeProperties: FinishingTemplateCutbarProperties,\n cutbarAfterProperties: FinishingTemplateCutbarProperties,\n cuttingLineProperties: CuttingLineProperties,\n foldingCorrectionProperties: FoldingCorrectionProperties\n ) {\n this._cutbarBeforeProperties = cutbarBeforeProperties;\n this._cutbarAfterProperties = cutbarAfterProperties;\n this._cuttingLineProperties = cuttingLineProperties;\n this._foldingCorrectionProperties = foldingCorrectionProperties;\n }\n\n public get cutbarBeforeProperties(): FinishingTemplateCutbarProperties {\n return this._cutbarBeforeProperties;\n }\n\n public get cutbarAfterProperties(): FinishingTemplateCutbarProperties {\n return this._cutbarAfterProperties;\n }\n\n public get cuttingLineProperties(): CuttingLineProperties {\n return this._cuttingLineProperties;\n }\n\n public get foldingCorrectionProperties(): FoldingCorrectionProperties {\n return this._foldingCorrectionProperties;\n }\n\n public static fromJSON(cutbarsInformationJSON: any): FinishingTemplateCutbarsInformation {\n return isNil(cutbarsInformationJSON)\n ? null\n : new FinishingTemplateCutbarsInformation(\n FinishingTemplateCutbarProperties.fromJSON(cutbarsInformationJSON.cutbarBeforeProperties),\n FinishingTemplateCutbarProperties.fromJSON(cutbarsInformationJSON.cutbarAfterProperties),\n CuttingLineProperties.fromJSON(cutbarsInformationJSON.cuttingLineProperties),\n FoldingCorrectionProperties.fromJSON(cutbarsInformationJSON.foldingCorrectionProperties)\n );\n }\n\n public hasAddedCutbarBefore(): boolean {\n return !isNil(this.cutbarBeforeProperties);\n }\n\n public getLengthOfCutbarBeforeInMillimeters(): number {\n return this.hasAddedCutbarBefore() ? this.cutbarBeforeProperties.commercialLengthInMM : 0;\n }\n\n public hasAddedCutbarAfter(): boolean {\n return !isNil(this.cutbarAfterProperties);\n }\n\n public getLengthOfCutbarAfterInMillimeters(): number {\n return this.hasAddedCutbarAfter() ? this.cutbarAfterProperties.commercialLengthInMM : 0;\n }\n\n public hasAddedCuttingLine(): boolean {\n return !isNil(this.cuttingLineProperties);\n }\n\n public toJSON(): JSON {\n return {\n cutbarBeforeProperties: this._cutbarBeforeProperties.toJSON(),\n cutbarAfterProperties: this._cutbarAfterProperties.toJSON(),\n cuttingLineProperties: this.hasAddedCuttingLine() ? this._cuttingLineProperties.toJSON() : null,\n foldingCorrectionProperties: this.hasAddedFoldingCorrection() ? this._foldingCorrectionProperties.toJSON() : null\n } as any as JSON;\n }\n\n private hasAddedFoldingCorrection(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.foldingCorrectionProperties);\n }\n}\n","import {FinishingTemplateLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label';\nimport {FinishingTemplatePositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-position-in-carpet';\nimport {LabelPositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing/label-position-in-carpet.enum';\nimport {LabelPositionInLabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-position-in-label-place.enum';\nimport {ImageForFinishingImageLabel} from '../image-for-finishing-image-label';\nimport {LabelPlace} from '../label-place.enum';\n\nexport class FinishingTemplateImageLabel extends FinishingTemplateLabel {\n protected _label: string;\n private _image: ImageForFinishingImageLabel;\n\n public constructor(\n id: number,\n place: LabelPlace,\n image: ImageForFinishingImageLabel,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingTemplatePositionInCarpet,\n positionInBottomCarpet: FinishingTemplatePositionInCarpet\n ) {\n super(id, place, rotation, mirrored, positionInTopCarpet, positionInBottomCarpet);\n\n this._image = image;\n this._label = JSON.stringify(this.getLabel());\n }\n\n public get image(): ImageForFinishingImageLabel {\n return this._image;\n }\n\n public static fromJSON(finishingTemplateImageLabelJSON: any): FinishingTemplateImageLabel {\n return new FinishingTemplateImageLabel(\n finishingTemplateImageLabelJSON.id,\n finishingTemplateImageLabelJSON.place as LabelPlace,\n ImageForFinishingImageLabel.fromJSON(finishingTemplateImageLabelJSON.image),\n finishingTemplateImageLabelJSON.rotation,\n finishingTemplateImageLabelJSON.mirrored,\n new FinishingTemplatePositionInCarpet(\n finishingTemplateImageLabelJSON.topCarpet.positioningInCarpet as LabelPositionInCarpet,\n finishingTemplateImageLabelJSON.topCarpet.positioningInLabelPlace as LabelPositionInLabelPlace,\n finishingTemplateImageLabelJSON.topCarpet.commercialHorizontalOffsetInMM,\n finishingTemplateImageLabelJSON.topCarpet.commercialVerticalOffsetInMM\n ),\n new FinishingTemplatePositionInCarpet(\n finishingTemplateImageLabelJSON.bottomCarpet.positioningInCarpet as LabelPositionInCarpet,\n finishingTemplateImageLabelJSON.bottomCarpet.positioningInLabelPlace as LabelPositionInLabelPlace,\n finishingTemplateImageLabelJSON.bottomCarpet.commercialHorizontalOffsetInMM,\n finishingTemplateImageLabelJSON.bottomCarpet.commercialVerticalOffsetInMM\n )\n );\n }\n\n public toJSON(): JSON {\n return this.getLabel() as any as JSON;\n }\n\n private getLabel(): object {\n return {\n finishingLabelType: 'IMAGE',\n place: this.place,\n imageId: this.image.id,\n rotation: this.rotation,\n mirrored: this.mirrored,\n topCarpet: this.positionInTopCarpet.toJSON(),\n bottomCarpet: this.positionInBottomCarpet.toJSON()\n };\n }\n}\n","import {Rectangle} from '@domain/rectangle';\nimport {FinishingTemplatePositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-position-in-carpet';\nimport {LabelPositionInLabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-position-in-label-place.enum';\nimport {CarpetView} from '@presentation/components/finishing-and-finishing-template/carpet-view.enum';\nimport {Point} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {LabelPlace} from '../label-place.enum';\n\nexport abstract class FinishingTemplateLabel {\n protected abstract _label: string;\n\n private _id: number;\n private _place: LabelPlace;\n private _rotation: number;\n private _mirrored: boolean;\n private _positionInTopCarpet: FinishingTemplatePositionInCarpet;\n private _positionInBottomCarpet: FinishingTemplatePositionInCarpet;\n\n public constructor(\n id: number,\n place: LabelPlace,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingTemplatePositionInCarpet,\n positionInBottomCarpet: FinishingTemplatePositionInCarpet\n ) {\n this._id = id;\n this._place = place;\n this._rotation = rotation;\n this._mirrored = mirrored;\n this._positionInTopCarpet = positionInTopCarpet;\n this._positionInBottomCarpet = positionInBottomCarpet;\n }\n\n public get label(): string {\n return this._label;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get place(): LabelPlace {\n return this._place;\n }\n\n public get rotation(): number {\n return this._rotation;\n }\n\n public set rotation(value: number) {\n this._rotation = value;\n }\n\n public get mirrored(): boolean {\n return this._mirrored;\n }\n\n public get positionInTopCarpet(): FinishingTemplatePositionInCarpet {\n return this._positionInTopCarpet;\n }\n\n public get positionInBottomCarpet(): FinishingTemplatePositionInCarpet {\n return this._positionInBottomCarpet;\n }\n\n public getOriginPointFromBoundingBox(rectangleForBoundingBox: Rectangle, carpetView: CarpetView): Point {\n let result: Point;\n\n const positioningInLabelPlace: LabelPositionInLabelPlace = isEqual(carpetView, CarpetView.TOP_CARPET)\n ? this._positionInTopCarpet.positioningInLabelPlace\n : this._positionInBottomCarpet.positioningInLabelPlace;\n\n switch (positioningInLabelPlace) {\n case LabelPositionInLabelPlace.TOP_LEFT:\n result = rectangleForBoundingBox.topLeftPoint;\n break;\n case LabelPositionInLabelPlace.TOP_MIDDLE:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx / 2,\n y: rectangleForBoundingBox.topLeftPoint.y\n };\n break;\n case LabelPositionInLabelPlace.TOP_RIGHT:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx,\n y: rectangleForBoundingBox.topLeftPoint.y\n };\n break;\n case LabelPositionInLabelPlace.CENTER_LEFT:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx / 2\n };\n break;\n case LabelPositionInLabelPlace.CENTER:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx / 2,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx / 2\n };\n break;\n case LabelPositionInLabelPlace.CENTER_RIGHT:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx / 2\n };\n break;\n case LabelPositionInLabelPlace.BOTTOM_LEFT:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx\n };\n break;\n case LabelPositionInLabelPlace.BOTTOM_MIDDLE:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx / 2,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx\n };\n break;\n case LabelPositionInLabelPlace.BOTTOM_RIGHT:\n result = {\n x: rectangleForBoundingBox.topLeftPoint.x + rectangleForBoundingBox.dimensionsInPx.widthInPx,\n y: rectangleForBoundingBox.topLeftPoint.y + rectangleForBoundingBox.dimensionsInPx.heightInPx\n };\n break;\n }\n\n return result;\n }\n\n public isTopCarpetSameAsBottomCarpet(): boolean {\n return (\n isEqual(this.positionInTopCarpet.commercialHorizontalOffsetInMM, this.positionInBottomCarpet.commercialHorizontalOffsetInMM) &&\n isEqual(this.positionInTopCarpet.commercialVerticalOffsetInMM, this.positionInBottomCarpet.commercialVerticalOffsetInMM) &&\n isEqual(this.positionInTopCarpet.positioningInCarpet, this.positionInBottomCarpet.positioningInCarpet)\n );\n }\n\n public abstract toJSON(): JSON;\n}\n","import {LabelPositionInCarpet} from '../finishing/label-position-in-carpet.enum';\nimport {LabelPositionInLabelPlace} from '../label-position-in-label-place.enum';\n\nexport class FinishingTemplatePositionInCarpet {\n private _positioningInCarpet: LabelPositionInCarpet;\n private _positioningInLabelPlace: LabelPositionInLabelPlace;\n private _commercialHorizontalOffsetInMM: number;\n private _commercialVerticalOffsetInMM: number;\n\n public constructor(positioningInCarpet: LabelPositionInCarpet, positioningInLabelPlace: LabelPositionInLabelPlace, commercialHorizontalOffsetInMM: number, commercialVerticalOffsetInMm: number) {\n this._positioningInCarpet = positioningInCarpet;\n this._positioningInLabelPlace = positioningInLabelPlace;\n this._commercialHorizontalOffsetInMM = commercialHorizontalOffsetInMM;\n this._commercialVerticalOffsetInMM = commercialVerticalOffsetInMm;\n }\n\n public get positioningInCarpet(): LabelPositionInCarpet {\n return this._positioningInCarpet;\n }\n\n public get positioningInLabelPlace(): LabelPositionInLabelPlace {\n return this._positioningInLabelPlace;\n }\n\n public get commercialHorizontalOffsetInMM(): number {\n return this._commercialHorizontalOffsetInMM;\n }\n\n public get commercialVerticalOffsetInMM(): number {\n return this._commercialVerticalOffsetInMM;\n }\n\n public static fromJSON(finishingPositionInCarpetJSON: any): FinishingTemplatePositionInCarpet {\n return new FinishingTemplatePositionInCarpet(\n finishingPositionInCarpetJSON.positioningInCarpet as LabelPositionInCarpet,\n finishingPositionInCarpetJSON.positioningInLabelPlace as LabelPositionInLabelPlace,\n finishingPositionInCarpetJSON.commercialHorizontalOffsetInMM,\n finishingPositionInCarpetJSON.commercialVerticalOffsetInMM\n );\n }\n\n public toJSON(): JSON {\n return {\n positioningInCarpet: this.positioningInCarpet,\n positioningInLabelPlace: this.positioningInLabelPlace,\n commercialHorizontalOffsetInMM: this.commercialHorizontalOffsetInMM,\n commercialVerticalOffsetInMM: this.commercialVerticalOffsetInMM\n } as any as JSON;\n }\n}\n","import {FinishingTemplateLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label';\nimport {FinishingTemplatePositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-position-in-carpet';\nimport {FontSettings} from '@domain/textile-data/finishing-and-finishing-template/finishing/font-settings';\nimport {PlaceholderComponent} from '@domain/textile-data/finishing-and-finishing-template/placeholder-component';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {has, isNil, map} from 'lodash-es';\nimport {LabelPlace} from '../label-place.enum';\n\nexport class FinishingTemplateTextLabel extends FinishingTemplateLabel {\n protected _label: string;\n private _commercialLabelHeightInMM: number;\n private _text: string;\n private _placeholderParts: PlaceholderComponent[];\n private _fontSettings: FontSettings;\n private _qrCode: boolean;\n\n public constructor(\n id: number,\n place: LabelPlace,\n text: string,\n placeholderParts: PlaceholderComponent[],\n fontSettings: FontSettings,\n labelHeightInMM: number,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingTemplatePositionInCarpet,\n positionInBottomCarpet: FinishingTemplatePositionInCarpet,\n qrCode: boolean = null\n ) {\n super(id, place, rotation, mirrored, positionInTopCarpet, positionInBottomCarpet);\n\n this._commercialLabelHeightInMM = labelHeightInMM;\n this._text = text;\n this._placeholderParts = placeholderParts;\n this._fontSettings = fontSettings;\n this._qrCode = qrCode;\n this._label = JSON.stringify(this.getLabel());\n }\n\n public get commercialLabelHeightInMM(): number {\n return this._commercialLabelHeightInMM;\n }\n\n public get text(): string {\n return this._text;\n }\n\n public get placeholderParts(): PlaceholderComponent[] {\n return this._placeholderParts;\n }\n\n public get fontSettings(): FontSettings {\n return this._fontSettings;\n }\n\n public get qrCode(): boolean {\n return this._qrCode;\n }\n\n public static fromJSON(finishingTemplateTextLabelJSON: any): FinishingTemplateTextLabel {\n return new FinishingTemplateTextLabel(\n finishingTemplateTextLabelJSON.id,\n finishingTemplateTextLabelJSON.place as LabelPlace,\n !isNil(finishingTemplateTextLabelJSON.text) ? finishingTemplateTextLabelJSON.text : null,\n !isNil(finishingTemplateTextLabelJSON.placeholderParts)\n ? map(finishingTemplateTextLabelJSON.placeholderParts, (placeholderPartJSON: any) => {\n return new PlaceholderComponent(has(placeholderPartJSON, 'id') ? placeholderPartJSON.id : null, placeholderPartJSON.name, placeholderPartJSON.maxLength);\n })\n : null,\n new FontSettings(finishingTemplateTextLabelJSON.fontFamily, finishingTemplateTextLabelJSON.fontWeight, finishingTemplateTextLabelJSON.fontStyle),\n finishingTemplateTextLabelJSON.commercialLabelHeightInMM,\n finishingTemplateTextLabelJSON.rotation,\n finishingTemplateTextLabelJSON.mirrored,\n FinishingTemplatePositionInCarpet.fromJSON(finishingTemplateTextLabelJSON.topCarpet),\n FinishingTemplatePositionInCarpet.fromJSON(finishingTemplateTextLabelJSON.bottomCarpet),\n !isNil(finishingTemplateTextLabelJSON.qrCode) ? finishingTemplateTextLabelJSON.qrCode : false\n );\n }\n\n public isPlaceholder(): boolean {\n return !isNil(this.placeholderParts);\n }\n\n public toJSON(): JSON {\n const result = this.getLabel();\n\n if (!AssertionUtils.isNullOrUndefined(this.id)) {\n result['id'] = this.id;\n }\n\n return result as any as JSON;\n }\n\n private getLabel(): object {\n const result = {\n finishingLabelType: 'TEXT',\n place: this.place,\n rotation: this.rotation,\n mirrored: this.mirrored,\n commercialLabelHeightInMM: this.commercialLabelHeightInMM,\n fontFamily: this.fontSettings.fontFamily,\n fontWeight: this.fontSettings.fontWeight,\n fontStyle: this.fontSettings.fontStyle,\n topCarpet: this.positionInTopCarpet.toJSON(),\n bottomCarpet: this.positionInBottomCarpet.toJSON(),\n qrCode: this.qrCode\n };\n\n if (this.isPlaceholder()) {\n result['placeholderParts'] = this.placeholderParts.map((placeholderPart: PlaceholderComponent) => placeholderPart.toJSON());\n } else {\n result['text'] = this.text;\n }\n\n return result;\n }\n}\n","import {AbstractFinishing} from '@domain/textile-data/finishing-and-finishing-template/abstract-finishing';\nimport {FinishingTemplateCutbarsInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-cutbars-information';\nimport {FinishingTemplateImageLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-image-label';\nimport {FinishingTemplateLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label';\nimport {FinishingTemplateTextLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-text-label';\nimport {BackcoatingInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing/backcoating-information';\nimport {FinishingLabelType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label-type.enum';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {isEmpty, isEqual, isNil, map} from 'lodash-es';\n\nexport class FinishingTemplate extends AbstractFinishing {\n private readonly _cutbarsInformation: FinishingTemplateCutbarsInformation;\n private readonly _labels: FinishingTemplateLabel[];\n\n public constructor(\n id: number,\n name: string,\n finishingType: FinishingType,\n cutbarsInformation: FinishingTemplateCutbarsInformation,\n labels: FinishingTemplateLabel[],\n backcoatingInformation: BackcoatingInformation,\n used: boolean\n ) {\n super(id, name, finishingType, backcoatingInformation, used);\n\n this._labels = labels;\n this._cutbarsInformation = cutbarsInformation;\n }\n\n public get cutbarsInformation(): FinishingTemplateCutbarsInformation {\n return this._cutbarsInformation;\n }\n\n public get labels(): FinishingTemplateLabel[] {\n return this._labels;\n }\n\n public static createEmptyFinishingTemplate(): FinishingTemplate {\n return new FinishingTemplate(null, null, null, null, [], null, null);\n }\n\n public static fromJSON(finishingTemplateJSON: any): FinishingTemplate {\n return new FinishingTemplate(\n finishingTemplateJSON.id,\n finishingTemplateJSON.name,\n finishingTemplateJSON.finishingType as FinishingType,\n FinishingTemplateCutbarsInformation.fromJSON(finishingTemplateJSON.cutbarsInformation),\n map(finishingTemplateJSON.labels, (finishingTemplateLabelJSON: any) => {\n return isEqual(finishingTemplateLabelJSON.finishingLabelType, FinishingLabelType.TEXT)\n ? FinishingTemplateTextLabel.fromJSON(finishingTemplateLabelJSON)\n : FinishingTemplateImageLabel.fromJSON(finishingTemplateLabelJSON);\n }),\n new BackcoatingInformation(finishingTemplateJSON.backcoatingInformation.useBackcoating),\n finishingTemplateJSON.used\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n finishingType: this.finishingType,\n cutbarsInformation: this.cutbarsInformation.toJSON(),\n labels: map(this.labels, (label: FinishingTemplateLabel) => {\n return label.toJSON();\n }),\n backcoatingInformation: {\n useBackcoating: this.backcoatingInformation.useBackcoating\n }\n } as any as JSON;\n }\n\n public hasAddedCutbarsInformation(): boolean {\n return !isNil(this._cutbarsInformation);\n }\n\n public hasAddedCutbarBefore(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCutbarBefore();\n }\n\n public hasAddedCutbarAfter(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCutbarAfter();\n }\n\n public hasAddedCuttingLine(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCuttingLine();\n }\n\n public hasAddedLabels(): boolean {\n return !isEmpty(this.labels);\n }\n}\n","export class BackcoatingInformation {\n private _useBackcoating: boolean;\n private _weight: number;\n\n public constructor(useBackcoating: boolean, weight?: number) {\n this._useBackcoating = useBackcoating;\n this._weight = weight;\n }\n\n public get useBackcoating(): boolean {\n return this._useBackcoating;\n }\n\n public get weight(): number {\n return this._weight;\n }\n\n public static fromJSON(backcoatingInformationJSON: any): BackcoatingInformation {\n return new BackcoatingInformation(backcoatingInformationJSON.useBackcoating, backcoatingInformationJSON.useBackcoating ? backcoatingInformationJSON.weightInGramsPerSquareMeter : null);\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class CutbarPattern extends Pattern {\n public constructor(\n id: number,\n name: string,\n visualisations: PatternVisualisation[],\n type?: string,\n comment?: string,\n heightInPixels?: number,\n widthInPixels?: number,\n sizeInBytes?: number,\n dateCreated?: Date,\n xSizeInDents?: number,\n xSizeInFrames?: number,\n ySizeInColorlines?: number,\n ySizeInPicks?: number,\n weavingChores?: number[]\n ) {\n super(id, name, visualisations, type, comment, heightInPixels, widthInPixels, sizeInBytes, dateCreated, xSizeInDents, xSizeInFrames, ySizeInColorlines, ySizeInPicks, weavingChores);\n }\n\n public static fromJSON(cutbarPatternJSON: any): CutbarPattern {\n if (AssertionUtils.isNullOrUndefined(cutbarPatternJSON)) {\n return null;\n }\n\n if (cutbarPatternJSON.weavePatternType === undefined) {\n cutbarPatternJSON.weavePatternType = 'BACKGROUND_IMAGE';\n }\n\n const pattern = super.fromJSON(cutbarPatternJSON) as CutbarPattern;\n\n return new CutbarPattern(\n pattern.id,\n pattern.name,\n pattern.visualisations,\n pattern.type,\n pattern.comment,\n pattern.heightInPixels,\n pattern.widthInPixels,\n pattern.sizeInBytes,\n pattern.dateCreated,\n pattern.xSizeInDents,\n pattern.xSizeInFrames,\n pattern.ySizeInColorlines,\n pattern.ySizeInPicks,\n pattern.weavingChores\n );\n }\n}\n","import {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {CutbarPattern} from '@domain/textile-data/finishing-and-finishing-template/finishing/cutbar-pattern';\nimport {isNil} from 'lodash-es';\n\nexport class FinishingCutbarProperties {\n private _commercialLengthInMM: number;\n private _technicalLengthInPicks: number;\n private _patternTemplate: CutbarPattern;\n\n public constructor(commercialLengthInMM: number, technicalLengthInPicks: number, patternTemplate: CutbarPattern) {\n this._commercialLengthInMM = commercialLengthInMM;\n this._technicalLengthInPicks = technicalLengthInPicks;\n this._patternTemplate = patternTemplate;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public get technicalLengthInPicks(): number {\n return this._technicalLengthInPicks;\n }\n\n public get patternTemplate(): CutbarPattern {\n return this._patternTemplate;\n }\n\n public static fromJSON(cutbarPropertiesJSON: any): FinishingCutbarProperties {\n return isNil(cutbarPropertiesJSON)\n ? null\n : new FinishingCutbarProperties(cutbarPropertiesJSON.commercialLengthInMM, cutbarPropertiesJSON.technicalLengthInPicks, CutbarPattern.fromJSON(cutbarPropertiesJSON.patternTemplate));\n }\n\n public toJSON(): JSON {\n return {\n commercialLengthInMM: this._commercialLengthInMM,\n technicalLengthInPicks: this._technicalLengthInPicks,\n patternTemplateId: this._patternTemplate?.visualisations[0]?.isWeavePatternVisualisation() ? this._patternTemplate.id : null,\n backgroundImageId: this._patternTemplate?.visualisations[0]?.type === PatternVisualisationType.DRAWING ? this._patternTemplate.id : null\n } as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {CuttingLineProperties} from '@domain/textile-data/finishing-and-finishing-template/cutting-line-properties';\nimport {FinishingCutbarProperties} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-cutbar-properties';\nimport {isNil} from 'lodash-es';\n\nexport class FinishingCutbarsInformation {\n private _cutbarBeforeProperties: FinishingCutbarProperties;\n private _cutbarAfterProperties: FinishingCutbarProperties;\n private _cuttingLineProperties: CuttingLineProperties;\n private _foldingType: Pattern;\n\n public constructor(cutbarBeforeProperties: FinishingCutbarProperties, cutbarAfterProperties: FinishingCutbarProperties, cuttingLineProperties: CuttingLineProperties, foldingType: Pattern) {\n this._cutbarBeforeProperties = cutbarBeforeProperties;\n this._cutbarAfterProperties = cutbarAfterProperties;\n this._cuttingLineProperties = cuttingLineProperties;\n this._foldingType = foldingType;\n }\n\n public get cutbarBeforeProperties(): FinishingCutbarProperties {\n return this._cutbarBeforeProperties;\n }\n\n public get cutbarAfterProperties(): FinishingCutbarProperties {\n return this._cutbarAfterProperties;\n }\n\n public get cuttingLineProperties(): CuttingLineProperties {\n return this._cuttingLineProperties;\n }\n\n public get foldingType(): Pattern {\n return this._foldingType;\n }\n\n public static fromJSON(cutbarsInformationJSON: any): FinishingCutbarsInformation {\n return isNil(cutbarsInformationJSON)\n ? null\n : new FinishingCutbarsInformation(\n FinishingCutbarProperties.fromJSON(cutbarsInformationJSON.cutbarBeforeProperties),\n FinishingCutbarProperties.fromJSON(cutbarsInformationJSON.cutbarAfterProperties),\n CuttingLineProperties.fromJSON(cutbarsInformationJSON.cuttingLineProperties),\n Pattern.fromFoldingTypeJSON(cutbarsInformationJSON.foldingType)\n );\n }\n\n public hasAddedCutbarBefore(): boolean {\n return !isNil(this.cutbarBeforeProperties);\n }\n\n public getLengthOfCutbarBeforeInMillimeters(): number {\n return this.hasAddedCutbarBefore() ? this.cutbarBeforeProperties.commercialLengthInMM : 0;\n }\n\n public getLengthOfCutbarBeforeInNumberOfPicks(): number {\n return this.hasAddedCutbarBefore() ? this.cutbarBeforeProperties.technicalLengthInPicks : 0;\n }\n\n public hasAddedCutbarAfter(): boolean {\n return !isNil(this.cutbarAfterProperties);\n }\n\n public getLengthOfCutbarAfterInMillimeters(): number {\n return this.hasAddedCutbarAfter() ? this.cutbarAfterProperties.commercialLengthInMM : 0;\n }\n\n public getLengthOfCutbarAfterInNumberOfPicks(): number {\n return this.hasAddedCutbarAfter() ? this.cutbarAfterProperties.technicalLengthInPicks : 0;\n }\n\n public hasAddedCuttingLine(): boolean {\n return !isNil(this.cuttingLineProperties);\n }\n\n public hasAdjustedFoldingType(): boolean {\n return !isNil(this.foldingType);\n }\n\n public toJSON(): JSON {\n let result = null;\n\n if (this.hasAddedCutbarBefore() || this.hasAddedCutbarAfter() || this.hasAddedCuttingLine() || this.hasAdjustedFoldingType()) {\n result = {\n cutbarBeforeProperties: this.hasAddedCutbarBefore() ? this._cutbarBeforeProperties.toJSON() : null,\n cutbarAfterProperties: this.hasAddedCutbarAfter() ? this._cutbarAfterProperties.toJSON() : null,\n cuttingLineProperties: this.hasAddedCuttingLine() ? this._cuttingLineProperties.toJSON() : null,\n foldingTypeId: this.hasAdjustedFoldingType() ? this._foldingType.id : null\n } as any as JSON;\n }\n\n return result;\n }\n}\n","import {FinishingLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label';\nimport {FinishingPositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-position-in-carpet';\nimport {ImageForFinishingImageLabel} from '@domain/textile-data/finishing-and-finishing-template/image-for-finishing-image-label';\nimport {LabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-place.enum';\nimport {FinishingLabelType} from './finishing-label-type.enum';\n\nexport class FinishingImageLabel extends FinishingLabel {\n protected _label: string;\n private _image: ImageForFinishingImageLabel;\n\n public constructor(\n id: number,\n place: LabelPlace,\n image: ImageForFinishingImageLabel,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingPositionInCarpet,\n positionInBottomCarpet: FinishingPositionInCarpet\n ) {\n super(id, place, rotation, mirrored, positionInTopCarpet, positionInBottomCarpet, FinishingLabelType.IMAGE);\n\n this._image = image;\n this._label = JSON.stringify(this.getLabel());\n }\n\n public get image(): ImageForFinishingImageLabel {\n return this._image;\n }\n\n public static fromJSON(finishingImageLabelJSON: any): FinishingImageLabel {\n return new FinishingImageLabel(\n finishingImageLabelJSON.id,\n finishingImageLabelJSON.place as LabelPlace,\n ImageForFinishingImageLabel.fromJSON(finishingImageLabelJSON.image),\n finishingImageLabelJSON.rotation,\n finishingImageLabelJSON.mirrored,\n FinishingPositionInCarpet.fromJSON(finishingImageLabelJSON.topCarpet),\n FinishingPositionInCarpet.fromJSON(finishingImageLabelJSON.bottomCarpet)\n );\n }\n\n public toJSON(): JSON {\n return {id: this.id, ...this.getLabel()} as any as JSON;\n }\n\n private getLabel(): object {\n return {\n finishingLabelType: this.finishingLabelType,\n place: this.place,\n imageId: this.image.id,\n rotation: this.rotation,\n mirrored: this.mirrored,\n topCarpet: this.positionInTopCarpet.toJSON(),\n bottomCarpet: this.positionInBottomCarpet.toJSON()\n };\n }\n}\n","export enum FinishingLabelType {\n TEXT = 'TEXT',\n IMAGE = 'IMAGE'\n}\n","import {FinishingTemplateLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label';\nimport {FinishingPositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-position-in-carpet';\nimport {LabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-place.enum';\nimport {isEqual} from 'lodash-es';\nimport {FinishingLabelType} from './finishing-label-type.enum';\n\nexport abstract class FinishingLabel extends FinishingTemplateLabel {\n private _finishingLabelType: FinishingLabelType;\n\n protected constructor(\n id: number,\n place: LabelPlace,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingPositionInCarpet,\n positionInBottomCarpet: FinishingPositionInCarpet,\n finishingLabelType: FinishingLabelType\n ) {\n super(id, place, rotation, mirrored, positionInTopCarpet, positionInBottomCarpet);\n\n this._finishingLabelType = finishingLabelType;\n }\n\n public get finishingLabelType(): FinishingLabelType {\n return this._finishingLabelType;\n }\n\n public isTopCarpetSameAsBottomCarpet(): boolean {\n return (\n isEqual(this.positionInTopCarpet.commercialHorizontalOffsetInMM, this.positionInBottomCarpet.commercialHorizontalOffsetInMM) &&\n isEqual((this.positionInTopCarpet as FinishingPositionInCarpet).technicalHorizontalOffsetInDents, (this.positionInBottomCarpet as FinishingPositionInCarpet).technicalHorizontalOffsetInDents) &&\n isEqual(this.positionInTopCarpet.commercialVerticalOffsetInMM, this.positionInBottomCarpet.commercialVerticalOffsetInMM) &&\n isEqual((this.positionInTopCarpet as FinishingPositionInCarpet).technicalVerticalOffsetInPicks, (this.positionInBottomCarpet as FinishingPositionInCarpet).technicalVerticalOffsetInPicks) &&\n isEqual(this.positionInTopCarpet.positioningInCarpet, this.positionInBottomCarpet.positioningInCarpet)\n );\n }\n}\n","import {FinishingTemplatePositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-position-in-carpet';\nimport {LabelPositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing/label-position-in-carpet.enum';\nimport {LabelPositionInLabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-position-in-label-place.enum';\n\nexport class FinishingPositionInCarpet extends FinishingTemplatePositionInCarpet {\n private _technicalHorizontalOffsetInDents: number;\n private _technicalVerticalOffsetInPicks: number;\n\n public constructor(\n positioningInCarpet: LabelPositionInCarpet,\n positioning: LabelPositionInLabelPlace,\n commercialHorizontalOffsetInMM: number,\n commercialVerticalOffsetInMm: number,\n technicalHorizontalOffsetInDents: number,\n technicalVerticalOffsetInPicks: number\n ) {\n super(positioningInCarpet, positioning, commercialHorizontalOffsetInMM, commercialVerticalOffsetInMm);\n this._technicalHorizontalOffsetInDents = technicalHorizontalOffsetInDents;\n this._technicalVerticalOffsetInPicks = technicalVerticalOffsetInPicks;\n }\n\n public get technicalHorizontalOffsetInDents(): number {\n return this._technicalHorizontalOffsetInDents;\n }\n\n public get technicalVerticalOffsetInPicks(): number {\n return this._technicalVerticalOffsetInPicks;\n }\n\n public static fromJSON(finishingPositionInCarpetJSON: any): FinishingPositionInCarpet {\n return new FinishingPositionInCarpet(\n finishingPositionInCarpetJSON.positioningInCarpet as LabelPositionInCarpet,\n finishingPositionInCarpetJSON.positioningInLabelPlace as LabelPositionInLabelPlace,\n finishingPositionInCarpetJSON.commercialHorizontalOffsetInMM,\n finishingPositionInCarpetJSON.commercialVerticalOffsetInMM,\n finishingPositionInCarpetJSON.technicalHorizontalOffsetInDents,\n finishingPositionInCarpetJSON.technicalVerticalOffsetInPicks\n );\n }\n\n public toJSON(): JSON {\n return {\n positioningInCarpet: this.positioningInCarpet,\n positioningInLabelPlace: this.positioningInLabelPlace,\n commercialHorizontalOffsetInMM: this.commercialHorizontalOffsetInMM,\n technicalHorizontalOffsetInDents: this.technicalHorizontalOffsetInDents,\n commercialVerticalOffsetInMM: this.commercialVerticalOffsetInMM,\n technicalVerticalOffsetInPicks: this.technicalVerticalOffsetInPicks\n } as any as JSON;\n }\n}\n","import {FinishingLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label';\nimport {FinishingPositionInCarpet} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-position-in-carpet';\nimport {FontSettings} from '@domain/textile-data/finishing-and-finishing-template/finishing/font-settings';\nimport {LabelPlace} from '@domain/textile-data/finishing-and-finishing-template/label-place.enum';\nimport {PlaceholderComponent} from '@domain/textile-data/finishing-and-finishing-template/placeholder-component';\nimport {map} from 'lodash-es';\nimport isNil from 'lodash-es/isNil';\nimport {FinishingLabelType} from './finishing-label-type.enum';\n\nexport class FinishingTextLabel extends FinishingLabel {\n protected _label: string;\n private _commercialLabelHeightInMM: number;\n private _technicalLabelHeightInPicks: number;\n private _text: string;\n private _placeholderParts: PlaceholderComponent[];\n private _fontSettings: FontSettings;\n private _qrCode: boolean;\n\n public constructor(\n id: number,\n place: LabelPlace,\n text: string,\n placeholderParts: PlaceholderComponent[],\n fontSettings: FontSettings,\n commercialLabelHeightInMM: number,\n technicalLabelHeightInNumberOfPicks: number,\n rotation: number,\n mirrored: boolean,\n positionInTopCarpet: FinishingPositionInCarpet,\n positionInBottomCarpet: FinishingPositionInCarpet,\n qrCode: boolean = false\n ) {\n super(id, place, rotation, mirrored, positionInTopCarpet, positionInBottomCarpet, FinishingLabelType.TEXT);\n\n this._text = text;\n this._placeholderParts = placeholderParts;\n this._commercialLabelHeightInMM = commercialLabelHeightInMM;\n this._technicalLabelHeightInPicks = technicalLabelHeightInNumberOfPicks;\n this._fontSettings = fontSettings;\n this._qrCode = qrCode;\n this._label = JSON.stringify(this.getLabel());\n }\n\n public get commercialLabelHeightInMM(): number {\n return this._commercialLabelHeightInMM;\n }\n\n public get technicalLabelHeightInPicks(): number {\n return this._technicalLabelHeightInPicks;\n }\n\n public get text(): string {\n return this._text;\n }\n\n public get placeholderParts(): PlaceholderComponent[] {\n return this._placeholderParts;\n }\n\n public get fontSettings(): FontSettings {\n return this._fontSettings;\n }\n\n public get qrCode(): boolean {\n return this._qrCode;\n }\n\n public static fromJSON(finishingTextLabelJSON: any): FinishingTextLabel {\n return new FinishingTextLabel(\n finishingTextLabelJSON.id,\n finishingTextLabelJSON.place as LabelPlace,\n !isNil(finishingTextLabelJSON.text) ? finishingTextLabelJSON.text : null,\n !isNil(finishingTextLabelJSON.placeholderParts)\n ? map(finishingTextLabelJSON.placeholderParts, (placeholderPartJSON: any) => {\n return PlaceholderComponent.fromJSON(placeholderPartJSON);\n })\n : null,\n new FontSettings(finishingTextLabelJSON.fontFamily, finishingTextLabelJSON.fontWeight, finishingTextLabelJSON.fontStyle),\n finishingTextLabelJSON.commercialLabelHeightInMM,\n finishingTextLabelJSON.technicalLabelHeightInPicks,\n finishingTextLabelJSON.rotation,\n finishingTextLabelJSON.mirrored,\n FinishingPositionInCarpet.fromJSON(finishingTextLabelJSON.topCarpet),\n FinishingPositionInCarpet.fromJSON(finishingTextLabelJSON.bottomCarpet),\n !isNil(finishingTextLabelJSON.qrCode) ? finishingTextLabelJSON.qrCode : false\n );\n }\n\n public isPlaceholder(): boolean {\n return !isNil(this.placeholderParts);\n }\n\n public toJSON(): JSON {\n return {id: this.id, ...this.getLabel()} as any as JSON;\n }\n\n private getLabel(): object {\n const result = {\n finishingLabelType: this.finishingLabelType,\n place: this.place,\n rotation: this.rotation,\n mirrored: this.mirrored,\n commercialLabelHeightInMM: this.commercialLabelHeightInMM,\n technicalLabelHeightInPicks: this.technicalLabelHeightInPicks,\n fontFamily: this.fontSettings.fontFamily,\n fontWeight: this.fontSettings.fontWeight,\n fontStyle: this.fontSettings.fontStyle,\n topCarpet: this.positionInTopCarpet.toJSON(),\n bottomCarpet: this.positionInBottomCarpet.toJSON(),\n qrCode: this.qrCode\n };\n\n if (this.isPlaceholder()) {\n result['placeholderParts'] = map(this.placeholderParts, (placeholderPart: PlaceholderComponent) => {\n return placeholderPart.toJSON();\n });\n } else {\n result['text'] = this.text;\n }\n\n return result;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\n\nexport class MachineQualityForFinishing {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n private readonly _picksPerColorLine: number;\n\n public constructor(id: number, name: string, version: number, picksPerColorLine: number) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._picksPerColorLine = picksPerColorLine;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.name, this.version);\n }\n\n public get picksPerColorLine(): number {\n return this._picksPerColorLine;\n }\n\n public static fromJSON(machineQualityJSON: any): MachineQualityForFinishing {\n return new MachineQualityForFinishing(machineQualityJSON.id, machineQualityJSON.name, machineQualityJSON.version, machineQualityJSON.picksPerColorLine);\n }\n\n public static fromWeaveQuality(weaveQuality: WeaveQuality): MachineQualityForFinishing {\n return new MachineQualityForFinishing(weaveQuality.id, weaveQuality.technicalName, weaveQuality.version, weaveQuality.singleWidth.weaveStructure.picksPerColorLine);\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {AbstractFinishing} from '@domain/textile-data/finishing-and-finishing-template/abstract-finishing';\nimport {BackcoatingInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing/backcoating-information';\nimport {FinishingImageLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-image-label';\nimport {FinishingLabelType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label-type.enum';\nimport {FinishingTextLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-text-label';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {MachineQualityForFinishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/machine-quality-for-finishing';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, isNil, map} from 'lodash-es';\nimport {FinishingCutbarProperties} from './finishing-cutbar-properties';\nimport {FinishingCutbarsInformation} from './finishing-cutbars-information';\nimport {FinishingLabel} from './finishing-label';\n\nexport class Finishing extends AbstractFinishing {\n private _version: number;\n private _machineQuality: MachineQualityForFinishing;\n private _finishingTemplateId: number;\n private _cutbarsInformation: FinishingCutbarsInformation;\n private _labels: FinishingLabel[];\n private _finishingTemplateName: string;\n private _finishing: string;\n\n public constructor(\n id: number | string,\n name: string,\n version: number,\n finishingType: FinishingType,\n machineQuality: MachineQualityForFinishing,\n finishingTemplateId: number,\n cutbarsInformation: FinishingCutbarsInformation,\n labels: FinishingLabel[],\n backcoatingInformation: BackcoatingInformation,\n used: boolean,\n finishingTemplateName?: string\n ) {\n super(id, name, finishingType, backcoatingInformation, used);\n this._version = version;\n this._machineQuality = machineQuality;\n this._finishingTemplateId = finishingTemplateId;\n this._cutbarsInformation = cutbarsInformation;\n this._labels = labels;\n this._finishingTemplateName = finishingTemplateName;\n this._finishing = JSON.stringify({\n finishingType: this.finishingType,\n cutbarsInformation: this.cutbarsInformation ? this.cutbarsInformation.toJSON() : null,\n weightInGramsPerSquareMeter: this.backcoatingInformation?.weight ?? null\n });\n }\n\n public get version(): number {\n return this._version;\n }\n\n public set version(version: number) {\n this._version = version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.name, this.version);\n }\n\n public get machineQuality(): MachineQualityForFinishing {\n return this._machineQuality;\n }\n\n public set machineQuality(value: MachineQualityForFinishing) {\n this._machineQuality = value;\n }\n\n public get finishingTemplateId(): number {\n return this._finishingTemplateId;\n }\n\n public get cutbarsInformation(): FinishingCutbarsInformation {\n return this._cutbarsInformation;\n }\n\n public set cutbarsInformation(cutbarsInformation: FinishingCutbarsInformation) {\n this._cutbarsInformation = cutbarsInformation;\n }\n\n public get labels(): FinishingLabel[] {\n return this._labels;\n }\n\n public get finishingTemplateName(): string {\n return this._finishingTemplateName;\n }\n\n public static createEmptyFinishing(): Finishing {\n return new Finishing(null, null, null, null, null, null, null, [], null, null, null);\n }\n\n public static fromJSON(finishingJSON: any): Finishing {\n return new Finishing(\n finishingJSON.id,\n finishingJSON.name,\n finishingJSON.version,\n finishingJSON.finishingType,\n MachineQualityForFinishing.fromJSON(finishingJSON.machineQuality),\n finishingJSON.finishingTemplateId,\n FinishingCutbarsInformation.fromJSON(finishingJSON.cutbarsInformation),\n map(finishingJSON.labels, (finishingLabelJSON: any) => {\n return isEqual(finishingLabelJSON.finishingLabelType, FinishingLabelType.TEXT) ? FinishingTextLabel.fromJSON(finishingLabelJSON) : FinishingImageLabel.fromJSON(finishingLabelJSON);\n }),\n BackcoatingInformation.fromJSON(finishingJSON.backcoatingInformation),\n finishingJSON.used,\n finishingJSON.finishingTemplateName ?? null\n );\n }\n\n public hasAddedCutbarsInformation(): boolean {\n return !isNil(this._cutbarsInformation);\n }\n\n public hasAddedCutbarBefore(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCutbarBefore();\n }\n\n public hasAddedCutbarAfter(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCutbarAfter();\n }\n\n public hasAddedLabels(): boolean {\n return !isEmpty(this.labels);\n }\n\n public hasAddedCuttingLine(): boolean {\n return this.hasAddedCutbarsInformation() && this._cutbarsInformation.hasAddedCuttingLine();\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public toJSON(nullableCutbarProperties: boolean = true): JSON {\n if (!nullableCutbarProperties && (AssertionUtils.isNullOrUndefined(this.cutbarsInformation) || !this.cutbarsInformation.hasAddedCutbarBefore() || !this.cutbarsInformation.hasAddedCutbarAfter())) {\n const cutbarBeforeProperties = this.cutbarsInformation?.hasAddedCutbarBefore() ? this.cutbarsInformation.cutbarBeforeProperties : new FinishingCutbarProperties(null, null, null);\n const cutbarAfterProperties = this.cutbarsInformation?.hasAddedCutbarAfter() ? this.cutbarsInformation.cutbarAfterProperties : new FinishingCutbarProperties(null, null, null);\n this.cutbarsInformation = new FinishingCutbarsInformation(\n cutbarBeforeProperties,\n cutbarAfterProperties,\n this.cutbarsInformation?.cuttingLineProperties ?? null,\n this.cutbarsInformation?.foldingType ?? null\n );\n }\n\n return {\n id: typeof this.id === 'number' ? this.id : undefined,\n name: this.name,\n version: this.version ?? 1,\n finishingType: this.finishingType,\n machineQualityId: this.machineQuality?.id,\n finishingTemplateId: this.finishingTemplateId ?? 0,\n finishingTemplateName: this.finishingTemplateName,\n cutbarsInformation: isNil(this.cutbarsInformation) ? this.cutbarsInformation : this.cutbarsInformation.toJSON(),\n labels: map(this.labels, (label: FinishingLabel) => {\n return label.toJSON();\n }),\n backcoatingInformation: {\n useBackcoating: this.backcoatingInformation.useBackcoating,\n weightInGramsPerSquareMeter: this.backcoatingInformation.useBackcoating ? this.backcoatingInformation.weight : null\n },\n used: this.used\n } as any as JSON;\n }\n\n public static isEqual(finishing1: Finishing, finishing2: Finishing): boolean {\n if (finishing1._finishing !== finishing2._finishing || finishing1._labels.length !== finishing2._labels.length) {\n return false;\n }\n\n let areLabelsEqual = true;\n if (finishing1._labels.length > 0) {\n finishing1._labels.forEach((currentFinishingLabel: FinishingLabel) => {\n if (finishing2._labels.findIndex((finishingLabel: FinishingLabel) => finishingLabel.label === currentFinishingLabel.label) === -1) {\n areLabelsEqual = false;\n }\n });\n }\n\n return areLabelsEqual;\n }\n}\n","export class FontSettings {\n private _fontFamily: string;\n private _fontWeight: string;\n private _fontStyle: string;\n\n public constructor(fontFamily: string, fontWeight: string, fontStyle: string) {\n this._fontFamily = fontFamily;\n this._fontWeight = fontWeight;\n this._fontStyle = fontStyle;\n }\n\n public get fontFamily(): string {\n return this._fontFamily;\n }\n\n public get fontWeight(): string {\n return this._fontWeight;\n }\n\n public get fontStyle(): string {\n return this._fontStyle;\n }\n\n public static fromJSON(fontSettingsJSON: any): FontSettings {\n return new FontSettings(fontSettingsJSON.fontFamily, fontSettingsJSON.fontWeight, fontSettingsJSON.fontStyle);\n }\n\n public static fromPathLabelInformationJSON(pathLabelInformationJSON: any): FontSettings {\n return new FontSettings(pathLabelInformationJSON.labelFontFamily, pathLabelInformationJSON.labelFontWeight, pathLabelInformationJSON.labelFontStyle);\n }\n\n public toJSON(): JSON {\n return {\n labelFontFamily: this._fontFamily,\n labelFontWeight: this._fontWeight,\n labelFontStyle: this._fontStyle\n } as any as JSON;\n }\n}\n","export class FoldingCorrectionProperties {\n private _useFoldingCorrection: boolean;\n\n public constructor(useFoldingCorrection: boolean) {\n this._useFoldingCorrection = useFoldingCorrection;\n }\n\n public get useFoldingCorrection(): boolean {\n return this._useFoldingCorrection;\n }\n\n public static fromJSON(foldingCorrectionPropertiesJSON: any): FoldingCorrectionProperties {\n return new FoldingCorrectionProperties(foldingCorrectionPropertiesJSON?.useFoldingCorrection ?? false);\n }\n\n public toJSON(): JSON {\n return {useFoldingCorrection: this._useFoldingCorrection} as any as JSON;\n }\n}\n","export class ImageForFinishingImageLabel {\n private _id: number;\n private _name: string;\n private _imageId: string;\n private _file: File;\n\n public constructor(id: number, name: string, imageId: string, file?: File) {\n this._id = id;\n this._name = name;\n this._imageId = imageId;\n this._file = file;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get imageId(): string {\n return this._imageId;\n }\n\n public set imageId(imageId: string) {\n this._imageId = imageId;\n }\n\n public get file(): File {\n return this._file;\n }\n\n public static fromJSON(imageForFinishingImageLabelJSON: any): ImageForFinishingImageLabel {\n return new ImageForFinishingImageLabel(imageForFinishingImageLabelJSON.id, imageForFinishingImageLabelJSON.name, imageForFinishingImageLabelJSON.imageId);\n }\n}\n","import {map, reject} from 'lodash-es';\n\nexport enum LabelPositionInLabelPlace {\n BOTTOM_LEFT = 'BOTTOM_LEFT',\n BOTTOM_MIDDLE = 'BOTTOM_MIDDLE',\n BOTTOM_RIGHT = 'BOTTOM_RIGHT',\n CENTER_LEFT = 'CENTER_LEFT',\n CENTER = 'CENTER',\n CENTER_RIGHT = 'CENTER_RIGHT',\n TOP_LEFT = 'TOP_LEFT',\n TOP_MIDDLE = 'TOP_MIDDLE',\n TOP_RIGHT = 'TOP_RIGHT'\n}\n\nexport namespace LabelPositionInLabelPlace {\n export function getKeysOfLabelPosition(): string[] {\n return map(\n reject(Object.keys(LabelPositionInLabelPlace), (key: string) => {\n return typeof LabelPositionInLabelPlace[key] !== 'string';\n }),\n (key: string) => {\n return LabelPositionInLabelPlace[key].toUpperCase();\n }\n );\n }\n}\n","import {PlaceholderComponent} from '@domain/textile-data/finishing-and-finishing-template/placeholder-component';\nimport {map} from 'lodash-es';\n\nexport class PlaceholderCategory {\n private _name: string;\n private _placeholderComponents: PlaceholderComponent[];\n\n public constructor(name: string, placeholderComponents: PlaceholderComponent[]) {\n this._name = name;\n this._placeholderComponents = placeholderComponents;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get placeholderComponents(): PlaceholderComponent[] {\n return this._placeholderComponents;\n }\n\n public static fromJSON(placeholderCategoryJSON: any): PlaceholderCategory {\n return new PlaceholderCategory(\n placeholderCategoryJSON.name,\n map(placeholderCategoryJSON.components, (placeholderComponentJSON: any) => {\n return PlaceholderComponent.fromJSON(placeholderComponentJSON);\n })\n );\n }\n}\n","import {getDisplayValueForPlaceholderSeparator} from '@application/helper/get-display-value-for-placeholder-separator';\nimport {has, isEqual, isNil, join, map, replace} from 'lodash-es';\n\nexport class PlaceholderComponent {\n private readonly _id: number;\n private readonly _name: string;\n private _maxLength: number;\n private _categoryName: string;\n private _value: number | string;\n private _configurableValue: boolean;\n\n public constructor(id: number, name: string, maxLength?: number, value?: number | string, configurableValue?: boolean) {\n this._id = id;\n this._name = name;\n this._maxLength = maxLength;\n this._value = value;\n this._configurableValue = configurableValue;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public set maxLength(value: number) {\n this._maxLength = value;\n }\n\n public get categoryName(): string {\n return this._categoryName;\n }\n\n public set categoryName(value: string) {\n this._categoryName = value;\n }\n\n public get value(): number | string {\n return this._value;\n }\n\n public set value(value: number | string) {\n this._value = value;\n }\n\n public get configurableValue(): boolean {\n return this._configurableValue;\n }\n\n public set configurableValue(value: boolean) {\n this._configurableValue = value;\n }\n\n public getLabel(separator: string): string {\n return this.getReadableName().split(' ').join(getDisplayValueForPlaceholderSeparator(separator));\n }\n\n public static getLabelFromPlaceholderComponents(placeholderParts: PlaceholderComponent[], separator: string): string {\n return join(\n map(placeholderParts, (placeholderComponent: PlaceholderComponent) => {\n return placeholderComponent.getReadableName();\n }),\n getDisplayValueForPlaceholderSeparator(separator)\n );\n }\n\n public static fromJSON(placeholderComponentJSON: any): PlaceholderComponent {\n return new PlaceholderComponent(\n has(placeholderComponentJSON, 'id') ? placeholderComponentJSON.id : null,\n placeholderComponentJSON.name,\n placeholderComponentJSON.maxLength,\n placeholderComponentJSON.value,\n placeholderComponentJSON.configurableValue\n );\n }\n\n public getReadableName(): string {\n let result = replace(this.name, / /g, '');\n if (isEqual(result, 'alphabeticstart')) {\n result = 'alphabet';\n }\n\n if (isEqual(result, 'numericstart')) {\n result = 'number';\n }\n\n if (!isNil(this.maxLength)) {\n result += `(${this.maxLength})`;\n }\n\n if (!isNil(this.value)) {\n result += `(start from ${this.value})`;\n }\n return result;\n }\n\n public toJSON(): JSON {\n let result: JSON;\n\n if (isNil(this.id)) {\n result = {\n name: this._name,\n maxLength: this._maxLength\n } as any as JSON;\n } else {\n result = {\n id: this._id,\n maxLength: this._maxLength\n } as any as JSON;\n }\n return result;\n }\n\n public toFullJSON(): JSON {\n let result: JSON;\n\n if (isNil(this.id)) {\n result = {\n name: this._name,\n maxLength: this._maxLength\n } as any as JSON;\n } else {\n result = {\n id: this._id,\n name: this._name,\n maxLength: this._maxLength\n } as any as JSON;\n }\n return result;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {CommercialMachineQuality} from '@domain/textile-data/machine-quality/commercial-machine-quality';\nimport {IncorporationFactorException} from '@domain/textile-data/machine-quality/incorporation-factor-exception';\nimport {TuftLengthException} from '@domain/textile-data/machine-quality/tuft-Length-exception';\nimport {DoubleWidthWeaveStructure} from '@domain/textile-data/weave-structure/double-width-weave-structure';\nimport {SingleWidthWeaveStructure} from '@domain/textile-data/weave-structure/single-width-weave-structure';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {MachineOverviewListHelper} from '@presentation/pages/machine-overview/machine-overview-list-helper';\nimport {WeaveStructureWidth} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-general/weave-structure-width.enum';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {isNil, map} from 'lodash-es';\nimport {Finishing} from '../finishing-and-finishing-template/finishing/finishing';\nimport {GeneralJuteSettings} from './general-jute-settings';\nimport {Jute} from './jute';\nimport {PathWidth} from './path-width';\nimport {WeaveQuality} from './weave-quality';\nimport {WeftSelection} from './weft-selection';\n\nexport class CarpetWeaveQuality extends WeaveQuality {\n public alternativeMachineQualityIds: number[];\n\n public constructor(\n id: number,\n technicalName: string,\n version: number,\n type: WeaveQualityType,\n weaveStructureWidth: WeaveStructureWidth,\n singleWidth: SingleWidthWeaveStructure,\n doubleWidth: DoubleWidthWeaveStructure,\n reedDensityInDentsPerMM: number,\n pickDensityInPicksPerMM: number,\n weftDensityInDentsPerMM: number,\n technicalCode: string,\n practicalPickDensityInPicksPerMM: number,\n commercialMachineQualities: CommercialMachineQuality[],\n pathWidths: PathWidth[],\n applicableMachines: MachineOverviewList[],\n machinesWithSpecificPickDensity: {machine: MachineOverviewList; specificPickDensity: number}[],\n pileHeightInMM: number,\n buggyLengthMinInMM: number,\n buggyLengthMaxInMM: number,\n tuftLengthInMM: number,\n incorporationFactor: number,\n tolerance: number,\n picksPerHourMin: number,\n tuftLengthPatternTypeExceptions: TuftLengthException[],\n tuftLengthYarnTypeExceptions: TuftLengthException[],\n incorporationFactorPatternTypeExceptions: IncorporationFactorException[],\n incorporationFactorYarnTypeExceptions: IncorporationFactorException[],\n used: boolean,\n numberOfColumnsToDropForWeftSelection: number,\n jute: Jute[],\n finishings: Finishing[],\n alternativeMachineQualityIds: number[],\n weftSelections: WeftSelection[],\n juteGeneralSettings: GeneralJuteSettings,\n yarnSet: IdName,\n missingDesignMarginInDents: number,\n canAddJute?: boolean\n ) {\n super(\n id,\n technicalName,\n version,\n type,\n weaveStructureWidth,\n singleWidth,\n doubleWidth,\n reedDensityInDentsPerMM,\n pickDensityInPicksPerMM,\n weftDensityInDentsPerMM,\n technicalCode,\n practicalPickDensityInPicksPerMM,\n commercialMachineQualities,\n pathWidths,\n applicableMachines,\n machinesWithSpecificPickDensity,\n pileHeightInMM,\n buggyLengthMinInMM,\n buggyLengthMaxInMM,\n tuftLengthInMM,\n incorporationFactor,\n tolerance,\n picksPerHourMin,\n tuftLengthPatternTypeExceptions,\n tuftLengthYarnTypeExceptions,\n incorporationFactorPatternTypeExceptions,\n incorporationFactorYarnTypeExceptions,\n used,\n numberOfColumnsToDropForWeftSelection,\n jute,\n weftSelections,\n juteGeneralSettings,\n yarnSet,\n missingDesignMarginInDents,\n finishings,\n canAddJute\n );\n this.alternativeMachineQualityIds = alternativeMachineQualityIds;\n }\n\n public get alternativeQualityIds(): number[] {\n return this.alternativeMachineQualityIds;\n }\n\n public static createEmptyCarpetWeaveQuality(): CarpetWeaveQuality {\n return new CarpetWeaveQuality(\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n [],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n [],\n null,\n null,\n [],\n [],\n [],\n null,\n null,\n null,\n 0\n );\n }\n\n public static fromJSON(carpetWeaveQualityJSON: any): CarpetWeaveQuality {\n let result: CarpetWeaveQuality = null;\n\n if (!isNil(carpetWeaveQualityJSON)) {\n result = new CarpetWeaveQuality(\n carpetWeaveQualityJSON.id,\n carpetWeaveQualityJSON.technicalName,\n carpetWeaveQualityJSON.version,\n WeaveQualityType.CARPET,\n carpetWeaveQualityJSON.weaveStructureWidthType ?? null,\n WeaveQuality.getBackwardsSingleWidthWeaveStructure(carpetWeaveQualityJSON),\n DoubleWidthWeaveStructure.fromJSON(carpetWeaveQualityJSON),\n carpetWeaveQualityJSON.reedDensityInDentsPerMM,\n carpetWeaveQualityJSON.theoreticalPickDensityInPicksPerMM,\n carpetWeaveQualityJSON.weftDensityInDentsPerMM,\n carpetWeaveQualityJSON.technicalCode,\n isNil(carpetWeaveQualityJSON.specificPickDensity) ? carpetWeaveQualityJSON.practicalPickDensityInPicksPerMM : carpetWeaveQualityJSON.specificPickDensity,\n map(carpetWeaveQualityJSON.commercialMachineQualities, (commercialMachineQualityJSON: any) => {\n return CommercialMachineQuality.fromJSON(commercialMachineQualityJSON);\n }),\n carpetWeaveQualityJSON.pathWidths?.map((pathWidthJSON: any) => {\n return PathWidth.fromJSON(pathWidthJSON);\n }) ?? [],\n map(carpetWeaveQualityJSON.applicableMachines, (applicableMachineJSON: any) => {\n return MachineOverviewListHelper.fromJSON(applicableMachineJSON);\n }),\n map(carpetWeaveQualityJSON.machinesWithSpecificPickDensity, (machineWithSpecificPickDensityJSON: any) => {\n return {\n machine: MachineOverviewListHelper.fromJSON(machineWithSpecificPickDensityJSON.machine),\n specificPickDensity: machineWithSpecificPickDensityJSON.specificPickDensity\n };\n }),\n carpetWeaveQualityJSON.pileHeightInMM,\n carpetWeaveQualityJSON.buggyLengthMinInMM,\n carpetWeaveQualityJSON.buggyLengthMaxInMM,\n carpetWeaveQualityJSON.tuftLengthInMM,\n carpetWeaveQualityJSON.incorporationFactor,\n carpetWeaveQualityJSON.tolerance,\n carpetWeaveQualityJSON.picksPerHourMin,\n WeaveQuality.getTuftLengthExceptions(carpetWeaveQualityJSON.tuftLengthPatternTypeExceptions),\n WeaveQuality.getTuftLengthExceptions(carpetWeaveQualityJSON.tuftLengthYarnTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(carpetWeaveQualityJSON.incorporationFactorPatternTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(carpetWeaveQualityJSON.incorporationFactorYarnTypeExceptions),\n carpetWeaveQualityJSON.used,\n carpetWeaveQualityJSON.nrColumnsToDropForWeftSelection,\n carpetWeaveQualityJSON.jute?.map((jute: any) => {\n return Jute.fromJSON(jute);\n }) ?? [],\n carpetWeaveQualityJSON.finishings?.map((finishing: any) => Finishing.fromJSON(finishing)),\n carpetWeaveQualityJSON.alternativeMachineQualityIds,\n carpetWeaveQualityJSON.weftSelections\n ?.map((weftSelectionJSON: any) => WeftSelection.fromJSON(weftSelectionJSON))\n ?.sort((currentWeftSelection: WeftSelection, nextWeftSelection: WeftSelection) => {\n return currentWeftSelection.position < nextWeftSelection.position ? -1 : 1;\n }) ?? [],\n carpetWeaveQualityJSON.juteGeneralSettings ? GeneralJuteSettings.fromJSON(carpetWeaveQualityJSON.juteGeneralSettings) : null,\n carpetWeaveQualityJSON.yarnSet ? IdName.fromJSON(carpetWeaveQualityJSON.yarnSet) : null,\n carpetWeaveQualityJSON.missingDesignMarginInDents,\n carpetWeaveQualityJSON.canAddJute ?? false\n );\n }\n\n return result;\n }\n\n public toJSON(): JSON {\n const carpetWeaveQuality: any = super.toJSON();\n carpetWeaveQuality.alternativeQualityIds = this.alternativeMachineQualityIds;\n\n return carpetWeaveQuality as JSON;\n }\n}\n","export class CommercialMachineQuality {\n private _code: string;\n private _name: string;\n\n public constructor(code: string, name: string) {\n this._code = code;\n this._name = name;\n }\n\n public get code(): string {\n return this._code;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(commercialMachineQualityJSON: any): CommercialMachineQuality {\n return new CommercialMachineQuality(commercialMachineQualityJSON.code, commercialMachineQualityJSON.name);\n }\n\n public toJSON(): JSON {\n return {\n code: this._code,\n name: this._name\n } as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\n\nexport class GeneralJuteSettings {\n private _addJuteSoPathsHaveEqualHeight: boolean;\n private _pattern: Pattern;\n private _priorityPerBetweenCondition: boolean;\n private _borderColorIndex: Pattern;\n private _borderIndexColorToggle: boolean;\n private _repeatLastDesignToEndOfPath: boolean;\n private _addConditionalDesigns: boolean;\n\n public constructor(\n addJuteSoPathsHaveEqualHeight: boolean,\n pattern: Pattern,\n priorityPerBetweenCondition: boolean,\n borderColorIndex: Pattern,\n borderIndexColorToggle: boolean,\n repeatLastDesignToEndOfPath: boolean,\n addConditionalDesigns: boolean\n ) {\n this._addJuteSoPathsHaveEqualHeight = addJuteSoPathsHaveEqualHeight;\n this._pattern = pattern;\n this._priorityPerBetweenCondition = priorityPerBetweenCondition;\n this._borderColorIndex = borderColorIndex;\n this._borderIndexColorToggle = borderIndexColorToggle;\n this._repeatLastDesignToEndOfPath = repeatLastDesignToEndOfPath;\n this._addConditionalDesigns = addConditionalDesigns;\n }\n\n public get addJuteSoPathsHaveEqualHeight(): boolean {\n return this._addJuteSoPathsHaveEqualHeight;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public get priorityPerBetweenCondition(): boolean {\n return this._priorityPerBetweenCondition;\n }\n\n public get borderColorIndex(): number | Pattern {\n return this._borderColorIndex;\n }\n\n public get borderIndexColorToggle(): boolean {\n return this._borderIndexColorToggle;\n }\n\n public get repeatLastDesignToEndOfPath(): boolean {\n return this._repeatLastDesignToEndOfPath;\n }\n\n public get addConditionalDesigns(): boolean {\n return this._addConditionalDesigns;\n }\n\n public static fromJSON(generalJuteSettings: any): GeneralJuteSettings {\n return new GeneralJuteSettings(\n generalJuteSettings.addJuteSoPathsHaveEqualHeight,\n Pattern.fromJSON(generalJuteSettings.pattern),\n generalJuteSettings.priorityPerBetweenCondition,\n generalJuteSettings.borderColorIndex ? Pattern.fromJSON(generalJuteSettings.borderColorIndex) : null,\n generalJuteSettings.borderIndexColorToggle,\n generalJuteSettings.repeatLastDesignToEndOfPath,\n generalJuteSettings.addConditionalDesigns\n );\n }\n\n public toJSON(): JSON {\n return {\n addJuteSoPathsHaveEqualHeight: this._addJuteSoPathsHaveEqualHeight,\n pattern: this._pattern\n ? {\n id: this._pattern.id,\n type: this._pattern.visualisations.length > 0 ? PatternVisualisationType[this._pattern.visualisations[0].type] : null\n }\n : null,\n priorityPerBetweenCondition: this._priorityPerBetweenCondition,\n borderColorIndex: this._borderColorIndex?.id ?? null,\n borderIndexColorToggle: this._borderIndexColorToggle,\n repeatLastDesignToEndOfPath: this._repeatLastDesignToEndOfPath,\n addConditionalDesigns: this._addConditionalDesigns\n } as any as JSON;\n }\n}\n","export class IncorporationFactorException {\n private _id: number;\n private _name: string;\n private _incorporationFactor: number;\n\n public constructor(id: number, name: string, incorporationFactor: number) {\n this._id = id;\n this._name = name;\n this._incorporationFactor = incorporationFactor;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get incorporationFactor(): number {\n return this._incorporationFactor;\n }\n\n public static fromJSON(incorporationFactorJSON: any): IncorporationFactorException {\n return new IncorporationFactorException(incorporationFactorJSON.id, incorporationFactorJSON.name, incorporationFactorJSON.incorporationFactor);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n incorporationFactor: this._incorporationFactor\n } as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {BetweenRule} from './between-rule.interface';\n\nexport class Jute {\n private _type: string;\n private _commercialHeightInMM: number;\n private _technicalHeightInPicks: number;\n private _pattern: Pattern;\n private _rules: string[] | BetweenRule[];\n private _borderColorIndex: number;\n private _priority: number;\n\n public constructor(type: string, commercialHeightInMM: number, technicalHeightInPicks: number, pattern: Pattern, rules: string[] | BetweenRule[], borderColorIndex: number, priority: number) {\n this._type = type;\n this._commercialHeightInMM = commercialHeightInMM;\n this._technicalHeightInPicks = technicalHeightInPicks;\n this._pattern = pattern;\n this._rules = rules;\n this._borderColorIndex = borderColorIndex;\n this._priority = priority;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public get commercialHeightInMM(): number {\n return this._commercialHeightInMM;\n }\n\n public get technicalHeightInPicks(): number {\n return this._technicalHeightInPicks;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public get rules(): string[] | BetweenRule[] {\n return this._rules;\n }\n\n public get borderColorIndex(): number {\n return this._borderColorIndex;\n }\n\n public get priority(): number {\n return this._priority;\n }\n\n public static fromJSON(juteConditionJSON: any): Jute {\n return new Jute(\n juteConditionJSON.type,\n juteConditionJSON.commercialHeightInMM,\n juteConditionJSON.technicalHeightInPicks,\n Pattern.fromJSON(juteConditionJSON.pattern),\n juteConditionJSON.rules,\n juteConditionJSON.borderColorIndex ? juteConditionJSON.borderColorIndex.id : null,\n juteConditionJSON.priority\n );\n }\n\n public toJSON(): JSON {\n const jute = {\n type: this._type,\n commercialHeightInMM: this._commercialHeightInMM,\n technicalHeightInPicks: this._technicalHeightInPicks,\n pattern: {\n id: this._pattern?.id,\n type: PatternVisualisationType[this._pattern?.visualisations[0].type]\n },\n rules: this._rules,\n borderColorIndex: this._borderColorIndex\n };\n\n if (this._priority) {\n jute['priority'] = this._priority;\n }\n\n return jute as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {LabelType} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-selvedges/label-type.enum';\nimport {has, map} from 'lodash-es';\nimport {ImageForFinishingImageLabel} from '../finishing-and-finishing-template/image-for-finishing-image-label';\nimport {PlaceholderComponent} from '../finishing-and-finishing-template/placeholder-component';\n\nexport class Label {\n private _type: LabelType;\n private _offsetLeftInDents: number;\n private _offsetBottomInPicks: number;\n private _rotate: boolean;\n private _image: ImageForFinishingImageLabel;\n private _text: string;\n private _height: number;\n private _fontFamily: string;\n private _fontWeight: string;\n private _fontStyle: string;\n private _textPattern: Pattern;\n private _imagePattern: Pattern;\n private _placeholderParts: PlaceholderComponent[];\n\n public constructor(\n type: LabelType,\n offsetLeftInDents: number,\n offsetBottomInPicks: number,\n rotate: boolean,\n image: ImageForFinishingImageLabel = null,\n text: string = null,\n height: number = null,\n fontFamily: string = null,\n fontWeight: string = null,\n fontStyle: string = null,\n pattern: Pattern = null,\n placeholderParts: PlaceholderComponent[] = null\n ) {\n this._type = type;\n this._offsetLeftInDents = offsetLeftInDents;\n this._offsetBottomInPicks = offsetBottomInPicks;\n this._rotate = rotate;\n this._image = image;\n this._text = type === LabelType.IMAGE ? null : text;\n this._height = height;\n this._fontFamily = type === LabelType.IMAGE ? null : fontFamily;\n this._fontWeight = type === LabelType.IMAGE ? null : fontWeight;\n this._fontStyle = type === LabelType.IMAGE ? null : fontStyle;\n this._textPattern = type === LabelType.TEXT || type === LabelType.PLACEHOLDER ? pattern : null;\n this._imagePattern = type === LabelType.IMAGE ? pattern : null;\n this._placeholderParts = type === LabelType.PLACEHOLDER ? placeholderParts : null;\n }\n\n public static createEmptyLabel(): Label {\n return new Label(LabelType.IMAGE, null, null, false);\n }\n\n public get type(): LabelType {\n return this._type;\n }\n\n public get offsetLeftInDents(): number {\n return this._offsetLeftInDents;\n }\n\n public get offsetBottomInPicks(): number {\n return this._offsetBottomInPicks;\n }\n\n public get rotate(): boolean {\n return this._rotate;\n }\n\n public get image(): ImageForFinishingImageLabel {\n return this._image;\n }\n\n public get text(): string {\n return this._text;\n }\n\n public get height(): number {\n return this._height;\n }\n\n public get fontFamily(): string {\n return this._fontFamily;\n }\n\n public get fontWeight(): string {\n return this._fontWeight;\n }\n\n public get fontStyle(): string {\n return this._fontStyle;\n }\n\n public get textPattern(): Pattern {\n return this._textPattern;\n }\n\n public get imagePattern(): Pattern {\n return this._imagePattern;\n }\n\n public get placeholderParts(): PlaceholderComponent[] {\n return this._placeholderParts;\n }\n\n public static fromJSON(labelJSON: any): Label {\n let pattern = labelJSON.textPattern === null ? null : Pattern.fromJSON(labelJSON.textPattern);\n if (labelJSON.imagePattern !== null) {\n pattern = Pattern.fromJSON(labelJSON.imagePattern);\n }\n return new Label(\n labelJSON.type,\n labelJSON.offsetWidth,\n labelJSON.offsetHeight,\n labelJSON.rotate,\n labelJSON.image === null ? null : ImageForFinishingImageLabel.fromJSON(labelJSON.image),\n labelJSON.text,\n labelJSON.height,\n labelJSON.fontFamily,\n labelJSON.fontWeight,\n labelJSON.fontStyle,\n pattern,\n labelJSON.placeholderParts === null\n ? null\n : map(labelJSON.placeholderParts, (placeholderPartJSON: any) => {\n return new PlaceholderComponent(has(placeholderPartJSON, 'id') ? placeholderPartJSON.id : null, placeholderPartJSON.name, placeholderPartJSON.maxLength);\n })\n );\n }\n\n public toJSON(): JSON {\n return {\n type: this._type,\n offsetWidth: this._offsetLeftInDents,\n offsetHeight: this._offsetBottomInPicks,\n rotate: this._rotate,\n imageId: this._image === null ? null : this._image.id,\n text: this._text,\n height: this._height,\n fontFamily: this._fontFamily,\n fontWeight: this._fontWeight,\n fontStyle: this._fontStyle,\n textWeaveStructurePatternIndex: this._textPattern?.visualisations[0]?.isWeavePatternVisualisation() ? this._textPattern.id : null,\n imageWeaveStructurePatternIndex: this._imagePattern?.visualisations[0]?.isWeavePatternVisualisation() ? this._imagePattern.id : null,\n textPatternImageId: this._textPattern?.visualisations[0]?.type === PatternVisualisationType.DRAWING ? this._textPattern.id : null,\n imagePatternImageId: this._imagePattern?.visualisations[0]?.type === PatternVisualisationType.DRAWING ? this._imagePattern.id : null,\n placeholderParts:\n this._placeholderParts === null\n ? null\n : map(this._placeholderParts, (placeholderPart: PlaceholderComponent) => {\n return placeholderPart.toJSON();\n })\n } as any as JSON;\n }\n}\n","import {LongFloatStitchingMethod} from './long-float-stitching-method.enum';\nimport {LongFloatThreadType} from './long-float-thread-type.enum';\n\nexport class LongFloatCorrectionRule {\n private _threadType: LongFloatThreadType;\n private _clothType: string[];\n private _side: string[];\n private _stitchFrom: LongFloatStitchingMethod;\n private _maxLength: number;\n\n public constructor(threadType: LongFloatThreadType, clothType: string[], side: string[], stitchFrom: LongFloatStitchingMethod, maxLength: number) {\n this._threadType = threadType;\n this._clothType = clothType;\n this._side = side;\n this._stitchFrom = stitchFrom;\n this._maxLength = maxLength;\n }\n\n public static createEmptyLongFloatCorrectionRule(): LongFloatCorrectionRule {\n return new LongFloatCorrectionRule(LongFloatThreadType.WARP, [], [], LongFloatStitchingMethod.MIDDLE, null);\n }\n\n public get threadType(): LongFloatThreadType {\n return this._threadType;\n }\n\n public get clothType(): string[] {\n return this._clothType;\n }\n\n public get side(): string[] {\n return this._side;\n }\n\n public get stitchFrom(): LongFloatStitchingMethod {\n return this._stitchFrom;\n }\n\n public get maxLength(): number {\n return this._maxLength;\n }\n\n public static fromJSON(longFloatCorrectionRuleJSON: any): LongFloatCorrectionRule {\n return new LongFloatCorrectionRule(\n longFloatCorrectionRuleJSON.threadType,\n longFloatCorrectionRuleJSON.clothType,\n longFloatCorrectionRuleJSON.side,\n longFloatCorrectionRuleJSON.stitchFrom,\n longFloatCorrectionRuleJSON.maxLength\n );\n }\n\n public toJSON(): JSON {\n return {\n threadType: this._threadType,\n clothType: this._clothType,\n side: this._side,\n stitchFrom: this._stitchFrom,\n maxLength: this._maxLength\n } as any as JSON;\n }\n}\n","export enum LongFloatStitchingMethod {\n MIDDLE = 'MIDDLE',\n BORDER = 'BORDER',\n RANDOM = 'RANDOM'\n}\n","export enum LongFloatThreadType {\n WARP = 'WARP',\n PILE = 'PILE',\n WEFT = 'WEFT'\n}\n","export class PathWidth {\n private _commercialInCM: number;\n private _calculatedDents: number;\n private _actualDents: number;\n\n public constructor(commercialInCM: number, calculatedDents: number, actualDents: number) {\n this._commercialInCM = commercialInCM;\n this._calculatedDents = calculatedDents;\n this._actualDents = actualDents;\n }\n\n public get commercialInCM(): number {\n return this._commercialInCM;\n }\n\n public get calculatedDents(): number {\n return this._calculatedDents;\n }\n\n public get actualDents(): number {\n return this._actualDents;\n }\n\n public static fromJSON(pathWidthJSON: any): PathWidth {\n return new PathWidth(pathWidthJSON.commercialInCM, pathWidthJSON.calculatedDents, pathWidthJSON.actualDents);\n }\n\n public toJSON(): JSON {\n return {\n commercialInCM: this._commercialInCM,\n calculatedDents: this._calculatedDents,\n actualDents: this._actualDents\n } as any as JSON;\n }\n}\n","import {LongFloatCorrectionRule} from './long-float-correction-rule';\n\nexport class PostProcessing {\n private _longFloatCorrectionRules: LongFloatCorrectionRule[];\n\n public constructor(longFloatCorrectionRules: LongFloatCorrectionRule[]) {\n this._longFloatCorrectionRules = longFloatCorrectionRules;\n }\n\n public get longFloatCorrectionRules(): LongFloatCorrectionRule[] {\n return this._longFloatCorrectionRules;\n }\n\n public static fromJSON(postProcessingJSON: any): PostProcessing {\n return new PostProcessing(\n postProcessingJSON?.longFloatCorrectionRules.map((longFloatCorrectionRuleJSON: any) => {\n return LongFloatCorrectionRule.fromJSON(longFloatCorrectionRuleJSON);\n })\n );\n }\n\n public toJSON(): JSON {\n return {\n longFloatCorrectionRules: this.longFloatCorrectionRules.map((longFloatCorrectionRule: LongFloatCorrectionRule) => {\n return longFloatCorrectionRule.toJSON();\n })\n } as any as JSON;\n }\n}\n","import {Pattern} from '@domain/pattern';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {RepeatLabel} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-selvedges/repeat-label.enum';\nimport {SelvedgeOption} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-selvedges/selvedge-option.enum';\nimport {map} from 'lodash-es';\nimport {Label} from './label';\n\nexport class Selvedge {\n private _selvedgeOption: SelvedgeOption;\n private _minimumWidth: number;\n private _backgroundImage: Pattern;\n private _repeatLabel: RepeatLabel;\n private _labels: Label[];\n\n public constructor(selvedgeOption: SelvedgeOption, minimumWidth: number = null, backgroundImage: Pattern = null, repeatLabel: RepeatLabel = null, labels: Label[] = null) {\n this._selvedgeOption = selvedgeOption;\n this._minimumWidth = minimumWidth;\n this._backgroundImage = backgroundImage;\n this._repeatLabel = repeatLabel;\n this._labels = labels;\n }\n\n public get selvedgeOption(): SelvedgeOption {\n return this._selvedgeOption;\n }\n\n public get minimumWidth(): number {\n return this._minimumWidth;\n }\n\n public get backgroundImage(): Pattern {\n return this._backgroundImage;\n }\n\n public get repeatLabel(): RepeatLabel {\n return this._repeatLabel;\n }\n\n public get labels(): Label[] {\n return this._labels;\n }\n\n public static fromJSON(selvedgeJSON: any): Selvedge {\n return new Selvedge(\n selvedgeJSON.selvedgeOption,\n selvedgeJSON.minimumWidth,\n Pattern.fromJSON(selvedgeJSON.backgroundImage),\n selvedgeJSON.repeatLabel,\n selvedgeJSON.labels === null\n ? null\n : map(selvedgeJSON.labels, (labelJSON: any) => {\n return Label.fromJSON(labelJSON);\n })\n );\n }\n\n public toJSON(): JSON {\n const firstVisualization = this._backgroundImage?.visualisations[0];\n return {\n selvedgeOption: this._selvedgeOption,\n minimumWidth: this._minimumWidth,\n backgroundPatternWeaveStructureIndex: firstVisualization?.isWeavePatternVisualisation() ? this._backgroundImage.id : null,\n backgroundImageId: firstVisualization?.type === PatternVisualisationType.DRAWING ? this._backgroundImage.id : null,\n repeatLabel: this._repeatLabel,\n labels:\n this._labels === null\n ? null\n : map(this._labels, (label: Label) => {\n return label.toJSON();\n })\n } as any as JSON;\n }\n}\n","import {Selvedge} from './selvedge';\n\nexport class Selvedges {\n private _left: Selvedge;\n private _right: Selvedge;\n private _center: Selvedge;\n\n public constructor(left: Selvedge, right: Selvedge, center: Selvedge) {\n this._left = left;\n this._right = right;\n this._center = center;\n }\n\n public get left(): Selvedge {\n return this._left;\n }\n\n public get right(): Selvedge {\n return this._right;\n }\n\n public get center(): Selvedge {\n return this._center;\n }\n\n public static fromJSON(selvedgesJSON: any): Selvedges {\n return new Selvedges(\n selvedgesJSON.left === null ? null : Selvedge.fromJSON(selvedgesJSON.left),\n selvedgesJSON.right === null ? null : Selvedge.fromJSON(selvedgesJSON.right),\n selvedgesJSON.center === null ? null : Selvedge.fromJSON(selvedgesJSON.center)\n );\n }\n\n public toJSON(): JSON {\n return {\n left: this._left === null ? null : this._left.toJSON(),\n right: this._right === null ? null : this._right.toJSON(),\n center: this._center === null ? null : this._center.toJSON()\n } as any as JSON;\n }\n}\n","export class TuftLengthException {\n private _id: number;\n private _name: string;\n private _tuftLengthInMM: number;\n\n public constructor(id: number, name: string, tuftLengthInMM: number) {\n this._id = id;\n this._name = name;\n this._tuftLengthInMM = tuftLengthInMM;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get tuftLengthInMM(): number {\n return this._tuftLengthInMM;\n }\n\n public static fromJSON(tuftLengthExceptionJSON: any): TuftLengthException {\n return new TuftLengthException(tuftLengthExceptionJSON.id, tuftLengthExceptionJSON.name, tuftLengthExceptionJSON.tuftLengthInMM);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n tuftLengthInMM: this._tuftLengthInMM\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {CommercialMachineQuality} from '@domain/textile-data/machine-quality/commercial-machine-quality';\nimport {IncorporationFactorException} from '@domain/textile-data/machine-quality/incorporation-factor-exception';\nimport {TuftLengthException} from '@domain/textile-data/machine-quality/tuft-Length-exception';\nimport {DoubleWidthWeaveStructure} from '@domain/textile-data/weave-structure/double-width-weave-structure';\nimport {SingleWidthWeaveStructure} from '@domain/textile-data/weave-structure/single-width-weave-structure';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {MachineOverviewListHelper} from '@presentation/pages/machine-overview/machine-overview-list-helper';\nimport {WeaveStructureWidth} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-general/weave-structure-width.enum';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {isNil, map} from 'lodash-es';\nimport {Finishing} from '../finishing-and-finishing-template/finishing/finishing';\nimport {GeneralJuteSettings} from './general-jute-settings';\nimport {Jute} from './jute';\nimport {PathWidth} from './path-width';\nimport {PostProcessing} from './post-processing';\nimport {Selvedges} from './selvedges';\nimport {WeaveQuality} from './weave-quality';\nimport {WeftSelection} from './weft-selection';\n\nexport class VelvetWeaveQuality extends WeaveQuality {\n public postProcessing: PostProcessing;\n public selvedges: Selvedges;\n\n public constructor(\n id: number,\n technicalName: string,\n version: number,\n type: WeaveQualityType,\n weaveStructureWidth: WeaveStructureWidth,\n singleWidth: SingleWidthWeaveStructure,\n doubleWidth: DoubleWidthWeaveStructure,\n reedDensityInDentsPerMM: number,\n pickDensityInPicksPerMM: number,\n weftDensityInDentsPerMM: number,\n technicalCode: string,\n practicalPickDensityInPicksPerMM: number,\n commercialMachineQualities: CommercialMachineQuality[],\n pathWidths: PathWidth[],\n applicableMachines: MachineOverviewList[],\n machinesWithSpecificPickDensity: {machine: MachineOverviewList; specificPickDensity: number}[],\n pileHeightInMM: number,\n buggyLengthMinInMM: number,\n buggyLengthMaxInMM: number,\n tuftLengthInMM: number,\n incorporationFactor: number,\n tolerance: number,\n picksPerHourMin: number,\n tuftLengthPatternTypeExceptions: TuftLengthException[],\n tuftLengthYarnTypeExceptions: TuftLengthException[],\n incorporationFactorPatternTypeExceptions: IncorporationFactorException[],\n incorporationFactorYarnTypeExceptions: IncorporationFactorException[],\n used: boolean,\n numberOfColumnsToDropForWeftSelection: number,\n jute: Jute[],\n finishings: Finishing[],\n postProcessing: PostProcessing,\n selvedges: Selvedges,\n weftSelections: WeftSelection[],\n juteGeneralSettings: GeneralJuteSettings,\n yarnSet: IdName,\n missingDesignMarginInDents: number,\n canAddJute?: boolean\n ) {\n super(\n id,\n technicalName,\n version,\n type,\n weaveStructureWidth,\n singleWidth,\n doubleWidth,\n reedDensityInDentsPerMM,\n pickDensityInPicksPerMM,\n weftDensityInDentsPerMM,\n technicalCode,\n practicalPickDensityInPicksPerMM,\n commercialMachineQualities,\n pathWidths,\n applicableMachines,\n machinesWithSpecificPickDensity,\n pileHeightInMM,\n buggyLengthMinInMM,\n buggyLengthMaxInMM,\n tuftLengthInMM,\n incorporationFactor,\n tolerance,\n picksPerHourMin,\n tuftLengthPatternTypeExceptions,\n tuftLengthYarnTypeExceptions,\n incorporationFactorPatternTypeExceptions,\n incorporationFactorYarnTypeExceptions,\n used,\n numberOfColumnsToDropForWeftSelection,\n jute,\n weftSelections,\n juteGeneralSettings,\n yarnSet,\n missingDesignMarginInDents,\n finishings,\n canAddJute\n );\n this.postProcessing = postProcessing;\n this.selvedges = selvedges;\n }\n\n public static createEmptyVelvetWeaveQuality(): VelvetWeaveQuality {\n return new VelvetWeaveQuality(\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n null,\n null,\n [],\n null,\n null,\n 0,\n null\n );\n }\n\n public static fromJSON(velvetWeaveQualityJSON: any): VelvetWeaveQuality {\n let result: VelvetWeaveQuality = null;\n\n if (!isNil(velvetWeaveQualityJSON)) {\n result = new VelvetWeaveQuality(\n velvetWeaveQualityJSON.id,\n velvetWeaveQualityJSON.technicalName,\n velvetWeaveQualityJSON.version,\n WeaveQualityType.VELVET,\n velvetWeaveQualityJSON.weaveStructureWidthType ? velvetWeaveQualityJSON.weaveStructureWidthType : null,\n WeaveQuality.getBackwardsSingleWidthWeaveStructure(velvetWeaveQualityJSON),\n DoubleWidthWeaveStructure.fromJSON(velvetWeaveQualityJSON),\n velvetWeaveQualityJSON.reedDensityInDentsPerMM,\n velvetWeaveQualityJSON.theoreticalPickDensityInPicksPerMM,\n velvetWeaveQualityJSON.weftDensityInDentsPerMM,\n velvetWeaveQualityJSON.technicalCode,\n isNil(velvetWeaveQualityJSON.specificPickDensity) ? velvetWeaveQualityJSON.practicalPickDensityInPicksPerMM : velvetWeaveQualityJSON.specificPickDensity,\n map(velvetWeaveQualityJSON.commercialMachineQualities, (commercialMachineQualityJSON: any) => {\n return CommercialMachineQuality.fromJSON(commercialMachineQualityJSON);\n }),\n velvetWeaveQualityJSON.pathWidths?.map((pathWidthJSON: any) => {\n return PathWidth.fromJSON(pathWidthJSON);\n }) ?? [],\n map(velvetWeaveQualityJSON.applicableMachines, (applicableMachineJSON: any) => {\n return MachineOverviewListHelper.fromJSON(applicableMachineJSON);\n }),\n map(velvetWeaveQualityJSON.machinesWithSpecificPickDensity, (machineWithSpecificPickDensityJSON: any) => {\n return {\n machine: MachineOverviewListHelper.fromJSON(machineWithSpecificPickDensityJSON.machine),\n specificPickDensity: machineWithSpecificPickDensityJSON.specificPickDensity\n };\n }),\n velvetWeaveQualityJSON.pileHeightInMM,\n velvetWeaveQualityJSON.buggyLengthMinInMM,\n velvetWeaveQualityJSON.buggyLengthMaxInMM,\n velvetWeaveQualityJSON.tuftLengthInMM,\n velvetWeaveQualityJSON.incorporationFactor,\n velvetWeaveQualityJSON.tolerance,\n velvetWeaveQualityJSON.picksPerHourMin,\n WeaveQuality.getTuftLengthExceptions(velvetWeaveQualityJSON.tuftLengthPatternTypeExceptions),\n WeaveQuality.getTuftLengthExceptions(velvetWeaveQualityJSON.tuftLengthYarnTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(velvetWeaveQualityJSON.incorporationFactorPatternTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(velvetWeaveQualityJSON.incorporationFactorYarnTypeExceptions),\n velvetWeaveQualityJSON.used,\n velvetWeaveQualityJSON.nrColumnsToDropForWeftSelection,\n velvetWeaveQualityJSON.jute?.map((jute: any) => {\n return Jute.fromJSON(jute);\n }) ?? [],\n velvetWeaveQualityJSON.finishings?.map((finishing: any) => Finishing.fromJSON(finishing)),\n PostProcessing.fromJSON(velvetWeaveQualityJSON.postProcessing),\n Selvedges.fromJSON(velvetWeaveQualityJSON.selvedges),\n velvetWeaveQualityJSON.weftSelections?.map((weftSelectionJSON: any) => WeftSelection.fromJSON(weftSelectionJSON)) ?? [],\n velvetWeaveQualityJSON.juteGeneralSettings ? GeneralJuteSettings.fromJSON(velvetWeaveQualityJSON.juteGeneralSettings) : null,\n velvetWeaveQualityJSON.yarnSet ? IdName.fromJSON(velvetWeaveQualityJSON.yarnSet) : null,\n velvetWeaveQualityJSON.missingDesignMarginInDents,\n velvetWeaveQualityJSON.canAddJute ?? false\n );\n }\n\n return result;\n }\n\n public toJSON(): JSON {\n const velvetWeaveQuality: any = super.toJSON();\n velvetWeaveQuality.postProcessing = this.postProcessing.toJSON();\n velvetWeaveQuality.selvedges = this.selvedges === null ? null : this.selvedges.toJSON();\n\n return velvetWeaveQuality as JSON;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {IdName} from '@domain/id-name';\nimport {Equipment} from '@domain/machine/equipment';\nimport {CommercialMachineQuality} from '@domain/textile-data/machine-quality/commercial-machine-quality';\nimport {IncorporationFactorException} from '@domain/textile-data/machine-quality/incorporation-factor-exception';\nimport {TuftLengthException} from '@domain/textile-data/machine-quality/tuft-Length-exception';\nimport {DoubleWidthWeaveStructure} from '@domain/textile-data/weave-structure/double-width-weave-structure';\nimport {SingleWidthWeaveStructure} from '@domain/textile-data/weave-structure/single-width-weave-structure';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {MachineOverviewListHelper} from '@presentation/pages/machine-overview/machine-overview-list-helper';\nimport {WeaveStructureWidth} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-general/weave-structure-width.enum';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {isNil, map} from 'lodash-es';\nimport {Finishing} from '../finishing-and-finishing-template/finishing/finishing';\nimport {OverviewListDoubleWidthWeaveStructure} from '../weave-structure/overview-list-double-width-weave-structure';\nimport {OverviewListSingleWidthWeaveStructure} from '../weave-structure/overview-list-single-width-weave-structure';\nimport {GeneralJuteSettings} from './general-jute-settings';\nimport {Jute} from './jute';\nimport {PathWidth} from './path-width';\nimport {WeftSelection} from './weft-selection';\n\nexport class WeaveQuality {\n private _id: number;\n private _technicalName: string;\n private readonly _version: number;\n private _type: WeaveQualityType;\n private readonly _weaveStructureWidth: WeaveStructureWidth;\n private _singleWidth: SingleWidthWeaveStructure;\n private readonly _doubleWidth: DoubleWidthWeaveStructure;\n private readonly _reedDensityInDentsPerMM: number;\n private readonly _pickDensityInPicksPerMM: number;\n private readonly _weftDensityInDentsPerMM: number;\n private readonly _technicalCode: string;\n private readonly _practicalPickDensityInPicksPerMM: number;\n private readonly _commercialMachineQualities: CommercialMachineQuality[];\n private readonly _pathWidths: PathWidth[];\n private _applicableMachines: MachineOverviewList[];\n private _machinesWithSpecificPickDensity: {machine: MachineOverviewList; specificPickDensity: number}[];\n private readonly _pileHeightInMM: number;\n private readonly _buggyLengthMinInMM: number;\n private readonly _buggyLengthMaxInMM: number;\n private readonly _tuftLengthInMM: number;\n private readonly _incorporationFactor: number;\n private readonly _tolerance: number;\n private readonly _picksPerHourMin: number;\n private readonly _tuftLengthPatternTypeExceptions: TuftLengthException[];\n private readonly _tuftLengthYarnTypeExceptions: TuftLengthException[];\n private readonly _incorporationFactorPatternTypeExceptions: IncorporationFactorException[];\n private readonly _incorporationFactorYarnTypeExceptions: IncorporationFactorException[];\n private _used: boolean;\n private _numberOfColumnsToDropForWeftSelection: number;\n private _jute: Jute[];\n private _finishings: Finishing[];\n private _juteGeneralSettings: GeneralJuteSettings;\n private readonly _weftSelections: WeftSelection[];\n private _yarnSet: IdName;\n private _canAddJute: boolean;\n private _missingDesignMarginInDents: number;\n\n public constructor(\n id: number,\n technicalName: string,\n version: number,\n type: WeaveQualityType,\n weaveStructureWidth: WeaveStructureWidth,\n singleWidth: SingleWidthWeaveStructure,\n doubleWidth: DoubleWidthWeaveStructure,\n reedDensityInDentsPerMM: number,\n pickDensityInPicksPerMM: number,\n weftDensityInDentsPerMM: number,\n technicalCode: string,\n practicalPickDensityInPicksPerMM: number,\n commercialMachineQualities: CommercialMachineQuality[],\n pathWidths: PathWidth[],\n applicableMachines: MachineOverviewList[],\n machinesWithSpecificPickDensity: {machine: MachineOverviewList; specificPickDensity: number}[],\n pileHeightInMM: number,\n buggyLengthMinInMM: number,\n buggyLengthMaxInMM: number,\n tuftLengthInMM: number,\n incorporationFactor: number,\n tolerance: number,\n picksPerHourMin: number,\n tuftLengthPatternTypeExceptions: TuftLengthException[],\n tuftLengthYarnTypeExceptions: TuftLengthException[],\n incorporationFactorPatternTypeExceptions: IncorporationFactorException[],\n incorporationFactorYarnTypeExceptions: IncorporationFactorException[],\n used: boolean,\n numberOfColumnsToDropForWeftSelection: number,\n jute: Jute[],\n weftSelections: WeftSelection[],\n juteGeneralSettings: GeneralJuteSettings,\n yarnSet: IdName,\n missingDesignMarginInDents: number,\n finishings: Finishing[] = [],\n canAddJute?: boolean\n ) {\n this._id = id;\n this._technicalName = technicalName;\n this._version = version;\n this._type = type;\n this._weaveStructureWidth = weaveStructureWidth;\n this._singleWidth = singleWidth;\n this._doubleWidth = doubleWidth;\n this._reedDensityInDentsPerMM = reedDensityInDentsPerMM;\n this._pickDensityInPicksPerMM = pickDensityInPicksPerMM;\n this._weftDensityInDentsPerMM = weftDensityInDentsPerMM;\n this._technicalCode = technicalCode;\n this._practicalPickDensityInPicksPerMM = practicalPickDensityInPicksPerMM;\n this._commercialMachineQualities = commercialMachineQualities;\n this._pathWidths = pathWidths;\n this._applicableMachines = applicableMachines;\n this._machinesWithSpecificPickDensity = machinesWithSpecificPickDensity;\n this._pileHeightInMM = pileHeightInMM;\n this._buggyLengthMinInMM = buggyLengthMinInMM;\n this._buggyLengthMaxInMM = buggyLengthMaxInMM;\n this._tuftLengthInMM = tuftLengthInMM;\n this._incorporationFactor = incorporationFactor;\n this._tolerance = tolerance;\n this._picksPerHourMin = picksPerHourMin;\n this._tuftLengthPatternTypeExceptions = tuftLengthPatternTypeExceptions;\n this._tuftLengthYarnTypeExceptions = tuftLengthYarnTypeExceptions;\n this._incorporationFactorPatternTypeExceptions = incorporationFactorPatternTypeExceptions;\n this._incorporationFactorYarnTypeExceptions = incorporationFactorYarnTypeExceptions;\n this._used = used;\n this._numberOfColumnsToDropForWeftSelection = numberOfColumnsToDropForWeftSelection;\n this._jute = jute;\n this._finishings = finishings;\n this._weftSelections = weftSelections;\n this._juteGeneralSettings = juteGeneralSettings;\n this._yarnSet = yarnSet;\n this._missingDesignMarginInDents = missingDesignMarginInDents;\n this._canAddJute = canAddJute;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get technicalName(): string {\n return this._technicalName;\n }\n\n public set technicalName(technicalName: string) {\n this._technicalName = technicalName;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get technicalNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.technicalName, this.version);\n }\n\n public get type(): WeaveQualityType {\n return this._type;\n }\n\n public set type(type: WeaveQualityType) {\n this._type = type;\n }\n\n public get weaveStructureWidth(): WeaveStructureWidth {\n return this._weaveStructureWidth;\n }\n\n public get weaveStructureId(): number {\n return this._weaveStructureWidth === WeaveStructureWidth.DOUBLE_WIDTH ? this._doubleWidth.id ?? this._doubleWidth.topWeaveStructure.id : this._singleWidth.weaveStructure.id;\n }\n\n public get singleWidth(): SingleWidthWeaveStructure {\n return this._singleWidth;\n }\n\n public set singleWidth(value: SingleWidthWeaveStructure) {\n this._singleWidth = value;\n }\n\n public get doubleWidth(): DoubleWidthWeaveStructure {\n return this._doubleWidth;\n }\n\n public get reedDensityInDentsPerMM(): number {\n return this._reedDensityInDentsPerMM;\n }\n\n public get pickDensityInPicksPerMM(): number {\n return this._pickDensityInPicksPerMM;\n }\n\n public get weftDensityInDentsPerMM(): number {\n return this._weftDensityInDentsPerMM;\n }\n\n public get technicalCode(): string {\n return this._technicalCode;\n }\n\n public get practicalPickDensityInPicksPerMM(): number {\n return this._practicalPickDensityInPicksPerMM;\n }\n\n public get commercialMachineQualities(): CommercialMachineQuality[] {\n return this._commercialMachineQualities;\n }\n\n public get pathWidths(): PathWidth[] {\n return this._pathWidths;\n }\n\n public get applicableMachines(): MachineOverviewList[] {\n return this._applicableMachines;\n }\n\n public set applicableMachines(applicableMachines: MachineOverviewList[]) {\n this._applicableMachines = applicableMachines;\n }\n\n public get machinesWithSpecificPickDensity(): {machine: MachineOverviewList; specificPickDensity: number}[] {\n return this._machinesWithSpecificPickDensity;\n }\n\n public set machinesWithSpecificPickDensity(machinesWithSpecificPickDensity: {machine: MachineOverviewList; specificPickDensity: number}[]) {\n this._machinesWithSpecificPickDensity = machinesWithSpecificPickDensity;\n }\n\n public get pileHeightInMM(): number {\n return this._pileHeightInMM;\n }\n\n public get buggyLengthMinInMM(): number {\n return this._buggyLengthMinInMM;\n }\n\n public get buggyLengthMaxInMM(): number {\n return this._buggyLengthMaxInMM;\n }\n\n public get tuftLengthInMM(): number {\n return this._tuftLengthInMM;\n }\n\n public get incorporationFactor(): number {\n return this._incorporationFactor;\n }\n\n public get tolerance(): number {\n return this._tolerance;\n }\n\n public get picksPerHourMin(): number {\n return this._picksPerHourMin;\n }\n\n public get tuftLengthPatternTypeExceptions(): TuftLengthException[] {\n return this._tuftLengthPatternTypeExceptions;\n }\n\n public get tuftLengthYarnTypeExceptions(): TuftLengthException[] {\n return this._tuftLengthYarnTypeExceptions;\n }\n\n public get incorporationFactorPatternTypeExceptions(): IncorporationFactorException[] {\n return this._incorporationFactorPatternTypeExceptions;\n }\n\n public get incorporationFactorYarnTypeExceptions(): IncorporationFactorException[] {\n return this._incorporationFactorYarnTypeExceptions;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(value: boolean) {\n this._used = value;\n }\n\n public get numberOfColumnsToDropForWeftSelection(): number {\n return this._numberOfColumnsToDropForWeftSelection;\n }\n\n public set numberOfColumnsToDropForWeftSelection(numberOfColumnsToDropForWeftSelection: number) {\n this._numberOfColumnsToDropForWeftSelection = numberOfColumnsToDropForWeftSelection;\n }\n\n public get jute(): Jute[] {\n return this._jute;\n }\n\n public set jute(value: Jute[]) {\n this._jute = value;\n }\n\n public get finishings(): Finishing[] {\n return this._finishings;\n }\n\n public set finishings(value: Finishing[]) {\n this._finishings = value;\n }\n\n public get yarnSet(): IdName {\n return this._yarnSet;\n }\n\n public set yarnSet(value: IdName) {\n this._yarnSet = value;\n }\n\n public get missingDesignMarginInDents(): number {\n return this._missingDesignMarginInDents;\n }\n\n public set missingDesignMarginInDents(value: number) {\n this._missingDesignMarginInDents = value;\n }\n\n public get weftSelections(): WeftSelection[] {\n return this._weftSelections;\n }\n\n public static createEmptyWeaveQuality(): WeaveQuality {\n return new WeaveQuality(\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n [],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n [],\n null,\n null,\n [],\n [],\n null,\n null,\n 0\n );\n }\n\n public get juteGeneralSettings(): GeneralJuteSettings {\n return this._juteGeneralSettings;\n }\n\n public set juteGeneralSettings(value: GeneralJuteSettings) {\n this._juteGeneralSettings = value;\n }\n\n public get canAddJute(): boolean {\n return this._canAddJute;\n }\n\n public set canAddJute(value: boolean) {\n this._canAddJute = value;\n }\n\n public static fromJSON(weaveQualityJSON: any): WeaveQuality {\n let result: WeaveQuality = null;\n\n if (!isNil(weaveQualityJSON)) {\n result = new WeaveQuality(\n weaveQualityJSON.id,\n weaveQualityJSON.technicalName,\n weaveQualityJSON.version,\n weaveQualityJSON.type,\n weaveQualityJSON.weaveStructureWidthType ? weaveQualityJSON.weaveStructureWidthType : null,\n WeaveQuality.getBackwardsSingleWidthWeaveStructure(weaveQualityJSON),\n DoubleWidthWeaveStructure.fromJSON(weaveQualityJSON),\n weaveQualityJSON.reedDensityInDentsPerMM,\n weaveQualityJSON.theoreticalPickDensityInPicksPerMM,\n weaveQualityJSON.weftDensityInDentsPerMM,\n weaveQualityJSON.technicalCode,\n isNil(weaveQualityJSON.specificPickDensity) ? weaveQualityJSON.practicalPickDensityInPicksPerMM : weaveQualityJSON.specificPickDensity,\n map(weaveQualityJSON.commercialMachineQualities, (commercialMachineQualityJSON: any) => {\n return CommercialMachineQuality.fromJSON(commercialMachineQualityJSON);\n }),\n weaveQualityJSON.pathWidths?.map((pathWidthJSON: any) => {\n return PathWidth.fromJSON(pathWidthJSON);\n }) ?? [],\n map(weaveQualityJSON.applicableMachines, (applicableMachineJSON: any) => {\n return MachineOverviewListHelper.fromJSON(applicableMachineJSON);\n }),\n map(weaveQualityJSON.machinesWithSpecificPickDensity, (machineWithSpecificPickDensityJSON: any) => {\n return {\n machine: MachineOverviewListHelper.fromJSON(machineWithSpecificPickDensityJSON.machine),\n specificPickDensity: machineWithSpecificPickDensityJSON.specificPickDensity\n };\n }),\n weaveQualityJSON.pileHeightInMM,\n weaveQualityJSON.buggyLengthMinInMM,\n weaveQualityJSON.buggyLengthMaxInMM,\n weaveQualityJSON.tuftLengthInMM,\n weaveQualityJSON.incorporationFactor,\n weaveQualityJSON.tolerance,\n weaveQualityJSON.picksPerHourMin,\n WeaveQuality.getTuftLengthExceptions(weaveQualityJSON.tuftLengthPatternTypeExceptions),\n WeaveQuality.getTuftLengthExceptions(weaveQualityJSON.tuftLengthYarnTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(weaveQualityJSON.incorporationFactorPatternTypeExceptions),\n WeaveQuality.getIncorporationFactorExceptions(weaveQualityJSON.incorporationFactorYarnTypeExceptions),\n weaveQualityJSON.used,\n weaveQualityJSON.nrColumnsToDropForWeftSelection,\n weaveQualityJSON.jute?.map((jute: any) => {\n return Jute.fromJSON(jute);\n }) ?? [],\n weaveQualityJSON.weftSelections\n ?.map((weftSelectionJSON: any) => WeftSelection.fromJSON(weftSelectionJSON))\n ?.sort((currentWeftSelection: WeftSelection, nextWeftSelection: WeftSelection) => {\n return currentWeftSelection.position < nextWeftSelection.position ? -1 : 1;\n }) ?? [],\n weaveQualityJSON.juteGeneralSettings ? GeneralJuteSettings.fromJSON(weaveQualityJSON.juteGeneralSettings) : null,\n weaveQualityJSON.yarnSet ? IdName.fromJSON(weaveQualityJSON.yarnSet) : null,\n weaveQualityJSON.missingDesignMarginInDents,\n weaveQualityJSON.finishings?.map((finishing: any) => Finishing.fromJSON(finishing)),\n weaveQualityJSON.canAddJute\n );\n }\n\n return result;\n }\n\n public static getBackwardsSingleWidthWeaveStructure(weaveQualityJSON: any): SingleWidthWeaveStructure {\n if (!weaveQualityJSON.singleWidth && !weaveQualityJSON.doubleWidth) {\n return weaveQualityJSON.weaveStructure ? SingleWidthWeaveStructure.fromJSON(weaveQualityJSON.weaveStructure) : null;\n } else if (!weaveQualityJSON.singleWidth && weaveQualityJSON.doubleWidth) {\n return null;\n } else {\n return SingleWidthWeaveStructure.fromJSON(weaveQualityJSON.singleWidth.weaveStructure);\n }\n }\n\n public static getBackwardsOverviewListSingleWidthWeaveStructure(weaveQualityJSON: any): OverviewListSingleWidthWeaveStructure {\n if (!weaveQualityJSON.singleWidth && !weaveQualityJSON.doubleWidth) {\n return OverviewListSingleWidthWeaveStructure.fromOldJSON(weaveQualityJSON);\n } else if (!weaveQualityJSON.singleWidth && weaveQualityJSON.doubleWidth) {\n return null;\n } else {\n return OverviewListSingleWidthWeaveStructure.fromJSON(weaveQualityJSON);\n }\n }\n\n public static fromOverviewListMachineQuality(overviewListMachineQuality: OverviewListMachineQuality): WeaveQuality {\n return new WeaveQuality(\n overviewListMachineQuality.id,\n overviewListMachineQuality.technicalName,\n overviewListMachineQuality.version,\n overviewListMachineQuality.type,\n overviewListMachineQuality.weaveStructureWidth,\n overviewListMachineQuality.singleWidth ? SingleWidthWeaveStructure.fromOverviewListSingleWidthWeaveStructure(overviewListMachineQuality.singleWidth) : null,\n overviewListMachineQuality.doubleWidth ? DoubleWidthWeaveStructure.fromOverviewListDoubleWidthWeaveStructure(overviewListMachineQuality.doubleWidth) : null,\n overviewListMachineQuality.reedDensityInDentsPerMM,\n overviewListMachineQuality.pickDensityInPicksPerMM,\n overviewListMachineQuality.weftDensityInDentsPerMM,\n 'technicalcode',\n overviewListMachineQuality.practicalPickDensityInPicksPerMM,\n [],\n [new PathWidth(1, 2, 3)],\n [],\n [],\n null,\n null,\n null,\n null,\n null,\n null,\n null,\n [],\n [],\n [],\n [],\n null,\n null,\n [],\n [],\n null,\n null,\n 0,\n [],\n false\n );\n }\n\n public static toOverviewListMachineQuality(weaveQuality: WeaveQuality): OverviewListMachineQuality {\n return new OverviewListMachineQuality(\n weaveQuality.id,\n weaveQuality.technicalName,\n weaveQuality.version,\n weaveQuality.type,\n weaveQuality.weaveStructureWidth ? weaveQuality.weaveStructureWidth : null,\n WeaveQuality.getBackwardsOverviewListSingleWidthWeaveStructure(weaveQuality),\n weaveQuality.doubleWidth ? OverviewListDoubleWidthWeaveStructure.fromJSON(weaveQuality) : null,\n weaveQuality.reedDensityInDentsPerMM,\n weaveQuality.pickDensityInPicksPerMM,\n weaveQuality.weftDensityInDentsPerMM,\n weaveQuality.practicalPickDensityInPicksPerMM,\n weaveQuality.pileHeightInMM,\n weaveQuality.applicableMachines,\n null,\n weaveQuality.used\n );\n }\n\n public static getTuftLengthExceptions(tuftLengthExceptions: any): TuftLengthException[] {\n return !isNil(tuftLengthExceptions)\n ? map(tuftLengthExceptions, (tuftLengthExceptionJSON: any) => {\n return TuftLengthException.fromJSON(tuftLengthExceptionJSON);\n })\n : null;\n }\n\n public static getIncorporationFactorExceptions(incorporationFactorExceptions: any): IncorporationFactorException[] {\n return !isNil(incorporationFactorExceptions)\n ? map(incorporationFactorExceptions, (incorporationFactorExceptionJSON: any) => {\n return IncorporationFactorException.fromJSON(incorporationFactorExceptionJSON);\n })\n : null;\n }\n\n public toJSON(): JSON {\n const machinesWithSpecificPickDensity = map(this._machinesWithSpecificPickDensity, (machineWithSpecificPickDensity: {machine: Equipment; specificPickDensity: number}) => {\n return {\n machineId: machineWithSpecificPickDensity.machine.id,\n specificPickDensity: machineWithSpecificPickDensity.specificPickDensity\n };\n });\n\n return {\n technicalName: this._technicalName,\n version: this._version,\n type: this._type,\n weaveStructureWidthType: this._weaveStructureWidth,\n singleWidth: this._singleWidth ? {weaveStructureId: this._singleWidth.weaveStructure.id} : null,\n weaveStructureId: this._singleWidth ? this._singleWidth.weaveStructure.id : null,\n weaveStructureName: this._singleWidth ? this._singleWidth.weaveStructure.name : this._doubleWidth.bottomWeaveStructure.name.slice(0, -1),\n doubleWidth: this._doubleWidth\n ? {\n topWeaveStructureId: this._doubleWidth.topWeaveStructure.id,\n bottomWeaveStructureId: this._doubleWidth.bottomWeaveStructure.id,\n backgroundWeaveStructureId: this._doubleWidth.backgroundWeaveStructure.id\n }\n : null,\n reedDensityInDentsPerMM: this._reedDensityInDentsPerMM ?? 0,\n theoreticalPickDensityInPicksPerMM: this._pickDensityInPicksPerMM ?? 0,\n weftDensityInDentsPerMM: this._weftDensityInDentsPerMM ?? 0,\n technicalCode: this._technicalCode,\n practicalPickDensityInPicksPerMM: this._practicalPickDensityInPicksPerMM ?? 0,\n commercialMachineQualities: map(this._commercialMachineQualities, (commercialMachineQuality: CommercialMachineQuality) => {\n return commercialMachineQuality.toJSON();\n }),\n pathWidths: this._pathWidths.map((pathWidth: PathWidth) => {\n return pathWidth.toJSON();\n }),\n applicableMachineIds: map(this._applicableMachines, 'id'),\n machinesWithSpecificPickDensity,\n pileHeightInMM: this._pileHeightInMM,\n buggyLengthMinInMM: this._buggyLengthMinInMM,\n buggyLengthMaxInMM: this._buggyLengthMaxInMM,\n tuftLengthInMM: this._tuftLengthInMM,\n incorporationFactor: this._incorporationFactor,\n tolerance: this._tolerance,\n picksPerHourMin: this._picksPerHourMin,\n tuftLengthPatternTypeExceptions: map(this._tuftLengthPatternTypeExceptions, (tuftLengthPatternTypeException: TuftLengthException) => {\n return tuftLengthPatternTypeException.toJSON();\n }),\n tuftLengthYarnTypeExceptions: map(this._tuftLengthYarnTypeExceptions, (tuftLengthYarnTypeException: TuftLengthException) => {\n return tuftLengthYarnTypeException.toJSON();\n }),\n incorporationFactorPatternTypeExceptions: map(this._incorporationFactorPatternTypeExceptions, (incorporationFactorPatternTypeException: IncorporationFactorException) => {\n return incorporationFactorPatternTypeException.toJSON();\n }),\n incorporationFactorYarnTypeExceptions: map(this._incorporationFactorYarnTypeExceptions, (incorporationFactorYarnTypeException: IncorporationFactorException) => {\n return incorporationFactorYarnTypeException.toJSON();\n }),\n used: this._used,\n nrColumnsToDropForWeftSelection: this._numberOfColumnsToDropForWeftSelection,\n jute: map(this.jute, (jute: Jute) => {\n return jute.toJSON();\n }),\n finishings: this.finishings.map((finishing: Finishing) => finishing.toJSON()),\n weftSelections: this.weftSelections.map((weftSelection: WeftSelection) => {\n return weftSelection.toJSON();\n }),\n juteGeneralSettings: this._juteGeneralSettings.toJSON(),\n yarnSetId: this.yarnSet ? this._yarnSet.id : null,\n yarnSetName: this.yarnSet ? this._yarnSet.name : null,\n missingDesignMarginInDents: this._missingDesignMarginInDents\n } as any as JSON;\n }\n}\n","export enum WeftSelectionType {\n TOP_RAPIER,\n MIDDLE_RAPIER,\n BOTTOM_RAPIER,\n PICK_DENSITY\n}\n","import {WeftSelectionType} from './weft-selection-type.enum';\n\nexport class WeftSelection {\n private _type: WeftSelectionType;\n private _position: number;\n private _numberOfColumns: number;\n private _possibleNumberOfColumns: number[];\n private _defaultPattern: string;\n\n public constructor(type: WeftSelectionType, position: number, numberOfColumns: number, possibleNumberOfColumns: number[], defaultPattern: string) {\n this._type = type;\n this._position = position;\n this._numberOfColumns = numberOfColumns;\n this._possibleNumberOfColumns = possibleNumberOfColumns;\n this._defaultPattern = defaultPattern;\n }\n\n public get type(): any {\n return this._type;\n }\n\n public get position(): number {\n return this._position;\n }\n\n public get numberOfColumns(): number {\n return this._numberOfColumns;\n }\n\n public get possibleNumberOfColumns(): number[] {\n return this._possibleNumberOfColumns;\n }\n\n public get defaultPattern(): string {\n return this._defaultPattern;\n }\n\n public static fromJSON(weftSelectionJSON: any): WeftSelection {\n return new WeftSelection(\n WeftSelectionType[`${weftSelectionJSON.type}`],\n weftSelectionJSON.position,\n weftSelectionJSON.selectedNrColumns,\n weftSelectionJSON.possibleNrColumns,\n weftSelectionJSON.defaultPattern\n );\n }\n\n public toJSON(): JSON {\n return {\n type: WeftSelectionType[this._type],\n position: this._position,\n selectedNrColumns: this._numberOfColumns,\n possibleNrColumns: this._possibleNumberOfColumns,\n defaultPattern: this._defaultPattern\n } as any as JSON;\n }\n}\n","export class MultiDeleteResponse {\n private _id: number;\n private _statusCode: number;\n\n public constructor(id: number, statusCode: number) {\n this._id = id;\n this._statusCode = statusCode;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get statusCode(): number {\n return this._statusCode;\n }\n\n public set statusCode(statusCode: number) {\n this._statusCode = statusCode;\n }\n\n public static fromJSON(multiDeleteResponseJSON: any): MultiDeleteResponse {\n return new MultiDeleteResponse(multiDeleteResponseJSON.id, multiDeleteResponseJSON.statusCode);\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {MatchingCriteria} from '@domain/utilities/tool/matching-criteria';\nimport {AssertionUtils, Color} from '@vdw/angular-component-library';\nimport {UnitOfMeasurement} from './unit-of-measurement.enum';\n\nexport class PlasticProduct {\n private _id: number;\n private _name: string;\n private _unitOfMeasurement: UnitOfMeasurement;\n private _weightInKg: number;\n private _standardEfficiency: number;\n private _standardCycleTimeInSeconds: number;\n private _speedUnit: StandardSpeed;\n private _description: string;\n private _mountTimeInMinutes: number;\n private _dismountTimeInMinutes: number;\n private _loadTimeInMinutes: number;\n private _unloadTimeInMinutes: number;\n private _used: boolean;\n private _productGroup: IdName;\n private _material: IdName;\n private _color: Color;\n private _customer: IdName;\n private _matchingCriteria: MatchingCriteria[];\n\n public constructor(\n id: number,\n name: string,\n unitOfMeasurement: UnitOfMeasurement,\n weightInKg: number,\n standardEfficiency: number,\n standardCycleTimeInSeconds: number,\n speedUnit: StandardSpeed,\n description: string,\n mountTimeInMinutes: number,\n dismountTimeInMinutes: number,\n loadTimeInMinutes: number,\n unloadTimeInMinutes: number,\n used: boolean = false,\n productGroup?: IdName,\n material?: IdName,\n color?: Color,\n customer?: IdName,\n matchingCriteria: MatchingCriteria[] = []\n ) {\n this._id = id;\n this._name = name;\n this._unitOfMeasurement = unitOfMeasurement;\n this._weightInKg = weightInKg;\n this._standardEfficiency = standardEfficiency;\n this._standardCycleTimeInSeconds = standardCycleTimeInSeconds;\n this._speedUnit = speedUnit;\n this._description = description;\n this._mountTimeInMinutes = mountTimeInMinutes;\n this._dismountTimeInMinutes = dismountTimeInMinutes;\n this._loadTimeInMinutes = loadTimeInMinutes;\n this._unloadTimeInMinutes = unloadTimeInMinutes;\n this._used = used;\n this._productGroup = productGroup;\n this._material = material;\n this._color = color;\n this._customer = customer;\n this._matchingCriteria = matchingCriteria;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get unitOfMeasurement(): UnitOfMeasurement {\n return this._unitOfMeasurement;\n }\n\n public set unitOfMeasurement(value: UnitOfMeasurement) {\n this._unitOfMeasurement = value;\n }\n\n public get weightInKg(): number {\n return this._weightInKg;\n }\n\n public set weightInKg(value: number) {\n this._weightInKg = value;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public set standardEfficiency(value: number) {\n this._standardEfficiency = value;\n }\n\n public get standardCycleTimeInSeconds(): number {\n return this._standardCycleTimeInSeconds;\n }\n\n public set standardCycleTimeInSeconds(value: number) {\n this._standardCycleTimeInSeconds = value;\n }\n\n public get speedUnit(): StandardSpeed {\n return this._speedUnit;\n }\n\n public set speedUnit(value: StandardSpeed) {\n this._speedUnit = value;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public set description(value: string) {\n this._description = value;\n }\n\n public get mountTimeInMinutes(): number {\n return this._mountTimeInMinutes;\n }\n\n public set mountTimeInMinutes(value: number) {\n this._mountTimeInMinutes = value;\n }\n\n public get dismountTimeInMinutes(): number {\n return this._dismountTimeInMinutes;\n }\n\n public set dismountTimeInMinutes(value: number) {\n this._dismountTimeInMinutes = value;\n }\n\n public get loadTimeInMinutes(): number {\n return this._loadTimeInMinutes;\n }\n\n public set loadTimeInMinutes(value: number) {\n this._loadTimeInMinutes = value;\n }\n\n public get unloadTimeInMinutes(): number {\n return this._unloadTimeInMinutes;\n }\n\n public set unloadTimeInMinutes(value: number) {\n this._unloadTimeInMinutes = value;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(value: boolean) {\n this._used = value;\n }\n\n public get productGroup(): IdName {\n return this._productGroup;\n }\n\n public set productGroup(value: IdName) {\n this._productGroup = value;\n }\n\n public get material(): IdName {\n return this._material;\n }\n\n public set material(value: IdName) {\n this._material = value;\n }\n\n public get color(): Color {\n return this._color;\n }\n\n public set color(value: Color) {\n this._color = value;\n }\n\n public get matchingCriteria(): MatchingCriteria[] {\n return this._matchingCriteria;\n }\n\n public set matchingCriteria(value: MatchingCriteria[]) {\n this._matchingCriteria = value;\n }\n\n public get customer(): IdName {\n return this._customer;\n }\n\n public set customer(value: IdName) {\n this._customer = value;\n }\n\n public static fromJSON(plasticProductJSON: any): PlasticProduct {\n return new PlasticProduct(\n plasticProductJSON.id,\n plasticProductJSON.name,\n plasticProductJSON.unitOfMeasurement,\n plasticProductJSON.weightInKg,\n plasticProductJSON.standardEfficiency,\n plasticProductJSON.standardCycleTimeInSeconds,\n plasticProductJSON.speedUnit,\n plasticProductJSON.description,\n plasticProductJSON.mountTimeInMinutes,\n plasticProductJSON.dismountTimeInMinutes,\n plasticProductJSON.loadTimeInMinutes,\n plasticProductJSON.unloadTimeInMinutes,\n plasticProductJSON.used,\n AssertionUtils.isNullOrUndefined(plasticProductJSON.productGroup) ? null : IdName.fromJSON(plasticProductJSON.productGroup),\n AssertionUtils.isNullOrUndefined(plasticProductJSON.material) ? null : IdName.fromJSON(plasticProductJSON.material),\n AssertionUtils.isNullOrUndefined(plasticProductJSON.color) ? null : Color.fromJSON(plasticProductJSON.color),\n AssertionUtils.isNullOrUndefined(plasticProductJSON.customer) ? null : IdName.fromJSON(plasticProductJSON.customer),\n plasticProductJSON.matchingCriteria.map((matchingCriteriaJSON: any) => MatchingCriteria.fromJSON(matchingCriteriaJSON))\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n unitOfMeasurement: this._unitOfMeasurement,\n weightInKg: this._weightInKg,\n standardEfficiency: this._standardEfficiency,\n standardCycleTimeInSeconds: this._standardCycleTimeInSeconds,\n speedUnit: this._speedUnit,\n description: this._description,\n mountTimeInMinutes: this._mountTimeInMinutes,\n dismountTimeInMinutes: this._dismountTimeInMinutes,\n loadTimeInMinutes: this._loadTimeInMinutes,\n unloadTimeInMinutes: this._unloadTimeInMinutes,\n used: this._used,\n productGroupId: this._productGroup?.id,\n materialId: this._material?.id,\n colorId: this._color?.id,\n customerId: this._customer?.id,\n matchingCriteria: this._matchingCriteria.map((matchingCriteria: MatchingCriteria) => matchingCriteria.toJSON())\n } as any as JSON;\n }\n}\n","export enum UnitOfMeasurement {\n METER = 'METER',\n PIECES = 'PIECES'\n}\n","import {Gauge} from '@domain/machine/gauge';\nimport {WeaveProduct} from '../weave-product/weave-product';\n\nexport class TuftProduct {\n private _id: number;\n private _name: string;\n private _version: number;\n private _description: string;\n private _color: string;\n private _blend: string;\n private _widthInCm: number;\n private _gauge: Gauge;\n private _stitchRateInStitchesPerCm: number;\n private _pileHeightInCm: number;\n private _weightInGramsPerMeter: number;\n private _primaryBacking: WeaveProduct;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _tuftingNotes: string;\n private _backingNotes: string;\n private _used: boolean;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n description: string,\n color: string,\n blend: string,\n widthInCm: number,\n gauge: Gauge,\n stitchRateInStitchesPerCm: number,\n pileHeightInCm: number,\n weightInGramsPerMeter: number,\n primaryBacking: WeaveProduct,\n standardSpeed: number,\n standardEfficiency: number,\n tuftingNotes: string,\n backingNotes: string,\n used: boolean\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._description = description;\n this._color = color;\n this._blend = blend;\n this._widthInCm = widthInCm;\n this._gauge = gauge;\n this._stitchRateInStitchesPerCm = stitchRateInStitchesPerCm;\n this._pileHeightInCm = pileHeightInCm;\n this._weightInGramsPerMeter = weightInGramsPerMeter;\n this._primaryBacking = primaryBacking;\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._tuftingNotes = tuftingNotes;\n this._backingNotes = backingNotes;\n this._used = used;\n }\n\n public static fromJSON(tuftProductJSON: any): TuftProduct {\n return new TuftProduct(\n tuftProductJSON.id,\n tuftProductJSON.name,\n tuftProductJSON.version,\n tuftProductJSON.description,\n tuftProductJSON.color,\n tuftProductJSON.blend,\n tuftProductJSON.widthInCm,\n Gauge.fromJSON(tuftProductJSON.gauge),\n tuftProductJSON.stitchRateInStitchesPerCm,\n tuftProductJSON.pileHeightInCm,\n tuftProductJSON.weightInGramsPerMeter,\n WeaveProduct.fromJSON(tuftProductJSON.primaryBacking),\n tuftProductJSON.standardSpeed,\n tuftProductJSON.standardEfficiency,\n tuftProductJSON.tuftingNotes,\n tuftProductJSON.backingNotes,\n tuftProductJSON.used\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version,\n description: this._description,\n color: this._color,\n blend: this._blend,\n widthInCm: this._widthInCm,\n gaugeId: this._gauge.id,\n stitchRateInStitchesPerCm: this._stitchRateInStitchesPerCm,\n pileHeightInCm: this._pileHeightInCm,\n weightInGramsPerMeter: this._weightInGramsPerMeter,\n primaryBackingId: this._primaryBacking.id,\n standardSpeed: this._standardSpeed,\n standardEfficiency: this._standardEfficiency,\n tuftingNotes: this._tuftingNotes,\n backingNotes: this._backingNotes,\n used: this._used\n } as any as JSON;\n }\n\n public static createEmptyTuftProduct(): TuftProduct {\n return new TuftProduct(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, false);\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public set version(value: number) {\n this._version = value;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public set description(value: string) {\n this._description = value;\n }\n\n public get color(): string {\n return this._color;\n }\n\n public set color(value: string) {\n this._color = value;\n }\n\n public get blend(): string {\n return this._blend;\n }\n\n public set blend(value: string) {\n this._blend = value;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public set widthInCm(value: number) {\n this._widthInCm = value;\n }\n\n public get gauge(): Gauge {\n return this._gauge;\n }\n\n public set gauge(value: Gauge) {\n this._gauge = value;\n }\n\n public get stitchRateInStitchesPerCm(): number {\n return this._stitchRateInStitchesPerCm;\n }\n\n public set stitchRateInStitchesPerCm(value: number) {\n this._stitchRateInStitchesPerCm = value;\n }\n\n public get pileHeightInCm(): number {\n return this._pileHeightInCm;\n }\n\n public set pileHeightInCm(value: number) {\n this._pileHeightInCm = value;\n }\n\n public get weightInGramsPerMeter(): number {\n return this._weightInGramsPerMeter;\n }\n\n public set weightInGramsPerMeter(value: number) {\n this._weightInGramsPerMeter = value;\n }\n\n public get primaryBacking(): WeaveProduct {\n return this._primaryBacking;\n }\n\n public set primaryBacking(value: WeaveProduct) {\n this._primaryBacking = value;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public set standardSpeed(value: number) {\n this._standardSpeed = value;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public set standardEfficiency(value: number) {\n this._standardEfficiency = value;\n }\n\n public get tuftingNotes(): string {\n return this._tuftingNotes;\n }\n\n public set tuftingNotes(value: string) {\n this._tuftingNotes = value;\n }\n\n public get backingNotes(): string {\n return this._backingNotes;\n }\n\n public set backingNotes(value: string) {\n this._backingNotes = value;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(value: boolean) {\n this._used = value;\n }\n}\n","import {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\n\nexport class WeaveProduct {\n private _id: number;\n private _name: string;\n private _version: number;\n private _widthInCm: number;\n private _pickDensityInPicksPerCm: number;\n private _standardSpeedInRotationsPerMinute: number;\n private _standardEfficiencyInPercentage: number;\n private _numberOfFeeders: number;\n private _numberOfShafts: number;\n private _description?: string;\n private _used: boolean;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n widthInCm: number,\n pickDensityInPicksPerCm: number,\n standardSpeedInRotationsPerMinute: number,\n standardEfficiencyInPercentage: number,\n numberOfFeeders: number,\n numberOfShafts: number,\n description: string,\n used: boolean\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._widthInCm = widthInCm;\n this._pickDensityInPicksPerCm = pickDensityInPicksPerCm;\n this._standardSpeedInRotationsPerMinute = standardSpeedInRotationsPerMinute;\n this._standardEfficiencyInPercentage = standardEfficiencyInPercentage;\n this._numberOfFeeders = numberOfFeeders;\n this._numberOfShafts = numberOfShafts;\n this._description = description;\n this._used = used;\n }\n\n public static fromOverviewListWeaveProduct(overviewListWeaveProduct: OverviewListWeaveProduct): WeaveProduct {\n return new WeaveProduct(\n overviewListWeaveProduct.id,\n overviewListWeaveProduct.name,\n overviewListWeaveProduct.version,\n overviewListWeaveProduct.widthInCm,\n overviewListWeaveProduct.pickDensityInPicksPerCm,\n overviewListWeaveProduct.standardSpeedInRotationsPerMinute,\n overviewListWeaveProduct.standardEfficiencyInPercentage,\n overviewListWeaveProduct.numberOfFeeders,\n overviewListWeaveProduct.numberOfShafts,\n null,\n null\n );\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public get pickDensityInPicksPerCm(): number {\n return this._pickDensityInPicksPerCm;\n }\n\n public get standardSpeedInRotationsPerMinute(): number {\n return this._standardSpeedInRotationsPerMinute;\n }\n\n public get standardEfficiencyInPercentage(): number {\n return this._standardEfficiencyInPercentage;\n }\n\n public get numberOfFeeders(): number {\n return this._numberOfFeeders;\n }\n\n public get numberOfShafts(): number {\n return this._numberOfShafts;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public static fromJSON(weaveProductJSON: any): WeaveProduct {\n return new WeaveProduct(\n weaveProductJSON.id,\n weaveProductJSON.name,\n weaveProductJSON.version,\n weaveProductJSON.widthInCm,\n weaveProductJSON.pickDensityInPicksPerCm,\n weaveProductJSON.standardSpeedInRotationsPerMinute,\n weaveProductJSON.standardEfficiencyInPercentage,\n weaveProductJSON.numberOfFeeders,\n weaveProductJSON.numberOfShafts,\n weaveProductJSON.description,\n weaveProductJSON.used\n );\n }\n\n public static createEmptyWeaveProduct(): WeaveProduct {\n return new WeaveProduct(null, null, null, null, null, null, null, null, null, null, null);\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version,\n widthInCm: this._widthInCm,\n pickDensityInPicksPerCm: this._pickDensityInPicksPerCm,\n standardSpeedInRotationsPerMinute: this._standardSpeedInRotationsPerMinute,\n standardEfficiencyInPercentage: this._standardEfficiencyInPercentage,\n numberOfFeeders: this._numberOfFeeders,\n numberOfShafts: this._numberOfShafts,\n description: this._description,\n used: this._used\n } as any as JSON;\n }\n}\n","import {OverviewListDoubleWidthWeaveStructure} from './overview-list-double-width-weave-structure';\nimport {WeaveStructureForMachineQuality} from './weave-structure-for-machine-quality';\n\nexport class DoubleWidthWeaveStructure {\n private readonly _id?: number;\n private readonly _topWeaveStructure: WeaveStructureForMachineQuality;\n private readonly _bottomWeaveStructure: WeaveStructureForMachineQuality;\n private readonly _backgroundWeaveStructure: WeaveStructureForMachineQuality;\n\n public constructor(\n topWeaveStructure: WeaveStructureForMachineQuality,\n bottomWeaveStructure: WeaveStructureForMachineQuality,\n backgroundWeaveStructure: WeaveStructureForMachineQuality,\n id?: number\n ) {\n this._id = id;\n this._topWeaveStructure = topWeaveStructure;\n this._bottomWeaveStructure = bottomWeaveStructure;\n this._backgroundWeaveStructure = backgroundWeaveStructure;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get topWeaveStructure(): WeaveStructureForMachineQuality {\n return this._topWeaveStructure;\n }\n\n public get bottomWeaveStructure(): WeaveStructureForMachineQuality {\n return this._bottomWeaveStructure;\n }\n\n public get backgroundWeaveStructure(): WeaveStructureForMachineQuality {\n return this._backgroundWeaveStructure;\n }\n\n public static fromJSON(doubleWidthWeaveStructureJSON: any): DoubleWidthWeaveStructure {\n return doubleWidthWeaveStructureJSON.doubleWidth\n ? new DoubleWidthWeaveStructure(\n WeaveStructureForMachineQuality.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.topWeaveStructure),\n WeaveStructureForMachineQuality.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.bottomWeaveStructure),\n WeaveStructureForMachineQuality.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.backgroundWeaveStructure),\n doubleWidthWeaveStructureJSON.doubleWidth.id\n )\n : null;\n }\n\n public static fromOverviewListDoubleWidthWeaveStructure(overviewListDoubleWidthWeaveStructure: OverviewListDoubleWidthWeaveStructure): DoubleWidthWeaveStructure {\n return new DoubleWidthWeaveStructure(\n WeaveStructureForMachineQuality.fromJSON(overviewListDoubleWidthWeaveStructure.topWeaveStructure),\n WeaveStructureForMachineQuality.fromJSON(overviewListDoubleWidthWeaveStructure.bottomWeaveStructure),\n WeaveStructureForMachineQuality.fromJSON(overviewListDoubleWidthWeaveStructure.backgroundWeaveStructure)\n );\n }\n}\n","import {IdNameVersion} from '@domain/id-name-version';\n\nexport class OverviewListDoubleWidthWeaveStructure {\n private readonly _topWeaveStructure: IdNameVersion;\n private readonly _bottomWeaveStructure: IdNameVersion;\n private readonly _backgroundWeaveStructure: IdNameVersion;\n\n public constructor(topWeaveStructure: IdNameVersion, bottomWeaveStructure: IdNameVersion, backgroundWeaveStructure: IdNameVersion) {\n this._topWeaveStructure = topWeaveStructure;\n this._bottomWeaveStructure = bottomWeaveStructure;\n this._backgroundWeaveStructure = backgroundWeaveStructure;\n }\n\n public get topWeaveStructure(): IdNameVersion {\n return this._topWeaveStructure;\n }\n\n public get bottomWeaveStructure(): IdNameVersion {\n return this._bottomWeaveStructure;\n }\n\n public get backgroundWeaveStructure(): IdNameVersion {\n return this._backgroundWeaveStructure;\n }\n\n public static fromJSON(doubleWidthWeaveStructureJSON: any): OverviewListDoubleWidthWeaveStructure {\n return new OverviewListDoubleWidthWeaveStructure(\n IdNameVersion.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.topWeaveStructure),\n IdNameVersion.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.bottomWeaveStructure),\n IdNameVersion.fromJSON(doubleWidthWeaveStructureJSON.doubleWidth.backgroundWeaveStructure)\n );\n }\n}\n","import {IdNameVersion} from '@domain/id-name-version';\n\nexport class IdNameVersionPosition extends IdNameVersion {\n private readonly _numberOfCreelPositions: number;\n\n public constructor(id: number, name: string, version: number, numberOfCreelPositions: number) {\n super(id, name, version);\n this._numberOfCreelPositions = numberOfCreelPositions;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public static fromJSON(object: any): IdNameVersionPosition {\n return new IdNameVersionPosition(object.id, object.name, object.version, object.numberOfCreelPositions);\n }\n}\n","import {IdNameVersionPosition} from './id-name-version-position';\n\nexport class OverviewListSingleWidthWeaveStructure {\n private readonly _weaveStructure: IdNameVersionPosition;\n\n public constructor(weaveStructure: IdNameVersionPosition) {\n this._weaveStructure = weaveStructure;\n }\n\n public get weaveStructure(): IdNameVersionPosition {\n return this._weaveStructure;\n }\n\n public static fromJSON(singleWidthWeaveStructureJSON: any): OverviewListSingleWidthWeaveStructure {\n return new OverviewListSingleWidthWeaveStructure(IdNameVersionPosition.fromJSON(singleWidthWeaveStructureJSON.singleWidth.weaveStructure));\n }\n\n public static fromOldJSON(singleWidthWeaveStructureJSON: any): OverviewListSingleWidthWeaveStructure {\n return new OverviewListSingleWidthWeaveStructure(IdNameVersionPosition.fromJSON(singleWidthWeaveStructureJSON.weaveStructure));\n }\n}\n","import {OverviewListSingleWidthWeaveStructure} from './overview-list-single-width-weave-structure';\nimport {WeaveStructureForMachineQuality} from './weave-structure-for-machine-quality';\n\nexport class SingleWidthWeaveStructure {\n private _weaveStructure: WeaveStructureForMachineQuality;\n\n public constructor(weaveStructure: WeaveStructureForMachineQuality) {\n this._weaveStructure = weaveStructure;\n }\n\n public get weaveStructure(): WeaveStructureForMachineQuality {\n return this._weaveStructure;\n }\n\n public set weaveStructure(value: WeaveStructureForMachineQuality) {\n this._weaveStructure = value;\n }\n\n public static fromJSON(singleWidthWeaveStructureJSON: any): SingleWidthWeaveStructure {\n return new SingleWidthWeaveStructure(WeaveStructureForMachineQuality.fromJSON(singleWidthWeaveStructureJSON));\n }\n\n public static fromOverviewListSingleWidthWeaveStructure(overviewListSingleWidthWeaveStructure: OverviewListSingleWidthWeaveStructure): SingleWidthWeaveStructure {\n return new SingleWidthWeaveStructure(WeaveStructureForMachineQuality.fromJSON(overviewListSingleWidthWeaveStructure.weaveStructure));\n }\n}\n","import {Pattern} from '@domain/pattern';\n\nexport class WeavePattern {\n private _id: number;\n private readonly _pattern: Pattern;\n private readonly _patternNumber: number;\n private readonly _patternTemplate: number;\n private readonly _type: string;\n private readonly _comment: string;\n private readonly _weavingChores: number[];\n private readonly _widthInDents: number;\n private readonly _widthInFrames: number;\n private readonly _heightInPicks: number;\n\n public constructor(\n id: number,\n pattern: Pattern,\n patternNumber: number,\n patternTemplate: number,\n type: string,\n comment: string,\n weavingChores?: number[],\n widthInDents?: number,\n widthInFrames?: number,\n heightInPicks?: number\n ) {\n this._id = id;\n this._pattern = pattern;\n this._patternNumber = patternNumber;\n this._patternTemplate = patternTemplate;\n this._type = type;\n this._comment = comment;\n this._weavingChores = weavingChores;\n this._widthInDents = widthInDents;\n this._widthInFrames = widthInFrames;\n this._heightInPicks = heightInPicks;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get pattern(): Pattern {\n return this._pattern;\n }\n\n public get patternNumber(): number {\n return this._patternNumber;\n }\n\n public get patternTemplate(): number {\n return this._patternTemplate;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public get weavingChores(): number[] {\n return this._weavingChores;\n }\n\n public get widthInDents(): number {\n return this._widthInDents;\n }\n\n public get widthInFrames(): number {\n return this._widthInFrames;\n }\n\n public get heightInPicks(): number {\n return this._heightInPicks;\n }\n\n public static fromJSON(weavePatternJSON: any): WeavePattern {\n return new WeavePattern(\n weavePatternJSON.id,\n weavePatternJSON.pattern ? Pattern.fromJSON(weavePatternJSON.pattern) : null,\n weavePatternJSON.patternNumber,\n weavePatternJSON.patternTemplate,\n weavePatternJSON.type,\n weavePatternJSON.comment,\n weavePatternJSON.weavingChores?.length > 0 ? weavePatternJSON.weavingChores : null,\n weavePatternJSON.widthInDents,\n weavePatternJSON.widthInFrames,\n weavePatternJSON.heightInPicks\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n pattern: this.pattern.toJSON(),\n patternNumber: this.patternNumber,\n patternTemplate: this.patternTemplate,\n type: this.type,\n comment: this.comment\n } as any as JSON;\n }\n}\n","export class WeaveStructureDetails {\n public factorM2: number;\n public dentRepeat: number;\n public sendRepeat: number;\n public picksPerColorLine: number;\n\n public rapier: number;\n public extraInfoType: string;\n public creelPositions: number;\n public jacquardPositions: number;\n public hpLp: string;\n public ratio: number;\n public incFloatPoint: string;\n public bb: string;\n public bt: string;\n public tb: string;\n public tt: string;\n\n public constructor(\n factorM2: number,\n dentRepeat: number,\n sendRepeat: number,\n picksPerColorLine: number,\n rapier: number,\n extraInfoType: string,\n creelPositions: number,\n jacquardPositions: number,\n hpLp: string,\n ratio: number,\n incFloatPoint: string,\n bb: string,\n bt: string,\n tb: string,\n tt: string\n ) {\n this.factorM2 = factorM2;\n this.dentRepeat = dentRepeat;\n this.sendRepeat = sendRepeat;\n this.picksPerColorLine = picksPerColorLine;\n this.rapier = rapier;\n this.extraInfoType = extraInfoType;\n this.creelPositions = creelPositions;\n this.jacquardPositions = jacquardPositions;\n this.hpLp = hpLp;\n this.ratio = ratio;\n this.incFloatPoint = incFloatPoint;\n this.bb = bb;\n this.bt = bt;\n this.tb = tb;\n this.tt = tt;\n }\n\n public static createEmptyWeaveStructureDetails(): WeaveStructureDetails {\n return new WeaveStructureDetails(null, null, null, null, null, null, null, null, null, null, null, null, null, null, null);\n }\n\n public static fromJSON(weaveStructureDetailsJSON: any): WeaveStructureDetails {\n return new WeaveStructureDetails(\n weaveStructureDetailsJSON.factorM2,\n weaveStructureDetailsJSON.dentRepeat,\n weaveStructureDetailsJSON.sendRepeat,\n weaveStructureDetailsJSON.picksPerColorLine,\n weaveStructureDetailsJSON.rapier,\n weaveStructureDetailsJSON.extraInfoType,\n weaveStructureDetailsJSON.creelPositions,\n weaveStructureDetailsJSON.jacquardPositions,\n weaveStructureDetailsJSON.hpLp,\n weaveStructureDetailsJSON.ratio,\n weaveStructureDetailsJSON.incFloatPoint,\n weaveStructureDetailsJSON.bb,\n weaveStructureDetailsJSON.bt,\n weaveStructureDetailsJSON.tb,\n weaveStructureDetailsJSON.tt\n );\n }\n\n public toJSON(): JSON {\n return {\n factorM2: this.factorM2,\n dentRepeat: this.dentRepeat,\n sendRepeat: this.sendRepeat,\n picksPerColorLine: this.picksPerColorLine,\n rapier: this.rapier,\n extraInfoType: this.extraInfoType,\n creelPositions: this.creelPositions,\n jacquardPositions: this.jacquardPositions,\n hpLp: this.hpLp,\n ratio: this.ratio,\n incFloatPoint: this.incFloatPoint,\n bb: this.bb,\n bt: this.bt,\n tb: this.tb,\n tt: this.tt\n } as any as JSON;\n }\n}\n","import {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {StringUtils} from '@vdw/angular-component-library';\n\nexport class WeaveStructureForMachineQuality {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n private readonly _type: string;\n private readonly _description: string;\n private readonly _sendRepeat: number;\n private _qualityType: WeaveQualityType;\n private readonly _fromVandewiele: boolean;\n private readonly _releaseNotes: string;\n private readonly _dateModified: Date;\n private readonly _picksPerColorLine: number;\n private readonly _nrSolenoidsPerPile: number;\n private readonly _groundYarns: number;\n private readonly _pileYarns: number;\n private readonly _dentRepeat: number;\n private readonly _numberOfCreelPositions: number;\n private readonly _numberOfCloths: number;\n private readonly _numberOfGroundYarns: number;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n type: string,\n description: string,\n sendRepeat: number,\n qualityType: WeaveQualityType,\n fromVandewiele: boolean,\n releaseNotes: string = null,\n dateModified: Date = null,\n picksPerColorLine: number = null,\n numberOfCreelPositions: number = null,\n nrSolenoidsPerPile: number = 1,\n groundYarns: number = 1,\n pileYarns: number = 1,\n dentReport: number = 1,\n numberOfCloths: number = 2,\n numberOfGroundYarns: number = 0\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._type = type;\n this._description = description;\n this._sendRepeat = sendRepeat;\n this._qualityType = qualityType;\n this._fromVandewiele = fromVandewiele;\n this._releaseNotes = releaseNotes;\n this._dateModified = dateModified;\n this._picksPerColorLine = picksPerColorLine;\n this._nrSolenoidsPerPile = nrSolenoidsPerPile;\n this._groundYarns = groundYarns;\n this._pileYarns = pileYarns;\n this._dentRepeat = dentReport;\n this._numberOfCreelPositions = numberOfCreelPositions;\n this._numberOfCloths = numberOfCloths;\n this._numberOfGroundYarns = numberOfGroundYarns;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get fromVandewiele(): boolean {\n return this._fromVandewiele;\n }\n\n public get releaseNotes(): string {\n return this._releaseNotes;\n }\n\n public get dateModified(): Date {\n return this._dateModified;\n }\n\n public get picksPerColorLine(): number {\n return this._picksPerColorLine;\n }\n\n public get nrSolenoidsPerPile(): number {\n return this._nrSolenoidsPerPile;\n }\n\n public get groundYarns(): number {\n return this._groundYarns;\n }\n\n public get pileYarns(): number {\n return this._pileYarns;\n }\n\n public get dentRepeat(): number {\n return this._dentRepeat;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public get sendRepeat(): number {\n return this._sendRepeat;\n }\n\n public get qualityType(): WeaveQualityType {\n return this._qualityType;\n }\n\n public set qualityType(value: WeaveQualityType) {\n this._qualityType = value;\n }\n\n public get numberOfCloths(): number {\n return this._numberOfCloths;\n }\n\n public get numberOfGroundYarns(): number {\n return this._numberOfGroundYarns;\n }\n\n public static fromShortJSON(weaveStructureJSON: any): WeaveStructureForMachineQuality {\n return new WeaveStructureForMachineQuality(\n weaveStructureJSON.id,\n weaveStructureJSON.name,\n weaveStructureJSON.version,\n weaveStructureJSON.type,\n weaveStructureJSON.description,\n weaveStructureJSON.sendRepeat,\n weaveStructureJSON.qualityType,\n weaveStructureJSON.fromVandewiele,\n weaveStructureJSON.releaseNotes,\n StringUtils.toDate(weaveStructureJSON.dateModified),\n weaveStructureJSON.picksPerColorLine,\n weaveStructureJSON.numberOfCreelPositions ?? null\n );\n }\n\n public static fromJSON(weaveStructureJSON: any): WeaveStructureForMachineQuality {\n return new WeaveStructureForMachineQuality(\n weaveStructureJSON.id,\n weaveStructureJSON.name,\n weaveStructureJSON.version,\n weaveStructureJSON.type ?? null,\n weaveStructureJSON.description ?? null,\n weaveStructureJSON.sendRepeat ?? null,\n weaveStructureJSON.qualityType ?? null,\n weaveStructureJSON.fromVandewiele ?? false,\n weaveStructureJSON.releaseNotes ?? null,\n StringUtils.toDate(weaveStructureJSON.dateModified),\n weaveStructureJSON.picksPerColorLine ?? null,\n weaveStructureJSON.numberOfCreelPositions ?? null,\n weaveStructureJSON.nrSolenoidsPerPile ?? 1,\n weaveStructureJSON.groundYarns ?? 1,\n weaveStructureJSON.pileYarns ?? 1,\n weaveStructureJSON.dentRepeat ?? 1,\n weaveStructureJSON.numberOfCloths ?? 2,\n weaveStructureJSON.numberOfGroundYarns ?? 0\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {WeavePattern} from '@domain/textile-data/weave-structure/weave-pattern/weave-pattern';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {OverviewListWeaveStructure} from '@presentation/pages/textile-data/weave-structure/overview/overview-list-weave-structure';\nimport {WeaveStructureDetails} from './weave-structure-details';\n\nexport class WeaveStructure extends OverviewListWeaveStructure {\n public used: boolean;\n public details: WeaveStructureDetails;\n public qualityType: WeaveQualityType;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n type: string,\n description: string,\n fileName: string,\n releaseNotes: string,\n used: boolean,\n fromVandewiele: boolean,\n patterns: WeavePattern[],\n details: WeaveStructureDetails,\n qualityType: WeaveQualityType\n ) {\n super(id, name, version, type, description, fileName, fromVandewiele, qualityType, releaseNotes, patterns);\n this.used = used;\n this.details = details;\n }\n\n public static createEmptyWeaveStructure(): WeaveStructure {\n return new WeaveStructure(null, null, null, null, null, null, null, null, true, [], WeaveStructureDetails.createEmptyWeaveStructureDetails(), null);\n }\n\n public static fromJSON(weaveStructureJSON: any): WeaveStructure {\n return new WeaveStructure(\n weaveStructureJSON.id,\n weaveStructureJSON.name,\n weaveStructureJSON.version,\n weaveStructureJSON.type,\n weaveStructureJSON.description,\n weaveStructureJSON.fileName,\n weaveStructureJSON.releaseNotes,\n weaveStructureJSON.used,\n weaveStructureJSON.fromVandewiele,\n weaveStructureJSON.patterns ? weaveStructureJSON.patterns.map((weavePattern: WeavePattern) => WeavePattern.fromJSON(weavePattern)) : null,\n weaveStructureJSON.details ? WeaveStructureDetails.fromJSON(weaveStructureJSON.details) : null,\n weaveStructureJSON.qualityType\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n type: this.type,\n description: this.description,\n fileName: this.fileName,\n releaseNotes: this.releaseNotes,\n used: this.used,\n fromVandewiele: this.fromVandewiele,\n patterns: this.patterns.map((weavePattern: WeavePattern) => weavePattern.toJSON()),\n details: this.details.toJSON(),\n qualityType: this.qualityType\n } as any as JSON;\n }\n}\n","import {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {isNil} from 'lodash-es';\n\nexport class WeftColoredYarnSet extends OverviewListColoredYarnSet {\n private readonly _colorSet: ColorSet;\n private readonly _yarnSet: YarnSet;\n\n public constructor(id: number, name: string, colorSet: ColorSet, yarnSet: YarnSet, used: boolean) {\n const overviewListColorSet: OverviewListColorSet = !isNil(colorSet) ? OverviewListColorSet.fromColorSet(colorSet) : null;\n const overviewListYarnSet: OverviewListYarnSet = !isNil(yarnSet) ? OverviewListYarnSet.fromYarnSet(yarnSet) : null;\n\n super(id, name, overviewListColorSet, overviewListYarnSet, used);\n this._colorSet = colorSet;\n this._yarnSet = yarnSet;\n }\n\n public get colorSet(): ColorSet {\n return this._colorSet;\n }\n\n public get yarnSet(): YarnSet {\n return this._yarnSet;\n }\n\n public static createEmptyWeftColoredYarnSet(): WeftColoredYarnSet {\n return new WeftColoredYarnSet(null, null, null, null, null);\n }\n\n public static fromJSON(weftColoredYarnSetJSON: any): WeftColoredYarnSet {\n return new WeftColoredYarnSet(\n weftColoredYarnSetJSON.id,\n weftColoredYarnSetJSON.name,\n ColorSet.fromJSON(weftColoredYarnSetJSON.colorSet),\n YarnSet.fromJSON(weftColoredYarnSetJSON.yarnSet),\n weftColoredYarnSetJSON.used\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n colorSetId: this.colorSet.id,\n yarnSetId: this.yarnSet.id\n } as any as JSON;\n }\n}\n","import {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {fill, map} from 'lodash-es';\nimport {HorizontalPositionOfCreelPositionType} from '../creel/horizontal-position-of-creel-position-type.enum';\n\nexport class HorizontalPositionOfYarnTypeCreelPosition extends HorizontalPositionOfCreelPosition {\n private _yarnType: OverviewListYarnType;\n\n public constructor(amount: number, yarnType: OverviewListYarnType, isSelected: boolean = false) {\n super(HorizontalPositionOfCreelPositionType.YARN_TYPE, amount, isSelected);\n\n this._yarnType = yarnType;\n }\n\n public get yarnType(): OverviewListYarnType {\n return this._yarnType;\n }\n\n public static fromJSON(yarnTypeCreelPositionJSON: any): HorizontalPositionOfYarnTypeCreelPosition {\n return new HorizontalPositionOfYarnTypeCreelPosition(\n yarnTypeCreelPositionJSON.amount,\n new OverviewListYarnType(\n yarnTypeCreelPositionJSON.single.id,\n yarnTypeCreelPositionJSON.single.name,\n null,\n null,\n map(yarnTypeCreelPositionJSON.single.threads, (threadJSON: any) => {\n return {rawMaterial: threadJSON.rawMaterial};\n })\n )\n );\n }\n\n public toJSON(): JSON {\n return {\n type: HorizontalPositionOfCreelPositionType[this.type],\n id: this.yarnType.id,\n amount: this.amount\n } as any as JSON;\n }\n\n public getAmountOfDentsInHorizontalPositionOfCreelPosition(): number {\n return this.amount;\n }\n\n public getPatternForHorizontalPositionOfCreelPosition(): OverviewListYarnType[] {\n return fill(new Array(this.amount), this.yarnType);\n }\n}\n","import {MaterialSet} from '@domain/textile-data/colored-yarn-set/material-set';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {map, size} from 'lodash-es';\n\nexport class YarnSet extends MaterialSet {\n public constructor(id: number, name: string, creelPositions: CreelPosition[], used: boolean) {\n super(id, name, creelPositions, used);\n }\n\n public static fromJSON(yarnSetJSON: any): YarnSet {\n return new YarnSet(\n yarnSetJSON.id,\n yarnSetJSON.name,\n map(yarnSetJSON.creelPositions, (creelPositionJSON: any) => {\n return CreelPosition.fromJSON(creelPositionJSON);\n }),\n yarnSetJSON.used\n );\n }\n\n public static createEmptyYarnSet(): YarnSet {\n return new YarnSet(null, null, [], null);\n }\n\n public toJSON(): JSON {\n return {\n name: this.name,\n creelPositions: map(this.creelPositions, (creelPosition: CreelPosition, indexOfCreelPosition: number) => {\n return {\n creelPosition: indexOfCreelPosition + 1,\n creel: creelPosition.toJSON()\n };\n }),\n numberOfYarns: this.creelPositions.flatMap((creelPosition: CreelPosition) => creelPosition.horizontalPositionsOfCreelPosition).length\n } as any as JSON;\n }\n\n public getSizeOfCreelPositions(): number {\n return size(this.creelPositions);\n }\n\n public isColorSet(): boolean {\n return false;\n }\n\n public isYarnSet(): boolean {\n return true;\n }\n}\n","import {IdName} from '@domain/id-name';\n\nexport class Thread {\n private _yarnCount: number;\n private _spaceDye: boolean;\n private _rawMaterialView: IdName;\n\n public constructor(yarnCount: number, spaceDye: boolean, rawMaterialView: IdName) {\n this._yarnCount = yarnCount;\n this._spaceDye = spaceDye;\n this._rawMaterialView = rawMaterialView;\n }\n\n public get yarnCount(): number {\n return this._yarnCount;\n }\n\n public get spaceDye(): boolean {\n return this._spaceDye;\n }\n\n public get rawMaterialView(): IdName {\n return this._rawMaterialView;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {Unit} from '@vdw/angular-component-library';\nimport {first, map, size} from 'lodash-es';\nimport {Thread} from './thread';\n\nexport class YarnType {\n private _id: number;\n private _name: string;\n private _description: string;\n private _yarnCount: number;\n private _yarnCountUnit: string;\n private _threads: Thread[];\n private _groupName: string;\n private _comment: string;\n private readonly _used: boolean;\n\n public constructor(id: number, name: string, description: string, yarnCount: number, yarnCountUnit: string, threads: Thread[], groupName: string, comment: string, used: boolean) {\n this._id = id;\n this._name = name;\n this._description = description;\n this._yarnCount = yarnCount;\n this._yarnCountUnit = yarnCountUnit;\n this._threads = threads;\n this._groupName = groupName;\n this._comment = comment;\n this._used = used;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get yarnCount(): number {\n return this._yarnCount;\n }\n\n public get yarnCountUnit(): string {\n return this._yarnCountUnit;\n }\n\n public get threads(): Thread[] {\n return this._threads;\n }\n\n public get groupName(): string {\n return this._groupName;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public static createEmptyYarnType(): YarnType {\n return new YarnType(null, null, null, null, null, null, null, null, null);\n }\n\n public static fromJSON(yarnTypeJSON: any): YarnType {\n const threads: Thread[] = map(yarnTypeJSON.threads, (threadJSON: any) => {\n return new Thread(threadJSON.yarnCount, threadJSON.spaceDye, new IdName(threadJSON.rawMaterialView.id, threadJSON.rawMaterialView.name));\n });\n\n return new YarnType(\n yarnTypeJSON.id,\n yarnTypeJSON.name,\n yarnTypeJSON.description,\n yarnTypeJSON.yarnCount,\n Unit[yarnTypeJSON.yarnCountUnit],\n threads,\n yarnTypeJSON.groupName,\n yarnTypeJSON.comment,\n yarnTypeJSON.used\n );\n }\n\n public getFirstRawMaterial(): string {\n return size(this.threads) > 0 ? first(this.threads).rawMaterialView.name : '';\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n description: this._description,\n yarnCount: this._yarnCount ?? 0,\n yarnCountUnit: Unit.getKeyFromValue(this._yarnCountUnit),\n threads: map(this._threads, (thread: Thread) => {\n return {\n yarnCount: thread.yarnCount ?? 0,\n spaceDye: thread.spaceDye,\n rawMaterialId: thread.rawMaterialView.id\n };\n }),\n groupName: this._groupName,\n comment: this._comment\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class MatchingCriteria {\n private _id: number;\n private _machine: IdName;\n private _machineType: IdName;\n private _machineGroup: IdName;\n private _orderIndex?: number;\n private _standardSpeedInCycleTime: number;\n private _standardEfficiency?: number;\n private _baseStandardSpeedInCycleTime: number;\n private _baseStandardEfficiency?: number;\n\n public constructor(\n id: number,\n machine: IdName,\n machineType: IdName,\n machineGroup: IdName,\n standardSpeedInCycleTime: number,\n standardEfficiency?: number,\n orderIndex?: number,\n baseStandardSpeedInCycleTime?: number,\n baseStandardEfficiency?: number\n ) {\n this._id = id;\n this._machine = machine;\n this._machineType = machineType;\n this._machineGroup = machineGroup;\n this._standardSpeedInCycleTime = standardSpeedInCycleTime;\n this._orderIndex = orderIndex;\n this._standardEfficiency = standardEfficiency;\n this._baseStandardEfficiency = baseStandardEfficiency;\n this._baseStandardSpeedInCycleTime = baseStandardSpeedInCycleTime;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get orderIndex(): number | undefined {\n return this._orderIndex;\n }\n\n public set orderIndex(value: number | undefined) {\n this._orderIndex = value;\n }\n\n public get standardEfficiency(): number | undefined {\n return this._standardEfficiency;\n }\n\n public set standardEfficiency(value: number | undefined) {\n this._standardEfficiency = value;\n }\n\n public get baseStandardEfficiency(): number | undefined {\n return this._baseStandardEfficiency;\n }\n\n public set baseStandardEfficiency(value: number | undefined) {\n this._baseStandardEfficiency = value;\n }\n\n public get machine(): IdName {\n return this._machine;\n }\n\n public set machine(value: IdName) {\n this._machine = value;\n }\n\n public get machineType(): IdName {\n return this._machineType;\n }\n\n public set machineType(value: IdName) {\n this._machineType = value;\n }\n\n public get machineGroup(): IdName {\n return this._machineGroup;\n }\n\n public set machineGroup(value: IdName) {\n this._machineGroup = value;\n }\n\n public get standardSpeedInCycleTime(): number {\n return this._standardSpeedInCycleTime;\n }\n\n public set standardSpeedInCycleTime(value: number) {\n this._standardSpeedInCycleTime = value;\n }\n\n public get baseStandardSpeedInCycleTime(): number {\n return this._baseStandardSpeedInCycleTime;\n }\n\n public set baseStandardSpeedInCycleTime(value: number) {\n this._baseStandardSpeedInCycleTime = value;\n }\n\n public static fromJSON(matchingCriteriaJSON: any): MatchingCriteria {\n return new MatchingCriteria(\n matchingCriteriaJSON.id,\n AssertionUtils.isNullOrUndefined(matchingCriteriaJSON.machine) ? null : IdName.fromJSON(matchingCriteriaJSON.machine),\n AssertionUtils.isNullOrUndefined(matchingCriteriaJSON.machineType) ? null : IdName.fromJSON(matchingCriteriaJSON.machineType),\n AssertionUtils.isNullOrUndefined(matchingCriteriaJSON.machineGroup) ? null : IdName.fromJSON(matchingCriteriaJSON.machineGroup),\n matchingCriteriaJSON.standardSpeedInCycleTime,\n matchingCriteriaJSON.standardEfficiency,\n matchingCriteriaJSON.orderIndex,\n matchingCriteriaJSON.baseStandardSpeedInCycleTime,\n matchingCriteriaJSON.baseStandardEfficiency\n );\n }\n\n public toJSON(): JSON {\n return {\n id: AssertionUtils.isNullOrUndefined(this._id) ? undefined : this._id,\n machineId: this._machine?.id,\n machineTypeId: this._machineType?.id,\n machineGroupId: this._machineGroup?.id,\n standardSpeedInCycleTime: this._standardSpeedInCycleTime,\n standardEfficiency: this._standardEfficiency,\n orderIndex: this._orderIndex,\n baseStandardSpeedInCycleTime: this._baseStandardSpeedInCycleTime,\n baseStandardEfficiency: this._baseStandardEfficiency\n } as any as JSON;\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {NumberingMode} from '@domain/machine/numbering-mode.enum';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {ToolStatus} from '@domain/machine/tool-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {MatchingCriteria} from './matching-criteria';\nimport {ToolType} from './tool-type.enum';\n\nexport class Tool {\n private _id: number;\n private _name: string;\n private _toolType: ToolType;\n private _weightInKg: number;\n private _speed: number;\n private _speedUnit: StandardSpeed;\n private _description: string;\n private _cavities: number;\n private _usedCavities: number;\n private _numberingMode: NumberingMode;\n private _cavitiesAcross: number;\n private _cavitiesDown: number;\n private _pieceCycles: number;\n private _waiveCycles: number;\n private _mountTimeInMinutes: number;\n private _dismountTimeInMinutes: number;\n private _status: ToolStatus;\n private _stockLocation: IdName;\n private _used: boolean;\n private _matchingCriteria: MatchingCriteria[];\n private _productIds: number[];\n\n public constructor(\n id: number,\n name: string,\n toolType: ToolType,\n weightInKg: number,\n speed: number,\n speedUnit: StandardSpeed,\n description: string,\n cavities: number,\n usedCavities: number,\n numberingMode: NumberingMode,\n cavitiesAcross: number,\n cavitiesDown: number,\n pieceCycles: number,\n waiveCycles: number,\n mountTimeInMinutes: number,\n dismountTimeInMinutes: number,\n status: ToolStatus,\n stockLocation: IdName,\n used: boolean = false,\n matchingCriteria: MatchingCriteria[] = [],\n productIds: number[] = []\n ) {\n this._id = id;\n this._name = name;\n this._toolType = toolType;\n this._weightInKg = weightInKg;\n this._speed = speed;\n this._speedUnit = speedUnit;\n this._description = description;\n this._cavities = cavities;\n this._usedCavities = usedCavities;\n this._numberingMode = numberingMode;\n this._cavitiesAcross = cavitiesAcross;\n this._cavitiesDown = cavitiesDown;\n this._pieceCycles = pieceCycles;\n this._waiveCycles = waiveCycles;\n this._mountTimeInMinutes = mountTimeInMinutes;\n this._dismountTimeInMinutes = dismountTimeInMinutes;\n this._status = status;\n this._stockLocation = stockLocation;\n this._used = used;\n this._matchingCriteria = matchingCriteria;\n this._productIds = productIds;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get toolType(): ToolType {\n return this._toolType;\n }\n\n public set toolType(value: ToolType) {\n this._toolType = value;\n }\n\n public get weightInKg(): number {\n return this._weightInKg;\n }\n\n public set weightInKg(value: number) {\n this._weightInKg = value;\n }\n\n public get speed(): number {\n return this._speed;\n }\n\n public set speed(value: number) {\n this._speed = value;\n }\n\n public get speedUnit(): StandardSpeed {\n return this._speedUnit;\n }\n\n public set speedUnit(value: StandardSpeed) {\n this._speedUnit = value;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public set description(value: string) {\n this._description = value;\n }\n\n public get cavities(): number {\n return this._cavities;\n }\n\n public set cavities(value: number) {\n this._cavities = value;\n }\n\n public get usedCavities(): number {\n return this._usedCavities;\n }\n\n public set usedCavities(value: number) {\n this._usedCavities = value;\n }\n\n public get numberingMode(): NumberingMode {\n return this._numberingMode;\n }\n\n public set numberingMode(value: NumberingMode) {\n this._numberingMode = value;\n }\n\n public get cavitiesAcross(): number {\n return this._cavitiesAcross;\n }\n\n public set cavitiesAcross(value: number) {\n this._cavitiesAcross = value;\n }\n\n public get cavitiesDown(): number {\n return this._cavitiesDown;\n }\n\n public set cavitiesDown(value: number) {\n this._cavitiesDown = value;\n }\n\n public get pieceCycles(): number {\n return this._pieceCycles;\n }\n\n public set pieceCycles(value: number) {\n this._pieceCycles = value;\n }\n\n public get waiveCycles(): number {\n return this._waiveCycles;\n }\n\n public set waiveCycles(value: number) {\n this._waiveCycles = value;\n }\n\n public get mountTimeInMinutes(): number {\n return this._mountTimeInMinutes;\n }\n\n public set mountTimeInMinutes(value: number) {\n this._mountTimeInMinutes = value;\n }\n\n public get dismountTimeInMinutes(): number {\n return this._dismountTimeInMinutes;\n }\n\n public set dismountTimeInMinutes(value: number) {\n this._dismountTimeInMinutes = value;\n }\n\n public get status(): ToolStatus {\n return this._status;\n }\n\n public set status(value: ToolStatus) {\n this._status = value;\n }\n\n public get stockLocation(): IdName {\n return this._stockLocation;\n }\n\n public set stockLocation(value: IdName) {\n this._stockLocation = value;\n }\n\n public get matchingCriteria(): MatchingCriteria[] {\n return this._matchingCriteria;\n }\n\n public set matchingCriteria(value: MatchingCriteria[]) {\n this._matchingCriteria = value;\n }\n\n public get productIds(): number[] {\n return this._productIds;\n }\n\n public set productIds(value: number[]) {\n this._productIds = value;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(value: boolean) {\n this._used = value;\n }\n\n public static fromJSON(toolJSON: any): Tool {\n return new Tool(\n toolJSON.id,\n toolJSON.name,\n toolJSON.toolType,\n toolJSON.weightInKg,\n toolJSON.standardCycleTimeInSeconds,\n toolJSON.speedUnit,\n toolJSON.description,\n toolJSON.originalCavities,\n toolJSON.nrCavities,\n toolJSON.cavityNumberingMode,\n toolJSON.cavityAcross,\n toolJSON.cavityDown,\n toolJSON.pieceCycles,\n toolJSON.waiveCycles,\n toolJSON.mountTimeInMinutes,\n toolJSON.dismountTimeInMinutes,\n toolJSON.toolStatus,\n AssertionUtils.isNullOrUndefined(toolJSON.stockLocation) ? null : IdName.fromJSON(toolJSON.stockLocation),\n toolJSON.used,\n toolJSON.toolMatchingCriteria.map((matchingCriteriaJSON: any) => MatchingCriteria.fromJSON(matchingCriteriaJSON)),\n toolJSON.productsForTool.map((productJSON: any) => productJSON.products.id)\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n toolType: this._toolType,\n weightInKg: this._weightInKg,\n standardCycleTimeInSeconds: this._speed,\n speedUnit: this._speedUnit,\n description: this._description,\n originalCavities: this._cavities,\n nrCavities: this._usedCavities,\n cavityNumberingMode: this._numberingMode,\n cavityAcross: this._cavitiesAcross,\n cavityDown: this._cavitiesDown,\n pieceCycles: this._pieceCycles,\n waiveCycles: this._waiveCycles,\n mountTimeInMinutes: this._mountTimeInMinutes,\n dismountTimeInMinutes: this._dismountTimeInMinutes,\n toolStatus: this._status,\n stockLocationId: this._stockLocation?.id,\n used: this._used,\n toolMatchingCriteria: this._matchingCriteria.map((matchingCriteria: MatchingCriteria) => matchingCriteria.toJSON()),\n productsForTool: this._productIds.map((productId: number) => ({productId}))\n } as any as JSON;\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Article} from '@domain/article/article';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\n\nexport const ARTICLES = new InjectionToken('Articles');\n\nexport interface Articles extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n deleteMulti(ids: number[]): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AuthenticationToken} from '@infrastructure/http/authentication/authentication-token';\nimport {Observable} from 'rxjs';\n\nexport const AUTHENTICATION = new InjectionToken('Authentication');\n\nexport interface Authentication {\n onAuthentication(): Observable;\n\n login(): void;\n\n logout(): void;\n\n isAuthenticated(): boolean;\n\n currentAuthenticatedChanges(): Observable;\n\n getCurrentSubscription(): Subscription;\n\n validateCurrentSubscription(): void;\n\n setCurrentSubscription(subscription: Subscription): void;\n\n currentSubscriptionChanges(): Observable;\n\n getCurrentEmail(): string;\n\n getRedirectAfterAuthentication(): string;\n\n setRedirectAfterAuthentication(url: string): void;\n\n getCurrentUserId(): string;\n\n resetLocalStorageToDefaults(): void;\n\n clearSubscription(): void;\n\n isAuthenticationInProgress(): Observable;\n\n handleInvalidSubscription(): void;\n\n hasPermission(permission: Permission): boolean;\n}\n","import {IdToken} from '@infrastructure/http/authentication/id-token';\nimport {Token} from '@infrastructure/http/authentication/token';\nimport {jwtDecode} from 'jwt-decode';\nimport {isEmpty, isEqual, isNil} from 'lodash-es';\n\nexport class AuthenticationToken {\n private _name: string;\n private _email: string;\n private _expiration: number;\n private _requestNonce: string;\n private _audience: string;\n private readonly _requestState: string;\n private readonly _encodedAccessToken: string;\n private readonly _encodedIdToken: string;\n\n public constructor(encodedAccessToken: string, encodedIdToken: string, requestState: string) {\n this._encodedAccessToken = encodedAccessToken;\n this._encodedIdToken = encodedIdToken;\n this._requestState = requestState;\n\n this.decodeAccessToken(encodedAccessToken);\n this.decodeIdToken(encodedIdToken);\n }\n\n public get expiration(): number {\n return this._expiration;\n }\n\n public get encodedAccessToken(): string {\n return this._encodedAccessToken;\n }\n\n public get requestState(): string {\n return this._requestState;\n }\n\n public get email(): string {\n return this._email;\n }\n\n private get hasEncodedAccessToken(): boolean {\n return !isEmpty(this._encodedAccessToken);\n }\n\n private get hasEncodedIdToken(): boolean {\n return !isEmpty(this._encodedIdToken);\n }\n\n private get isNotExpired(): boolean {\n return Date.now() < this._expiration * 1000;\n }\n\n public static fromJSON(authenticationTokenJSON: any): AuthenticationToken {\n return new AuthenticationToken(authenticationTokenJSON.accessToken, authenticationTokenJSON.idToken, authenticationTokenJSON.state);\n }\n\n public isValid(audience: string): boolean {\n const audienceMatches = isEqual(audience, this._audience);\n\n return this.hasEncodedAccessToken && this.hasEncodedIdToken && this.isNotExpired && audienceMatches;\n }\n\n private decodeIdToken(encodedIdToken: string): void {\n if (!isEmpty(encodedIdToken)) {\n const decodedIdToken: IdToken = jwtDecode(encodedIdToken);\n\n this._requestNonce = decodedIdToken.nonce;\n this._audience = decodedIdToken.aud;\n }\n }\n\n private decodeAccessToken(encodedAccessToken: string): void {\n if (!isEmpty(encodedAccessToken)) {\n const decodedToken: Token = jwtDecode(encodedAccessToken);\n\n this._name = decodedToken.name;\n this._expiration = decodedToken.exp;\n\n const isVersionOneAccessToken = !isNil(decodedToken.email);\n if (isVersionOneAccessToken) {\n this._email = decodedToken.email;\n } else {\n this._email = !isNil(decodedToken.preferred_username) ? decodedToken.preferred_username : decodedToken.name;\n }\n }\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {MsalBroadcastService, MsalService} from '@azure/msal-angular';\nimport {EventMessage, EventType, InteractionStatus} from '@azure/msal-browser';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AuthenticationToken} from '@infrastructure/http/authentication/authentication-token';\nimport {CompanySubscriptions} from '@infrastructure/http/profile/company-subscriptions';\nimport {PROFILE, Profile} from '@infrastructure/http/profile/profile';\nimport {AssertionUtils, AuthenticationError, LocalStorageService, UuidUtils, WINDOW} from '@vdw/angular-component-library';\nimport {find, isNil} from 'lodash-es';\nimport {BehaviorSubject, filter, first, map, Observable, of, Subject, switchMap, tap, throwError} from 'rxjs';\nimport {Authentication} from './authentication';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpAuthenticationService implements Authentication {\n public static readonly subscriptionStorageKey = 'subscription';\n protected currentSubscriptionSubject: Subject = new Subject();\n private readonly LOGIN_URI: string;\n private isAuthenticatedSubject: BehaviorSubject;\n private readonly storageConstants = {\n STATE: 'state',\n NONCE: 'nonce',\n EMAIL: 'email',\n SUBSCRIPTION: HttpAuthenticationService.subscriptionStorageKey,\n REDIRECT: 'redirect'\n };\n\n public constructor(\n private readonly localStorageService: LocalStorageService,\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration,\n @Inject(PROFILE) private readonly profile: Profile,\n private readonly msalService: MsalService,\n private readonly msalBroadcastService: MsalBroadcastService,\n private readonly router: Router,\n @Inject(WINDOW) window: Window\n ) {\n this.LOGIN_URI = `${window.location.origin}/${RouteUtils.paths.login.path}`;\n this.isAuthenticatedSubject = new BehaviorSubject(false);\n }\n\n public login(): void {\n this.setRequestStateAndNonce();\n\n this.msalService.loginRedirect({\n scopes: this.backendConfiguration.getAuthenticationScopes()\n });\n }\n\n public onAuthentication(): Observable {\n return this.msalBroadcastService.msalSubject$.pipe(\n filter(({eventType}: EventMessage) => {\n return eventType === EventType.LOGIN_SUCCESS || eventType === EventType.ACQUIRE_TOKEN_SUCCESS || eventType === EventType.LOGIN_FAILURE || eventType === EventType.ACQUIRE_TOKEN_FAILURE;\n }),\n first(),\n switchMap(({eventType, payload, error}: EventMessage) => {\n return eventType === EventType.ACQUIRE_TOKEN_FAILURE || eventType === EventType.LOGIN_FAILURE\n ? throwError(() => new AuthenticationError(error.message))\n : of(AuthenticationToken.fromJSON(payload));\n }),\n switchMap((authenticationToken: AuthenticationToken) => {\n const currentAudience = this.backendConfiguration.getAuthenticationClientId();\n\n return authenticationToken.isValid(currentAudience) ? of(authenticationToken) : throwError(() => new AuthenticationError());\n }),\n tap((authenticationToken: AuthenticationToken) => {\n this.localStorageService.set(this.storageConstants.EMAIL, authenticationToken.email);\n this.isAuthenticatedSubject.next(this.isAuthenticatedAndHasSubscription());\n })\n );\n }\n\n public logout(): void {\n this.httpClient\n .post(`${this.backendConfiguration.getAggregatorEndpoint()}cache/logout`, null)\n .pipe(\n switchMap(() =>\n this.msalService.logoutRedirect({\n onRedirectNavigate: () => this.resetLocalStorageToDefaults()\n })\n )\n )\n .subscribe();\n }\n\n public isAuthenticated(): boolean {\n return this.isAuthenticatedSubject.getValue();\n }\n\n public currentAuthenticatedChanges(): Observable {\n return this.isAuthenticatedSubject.asObservable();\n }\n\n public validateCurrentSubscription(): void {\n try {\n const subscriptionId: string = this.backendConfiguration.getSubscriptionId();\n const subscription: Subscription = this.getCurrentSubscription();\n\n if (subscription) {\n this.refreshSubscription(subscriptionId);\n }\n } catch (e) {\n this.handleInvalidSubscription();\n }\n }\n\n public getCurrentSubscription(): Subscription {\n const storedSubscriptionJSONString: string = this.localStorageService.get(this.storageConstants.SUBSCRIPTION);\n let result: Subscription = null;\n\n if (!AssertionUtils.isNullOrUndefined(storedSubscriptionJSONString)) {\n result = Subscription.fromLocalStorage(storedSubscriptionJSONString);\n }\n\n return result;\n }\n\n public setCurrentSubscription(subscription: Subscription): void {\n this.backendConfiguration.setSubscriptionId(subscription.id);\n if (subscription.company) {\n this.backendConfiguration.setCompanyId(subscription.company.id);\n }\n this.currentSubscriptionSubject.next(subscription);\n this.localStorageService.set(this.storageConstants.SUBSCRIPTION, subscription.toJSON());\n this.isAuthenticatedSubject.next(this.isAuthenticatedAndHasSubscription());\n }\n\n public currentSubscriptionChanges(): Observable {\n return this.currentSubscriptionSubject;\n }\n\n public getCurrentEmail(): string {\n const storedEmail = this.localStorageService.get(this.storageConstants.EMAIL);\n return AssertionUtils.isNullOrUndefined(storedEmail) ? null : storedEmail;\n }\n\n public getCurrentUserId(): string {\n const currentSubscription: Subscription = this.getCurrentSubscription();\n return currentSubscription?.userIdentity.userId ?? '';\n }\n\n public getRedirectAfterAuthentication(): string {\n return this.localStorageService.get(this.storageConstants.REDIRECT);\n }\n\n public setRedirectAfterAuthentication(url: string): void {\n if (AssertionUtils.isNullOrUndefined(url)) {\n this.localStorageService.remove(this.storageConstants.REDIRECT);\n } else {\n this.localStorageService.set(this.storageConstants.REDIRECT, url);\n }\n }\n\n public resetLocalStorageToDefaults(): void {\n this.localStorageService.remove(...Object.keys(this.storageConstants).map((storageConstantKey: string) => this.storageConstants[storageConstantKey]));\n this.backendConfiguration.clearLocalStorage();\n }\n\n public clearSubscription(): void {\n this.currentSubscriptionSubject.next(null);\n this.localStorageService.remove(this.storageConstants.SUBSCRIPTION);\n }\n\n public isAuthenticationInProgress(): Observable {\n return this.msalBroadcastService.inProgress$.pipe(\n first(),\n map((status: InteractionStatus) => {\n return status === InteractionStatus.Login || status === InteractionStatus.HandleRedirect;\n })\n );\n }\n\n public handleInvalidSubscription(): void {\n this.router.navigate([RouteUtils.paths.login.absolutePath], {queryParams: {'session-expired': true}});\n this.resetLocalStorageToDefaults();\n this.isAuthenticatedSubject.next(false);\n }\n\n public hasPermission(permission: Permission): boolean {\n const currentSubscription: Subscription = this.getCurrentSubscription();\n return !AssertionUtils.isNullOrUndefined(currentSubscription) && currentSubscription.hasPermission(permission);\n }\n\n private setRequestStateAndNonce(): void {\n const requestState = `${this.LOGIN_URI}?${UuidUtils.generateV4Uuid()}`;\n const requestNonce = UuidUtils.generateV4Uuid();\n\n this.localStorageService.set(this.storageConstants.STATE, requestState);\n this.localStorageService.set(this.storageConstants.NONCE, requestNonce);\n }\n\n private refreshSubscription(subscriptionToRefresh: string): void {\n this.profile.getSubscriptions(false).subscribe((companySubscriptions: CompanySubscriptions) => {\n let subscription: Subscription = null;\n if (subscriptionToRefresh) {\n subscription = find(companySubscriptions.subscriptions, {id: subscriptionToRefresh});\n }\n\n if (!subscription) {\n let sortedIndex = this.getSortedIndexBasedOnAlphabets(companySubscriptions.subscriptions);\n subscription = companySubscriptions.subscriptions[sortedIndex];\n }\n\n this.setCurrentSubscription(subscription);\n this.backendConfiguration.setApplicationMaintenance(companySubscriptions.applicationMaintenance);\n });\n }\n\n private getSortedIndexBasedOnAlphabets(subscriptions: Subscription[]): number {\n return subscriptions.reduce((index: number, current: Subscription, currentIndex: number) => {\n if (current.name[0].toUpperCase() < subscriptions[index].name[0].toUpperCase()) {\n return currentIndex;\n }\n return index;\n }, 0);\n }\n\n private isAuthenticatedAndHasSubscription(): boolean {\n return !isNil(this.localStorageService.get(this.storageConstants.SUBSCRIPTION));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {BackgroundJob} from '@domain/background-jobs/background-job';\nimport {BackgroundJobGlobalStatusUpdate} from '@domain/background-jobs/background-job-global-status-update';\nimport {Observable} from 'rxjs';\n\nexport const BACKGROUND_JOBS = new InjectionToken('BackgroundJobs');\n\nexport interface BackgroundJobs {\n getAll(): Observable;\n retry(backgroundJob: BackgroundJob): Observable;\n getGlobalStatus(): Observable;\n cancelJob(jobId: string): Observable;\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {BuggyNameGenerationView} from '@domain/production-schedule/buggy-name-generation-view-type';\nimport {map, Observable} from 'rxjs';\nimport {DefaultCustomSettingsRepository} from '../default-custom-settings-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpBuggyCustomSettingsService extends DefaultCustomSettingsRepository {\n public constructor(\n httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {\n super(httpClient, `${backendConfiguration.getProductionOrderEndpoint()}buggies/custom-settings`);\n }\n\n public override getNameGenerationProperties(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint(2)}buggies/custom-settings/name-generation-properties`)\n .pipe(map((json: any[]) => json.map((jsonElement: any) => NameGeneratorProperty.fromJSON(jsonElement))));\n }\n\n public override generateName(entity: BuggyNameGenerationView): Observable {\n return this.httpClient.post(`${this.baseUrl}/generate-name`, entity);\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {BuggyForProductionSchedule} from '@domain/production-schedule/buggy-for-production-schedule';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {CheckName} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {map, map as rxjsMap} from 'rxjs/operators';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpBuggyService implements Repository, UniqueIdentifierObjectRepository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies`)\n .pipe(map((bugiesJSON: any) => bugiesJSON.map((buggyJSON: any) => BuggyForProductionSchedule.fromJSON(buggyJSON))));\n }\n\n public getCategoriesWithComponentsForBuggyName(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/categories-with-components-for-buggy-name`)\n .pipe(map((placeholderCategoriesJSON: any) => placeholderCategoriesJSON.map((placeHolderJSON: any) => PlaceholderCategory.fromJSON(placeHolderJSON))));\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/${id}`).pipe(map((buggyJSON: any) => BuggyForProductionSchedule.fromJSON(buggyJSON)));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/${id}`);\n }\n\n public save(item: BuggyForProductionSchedule): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies`, item.toJSON()).pipe(rxjsMap((response: number) => response));\n }\n\n public update(item: BuggyForProductionSchedule): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getGeneratedBuggyName(machineId: number, qualityId: number, creelId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getAggregatorEndpoint()}buggies/generate-name?machineId=${machineId}&qualityId=${qualityId}&creelId=${creelId}`, null)\n .pipe(rxjsMap((response: string) => response));\n }\n\n public getBuggyReportXSLT(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}buggies/overview/xslt`, {responseType: 'text'});\n }\n\n public getBuggyReportXML(buggyId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}buggies/${buggyId}/overview/xml`, {responseType: 'text'});\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Schedule} from '@domain/calendar/schedule/schedule';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {CheckName} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class HttpScheduleService implements Repository, UniqueIdentifierObjectRepository {\n public getAll(): Observable {\n throw new Error('Method not implemented.');\n }\n\n public delete(id: number | string): Observable {\n throw new Error('Method not implemented.');\n }\n\n public getById(id: number | string): Observable {\n throw new Error('Method not implemented.');\n }\n\n public save(item: Schedule): Observable {\n throw new Error('Method not implemented.');\n }\n\n public update(item: Schedule): Observable {\n throw new Error('Method not implemented.');\n }\n\n public deleteMulti(ids: number[]): Observable {\n throw new Error('Method not implemented.');\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n throw new Error('Method not implemented.');\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {ConflictsRepository} from '@infrastructure/http/conflicts-repository';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpShiftsService implements Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n private baseUrl: string;\n\n public constructor(\n private readonly httpClient: HttpClient,\n backendConfiguration: BackendConfiguration\n ) {\n this.baseUrl = `${backendConfiguration.getCalendarEndpoint()}shifts`;\n }\n\n public getAll(): Observable {\n return this.httpClient.get(this.baseUrl).pipe(map((shiftsJSON: any) => shiftsJSON.map((shiftJSON: any) => Shift.fromJSON(shiftJSON))));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.baseUrl}/${id}`);\n }\n\n public getById(id: number | string): Observable {\n return this.httpClient.get(`${this.baseUrl}/${id}`).pipe(map((response: any) => Shift.fromJSON(response)));\n }\n\n public save(item: Shift): Observable {\n return this.httpClient.post(this.baseUrl, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: Shift): Observable {\n return this.httpClient.put(`${this.baseUrl}/${item.id}`, item.toJSON());\n }\n\n public deleteMulti(ids: number[]): Observable {\n throw new Error('Method not implemented.');\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.baseUrl}/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient.post(`${this.baseUrl}/conflicts`, [id]).pipe(map((conflictsJSON: any) => conflictsJSON[0].conflicts.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {HttpContext, HttpContextToken} from '@angular/common/http';\n\nexport const CANCEL_REQUEST = new HttpContextToken(() => true);\n\nexport function createCancelRequestContext(shouldCancelRequest: boolean): HttpContext {\n return new HttpContext().set(CANCEL_REQUEST, shouldCancelRequest);\n}\n","import {InjectionToken} from '@angular/core';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const COLOR_SETS = new InjectionToken('ColorSets');\n\nexport interface ColorSets\n extends Repository,\n UniqueIdentifierObjectRepository,\n ConflictsRepository,\n CustomSettingsObjectRepository,\n NameGenerationRepository {\n getAllByMachineQuality(qualityId: number): Observable;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {ColorSets} from '@infrastructure/http/color-set/color-sets';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpColorSetsService implements ColorSets {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}colorsets/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}colorsets/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets`).pipe(rxjsMap(this.mapOverviewListColorSet));\n }\n\n public getAllByMachineQuality(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets/quality=${machineQualityId}`).pipe(rxjsMap(this.mapOverviewListColorSet));\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets/${id}`).pipe(\n rxjsMap((colorSetJSON: any) => {\n return ColorSet.fromJSON(colorSetJSON);\n })\n );\n }\n\n public save(item: ColorSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}colorsets`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: ColorSet): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}colorsets/${item.id}`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}colorsets/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}colorsets/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colorsets/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: ColorSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}colorsets/custom-settings/generate-name`, item.toJSON());\n }\n\n private mapOverviewListColorSet(colorSetsJSON: any): OverviewListColorSet[] {\n return map(colorSetsJSON, (colorSetJSON: any) => {\n return OverviewListColorSet.fromJSON(colorSetJSON);\n });\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {GridModelRepository} from '@infrastructure/http/grid-model-repository';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {Color} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const COLORS = new InjectionToken('Colors');\n\nexport interface Colors\n extends Repository,\n UniqueIdentifierObjectRepository,\n ConflictsRepository,\n GridModelRepository,\n CustomSettingsObjectRepository,\n NameGenerationRepository {\n getPossibleValues(columnIdentifier: string): Observable;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {Colors} from '@infrastructure/http/color/colors';\nimport {CheckName, Color, Conflict, GridModel} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable, OperatorFunction} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable({providedIn: 'root'})\nexport class HttpColorsService implements Colors {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors`).pipe(this.getColors());\n }\n\n public get(gridModel: GridModel): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}colors/get`, gridModel.toJSON()).pipe(this.getColors());\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}colors/${id}`);\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors/${id}`).pipe(rxjsMap((response: any) => Color.fromJSON(response)));\n }\n\n public save(item: Color): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}colors`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: Color): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}colors/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(name: string, version: number = 1): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(version)}colors/check-name`, {params}).pipe(\n rxjsMap((response: {nameAvailable: boolean} | any) => {\n if (version === 2) {\n return CheckName.fromJSON(response);\n } else {\n return response.nameAvailable;\n }\n })\n );\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}colors/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors/${columnIdentifier}/possible-values`).pipe(rxjsMap((response: string[]) => response));\n }\n\n private getColors(): OperatorFunction {\n return rxjsMap((colorsJSON: any) => {\n return map(colorsJSON, (colorJSON: any) => {\n return Color.fromJSON(colorJSON);\n });\n });\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}colors/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}colors/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: Color): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}colors/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {ConflictsRepository} from '../conflicts-repository';\n\nexport const COLORED_YARN_SETS = new InjectionToken('ColoredYarnSets');\n\nexport interface ColoredYarnSets extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\nimport {ColoredYarnSets} from '@infrastructure/http/colored-yarn-set/colored-yarn-sets';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpColoredYarnSetsService implements ColoredYarnSets {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}coloredyarnsets/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}coloredyarnsets`).pipe(\n rxjsMap((coloredYarnSetsJSON: any) => {\n return map(coloredYarnSetsJSON, (coloredYarnSetJSON: any) => {\n return OverviewListColoredYarnSet.fromJSON(coloredYarnSetJSON);\n });\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}coloredyarnsets/${id}`).pipe(\n rxjsMap((coloredYarnSetJSON: any) => {\n return ColoredYarnSet.fromJSON(coloredYarnSetJSON);\n })\n );\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}coloredyarnsets/check-name`, {params}).pipe(\n rxjsMap((response: {coloredYarnSetNameAvailable: boolean}) => {\n return response.coloredYarnSetNameAvailable;\n })\n );\n }\n\n public save(item: ColoredYarnSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}coloredyarnsets`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: ColoredYarnSet): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}coloredyarnsets/${item.id}`, item.toJSON());\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}coloredyarnsets/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const CREELS = new InjectionToken('Creels');\n\nexport interface Creels\n extends Repository,\n UniqueIdentifierObjectRepository,\n ConflictsRepository,\n CustomSettingsObjectRepository,\n NameGenerationRepository {\n getAllWithNumberOfCreelPositionsAndNumberOfDents(numberOfCreelPositions: number, numberOfDentsForFabric: number): Observable;\n\n getActiveCreelForMachine(id: number): Observable;\n\n getActiveCreelMappingForMachine(creelId: number, machineId: number): Observable;\n\n getPossibleCreelsForMachine(id: number): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {Customer} from '@domain/customer/customer';\nimport {Repository} from '@infrastructure/http/repository';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\nexport const CUSTOMERS = new InjectionToken('Customers');\n\nexport interface Customers extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Customer} from '@domain/customer/customer';\nimport {Customers} from '@infrastructure/http/customer/customers';\nimport {Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable({providedIn: 'root'})\nexport class HttpCustomersService implements Customers {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}customers`).pipe(\n rxjsMap((customersJSON: any) => {\n return map(customersJSON, (customerJSON: any) => {\n return Customer.fromJSON(customerJSON);\n });\n })\n );\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}customers/${id}`);\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}customers/${id}`).pipe(rxjsMap((response: any) => Customer.fromJSON(response)));\n }\n\n public save(item: Customer): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}customers`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: Customer): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}customers/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(number: string): Observable {\n const params = new HttpParams().set('number', number);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}customers/check-number`, {params}).pipe(\n rxjsMap((response: {customerNumberAvailable: boolean}) => {\n return response.customerNumberAvailable;\n })\n );\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}customers/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {HttpClient} from '@angular/common/http';\r\nimport {CustomSettings} from '@domain/custom-settings/custom-settings';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {map, Observable} from 'rxjs';\r\nimport {CustomSettingsRepository} from './custom-settings-repository.interface';\r\n\r\nexport class DefaultCustomSettingsRepository implements CustomSettingsRepository {\r\n public constructor(\r\n protected readonly httpClient: HttpClient,\r\n protected readonly baseUrl: string\r\n ) {}\r\n\r\n public get(): Observable {\r\n return this.httpClient.get(this.baseUrl).pipe(map((json: any) => CustomSettings.fromJSON(json)));\r\n }\r\n\r\n public save(customSettings: CustomSettings): Observable {\r\n return this.httpClient.post(this.baseUrl, customSettings.toJSON());\r\n }\r\n\r\n public getNameGenerationProperties(): Observable {\r\n return this.httpClient.get(`${this.baseUrl}/name-generation-properties`).pipe(map((json: any[]) => json.map((jsonElement: any) => NameGeneratorProperty.fromJSON(jsonElement))));\r\n }\r\n\r\n public generateName(entity: TEntity): Observable {\r\n return this.httpClient.post(`${this.baseUrl}/generate-name`, (entity as any)?.toJSON() ?? null);\r\n }\r\n}\r\n","import {InjectionToken} from '@angular/core';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {DrawingInfo} from '@domain/production-schedule/drawing-info.interface';\nimport {DrawingRecolorInformation} from '@domain/production-schedule/drawing-recolor-information';\nimport {PropertyValue} from '@domain/property-value';\nimport {TargetForListOfDrawingsEnum} from '@domain/target-for-list-of-drawings.enum';\nimport {ColoredYarnSetPosition} from '@domain/textile-data/creel/colored-yarn-set-position';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {ConflictsRepository} from '@infrastructure/http/conflicts-repository';\nimport {GroupedDrawing} from '@presentation/pages/texfab/production-schedule/add/drawing-library/views/drawings-grouped-view/grouped-drawing';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\nexport const DRAWINGS = new InjectionToken('Drawings');\n\nexport interface Drawings extends Repository, UniqueIdentifierObjectRepository, CustomSettingsObjectRepository, ConflictsRepository {\n getAllWithoutImageData(target: TargetForListOfDrawingsEnum, filters?: PropertyValue[]): Observable;\n\n getAllWithoutImageDataFromGridModel(target: TargetForListOfDrawingsEnum, gridModel: GridModel, loadConfigurations?: boolean, viewMode?: string, exclude?: string): Observable;\n\n getSlice(\n startIndex: number,\n count: number,\n viewMode: string,\n loadConfiguration: boolean,\n target: TargetForListOfDrawingsEnum,\n filters?: PropertyValue[],\n sort?: {sort: string; colId: string}\n ): Observable;\n\n getDrawing(drawingImageId: string, drawingSignature: string): Observable;\n\n deleteMultiple(drawingIds: number[]): Observable;\n\n getDrawingShapes(): Observable;\n\n addImageToUploadQueue(drawingImage: DrawingImage): void;\n\n getUploadQueue(): DrawingImage[];\n\n removeDrawingImagesFromUploadQueue(namesOfDrawingImagesToRemove: string[]): DrawingImage[];\n\n clearUploadQueue(): void;\n\n uploadDrawingImages(drawingImages: DrawingImage[]): Observable;\n\n deleteDrawingImages(drawingImagesIds: string[]): Observable;\n\n getRecoloredImageConfiguration(\n imageId: string,\n machineQualityId: number,\n colorSetId: number,\n coloredYarnSetId: number,\n mappingForCurrentPositionOnMachine: CreelMap,\n target: TargetForListOfDrawingsEnum,\n dimensions: {\n input: DimensionsInPx;\n output?: DimensionsInPx;\n },\n orderLineId?: number,\n position?: ColoredYarnSetPosition,\n finishingId?: number,\n numberOfWeftSelectionColumns?: number,\n threadByThread?: boolean\n ): Observable;\n\n getRecoloredImage(imageId: string, machineQualityId: number, colorSetId: number, dimensionsInPx: DimensionsInPx): Observable;\n\n getRecoloredPathLabelImage(\n imageId: string,\n machineQualityId: number,\n colorSetId: number,\n mappingForCurrentPositionOnMachine: CreelMap,\n dimensionsInPx: DimensionsInPx,\n position: ColoredYarnSetPosition,\n creelName: string,\n machineId: number,\n freePatternId: number\n ): Observable;\n\n saveAll(drawings: Drawing[], overwriteExistingDrawings: boolean): Observable;\n\n processDrawingConfigurationIntoEpDrawing(\n imageId: string,\n drawingName: string,\n machineQualityId: number,\n colorSetId: number,\n dimensionsInPx: DimensionsInPx,\n finishingId: number,\n machineId: number\n ): Observable;\n\n downloadFile(imageId: string): Observable;\n\n downloadPVDFile(yarnConsumptionId: number): Observable;\n\n getCategoriesWithComponents(): Observable;\n\n getDrawingInfoByName(dimensionsInPx: DimensionsInPx, id: string, drawingName: string): Observable;\n\n getPossibleValues(columnIdentifier: string): Observable;\n\n getGroupedDrawings(gridModel: GridModel, groupedBy: string[]): Observable;\n}\n","import {HttpParams} from '@angular/common/http';\nimport {GetAllFinishingsParameters} from '@infrastructure/http/finishing/finishings';\nimport {GetAllMachineQualitiesParameters} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {GetAllWeaveStructuresParameters} from '@infrastructure/http/weave-structure/weave-structures';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class ExtendedHttpParams extends HttpParams {\n public setHttpParamsFromObject(parameters: Partial, httpParamsMap: Map): HttpParams {\n let httpParams = new HttpParams();\n\n if (!parameters) {\n return httpParams;\n } else {\n for (const key in parameters) {\n if (!AssertionUtils.isNullOrUndefined(parameters[key]) && httpParamsMap.has(key)) {\n httpParams = httpParams.set(httpParamsMap.get(key), parameters[key]);\n }\n }\n return httpParams;\n }\n }\n}\n\ntype HttpParamsObject = GetAllWeaveStructuresParameters | GetAllMachineQualitiesParameters | GetAllFinishingsParameters;\n","import {InjectionToken} from '@angular/core';\nimport {Pattern} from '@domain/pattern';\nimport {PropertyValue} from '@domain/property-value';\nimport {FinishingTemplate} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template';\nimport {ImageForFinishingImageLabel} from '@domain/textile-data/finishing-and-finishing-template/image-for-finishing-image-label';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {CustomSettingsObjectRepository} from '@infrastructure/http/custom-settings-object-repository';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListFinishingTemplate} from '@presentation/pages/textile-data/finishing-template/overview/overview-list-finishing-template';\nimport {FinishingTemplateForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/finishing-template-for-machine-quality';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const FINISHING_TEMPLATES = new InjectionToken('FinishingTemplates');\n\nexport interface FinishingTemplates\n extends Repository,\n UniqueIdentifierObjectRepository,\n CustomSettingsObjectRepository,\n ConflictsRepository,\n NameGenerationRepository {\n getListOfFinishingTypes(): Observable;\n\n getFinishingTemplatesForMachineQuality(machineQualityId: number): Observable;\n\n getFinishingTemplatesForQuality(weaveStructureId: number, pickDensity: number): Observable;\n\n getFoldingTypes(): Observable;\n\n getImagesForLabels(): Observable;\n\n getCategoriesWithComponents(): Observable;\n\n uploadImagesForLabels(imagesForFinishingImageLabel: ImageForFinishingImageLabel[]): Observable;\n\n getImageForLabels(imageId: string): Observable;\n\n deleteImageForLabels(imageId: string): Observable;\n}\n","import {FinishingTemplateCutbarsInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-cutbars-information';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {FinishingAndFinishingTemplateLabelOverviewList} from '@presentation/pages/textile-data/finishing-template/overview/finishing-and-finishing-template-label-overview-list';\nimport {map} from 'lodash-es';\n\nexport class OverviewListFinishingTemplate {\n private _id: number;\n private _name: string;\n private _finishingType: FinishingType;\n private _cutbarsInformation: FinishingTemplateCutbarsInformation;\n private _labels: FinishingAndFinishingTemplateLabelOverviewList[];\n\n public constructor(id: number, name: string, finishingType: FinishingType, cutbarsInformation: FinishingTemplateCutbarsInformation, labels: FinishingAndFinishingTemplateLabelOverviewList[]) {\n this._id = id;\n this._name = name;\n this._finishingType = finishingType;\n this._cutbarsInformation = cutbarsInformation;\n this._labels = labels;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get finishingType(): FinishingType {\n return this._finishingType;\n }\n\n public get cutbarsInformation(): FinishingTemplateCutbarsInformation {\n return this._cutbarsInformation;\n }\n\n public get labels(): FinishingAndFinishingTemplateLabelOverviewList[] {\n return this._labels;\n }\n\n public static fromJSON(finishingTemplateJSON: any): OverviewListFinishingTemplate {\n return new OverviewListFinishingTemplate(\n finishingTemplateJSON.id,\n finishingTemplateJSON.name,\n finishingTemplateJSON.finishingType,\n FinishingTemplateCutbarsInformation.fromJSON(finishingTemplateJSON.cutbarsInformation),\n map(finishingTemplateJSON.labels, (finishingTemplateLabelJSON: any) => FinishingAndFinishingTemplateLabelOverviewList.fromJSON(finishingTemplateLabelJSON))\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {isNil, max} from 'lodash-es';\n\nexport class CutbarPropertiesForMachineQuality {\n private _commercialLengthInMM: number;\n private _deficitLengthOfTopCarpetInPicks: number;\n private _deficitLengthOfBottomCarpetInPicks: number;\n\n public constructor(commercialLengthInMM: number, deficitLengthOfTopCarpetInPicks: number, deficitLengthOfBottomCarpetInPicks: number) {\n this._commercialLengthInMM = commercialLengthInMM;\n this._deficitLengthOfTopCarpetInPicks = deficitLengthOfTopCarpetInPicks;\n this._deficitLengthOfBottomCarpetInPicks = deficitLengthOfBottomCarpetInPicks;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public get deficitLengthOfTopCarpetInPicks(): number {\n return this._deficitLengthOfTopCarpetInPicks;\n }\n\n public get deficitLengthOfBottomCarpetInPicks(): number {\n return this._deficitLengthOfBottomCarpetInPicks;\n }\n\n public static fromJSON(cutbarPropertiesForCompatibilityWithMachineQualityJSON: any): CutbarPropertiesForMachineQuality {\n return !isNil(cutbarPropertiesForCompatibilityWithMachineQualityJSON)\n ? new CutbarPropertiesForMachineQuality(\n cutbarPropertiesForCompatibilityWithMachineQualityJSON.commercialLengthInMM,\n cutbarPropertiesForCompatibilityWithMachineQualityJSON.deficitLengthOfTopCarpetInPicks,\n cutbarPropertiesForCompatibilityWithMachineQualityJSON.deficitLengthOfBottomCarpetInPicks\n )\n : null;\n }\n\n public hasDeficitLength(): boolean {\n return !isNil(this.deficitLengthOfBottomCarpetInPicks) || !isNil(this.deficitLengthOfTopCarpetInPicks);\n }\n\n public getGreatestDeficitLength(): number {\n return this.hasDeficitLength() ? max([this.deficitLengthOfTopCarpetInPicks, this.deficitLengthOfBottomCarpetInPicks]) : 0;\n }\n\n public getNumberOfIncompatibilities(): number {\n let result = 0;\n\n if (this.hasDeficitLength()) {\n if (!isNil(this.deficitLengthOfTopCarpetInPicks)) {\n result++;\n }\n\n if (!isNil(this.deficitLengthOfBottomCarpetInPicks)) {\n result++;\n }\n }\n\n return result;\n }\n}\n","import {CuttingLineProperties} from '@domain/textile-data/finishing-and-finishing-template/cutting-line-properties';\nimport {FoldingCorrectionProperties} from '@domain/textile-data/finishing-and-finishing-template/folding-correction-properties';\nimport {CutbarPropertiesForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/cutbar-properties-for-machine-quality';\nimport {isNil} from 'lodash-es';\n\nexport class CutbarsInformationForMachineQuality {\n private _cutbarBeforeProperties: CutbarPropertiesForMachineQuality;\n private _cutbarAfterProperties: CutbarPropertiesForMachineQuality;\n private _cuttingLineProperties: CuttingLineProperties;\n private _foldingCorrectionProperties: FoldingCorrectionProperties;\n\n public constructor(\n cutbarBeforeProperties: CutbarPropertiesForMachineQuality,\n cutbarAfterProperties: CutbarPropertiesForMachineQuality,\n cuttingLineProperties: CuttingLineProperties,\n foldingCorrectionProperties: FoldingCorrectionProperties\n ) {\n this._cutbarBeforeProperties = cutbarBeforeProperties;\n this._cutbarAfterProperties = cutbarAfterProperties;\n this._cuttingLineProperties = cuttingLineProperties;\n this._foldingCorrectionProperties = foldingCorrectionProperties;\n }\n\n public get cutbarBeforeProperties(): CutbarPropertiesForMachineQuality {\n return this._cutbarBeforeProperties;\n }\n\n public get cutbarAfterProperties(): CutbarPropertiesForMachineQuality {\n return this._cutbarAfterProperties;\n }\n\n public get cuttingLineProperties(): CuttingLineProperties {\n return this._cuttingLineProperties;\n }\n\n public get foldingCorrectionProperties(): FoldingCorrectionProperties {\n return this._foldingCorrectionProperties;\n }\n\n public static fromJSON(cutbarsInformationForCompatibilityWithMachineQualityJSON: any): CutbarsInformationForMachineQuality {\n return !isNil(cutbarsInformationForCompatibilityWithMachineQualityJSON)\n ? new CutbarsInformationForMachineQuality(\n CutbarPropertiesForMachineQuality.fromJSON(cutbarsInformationForCompatibilityWithMachineQualityJSON.cutbarBeforeProperties),\n CutbarPropertiesForMachineQuality.fromJSON(cutbarsInformationForCompatibilityWithMachineQualityJSON.cutbarAfterProperties),\n CuttingLineProperties.fromJSON(cutbarsInformationForCompatibilityWithMachineQualityJSON.cuttingLineProperties),\n FoldingCorrectionProperties.fromJSON(cutbarsInformationForCompatibilityWithMachineQualityJSON.foldingCorrectionProperties)\n )\n : null;\n }\n\n public hasDeficitLength(): boolean {\n return (!isNil(this.cutbarBeforeProperties) && this.cutbarBeforeProperties.hasDeficitLength()) || (!isNil(this.cutbarAfterProperties) && this.cutbarAfterProperties.hasDeficitLength());\n }\n\n public getGreatestDeficitLength(): number {\n let result = 0;\n\n if (this.hasDeficitLength()) {\n if (!isNil(this.cutbarBeforeProperties) && this.cutbarBeforeProperties.getGreatestDeficitLength() > result) {\n result = this.cutbarBeforeProperties.getGreatestDeficitLength();\n }\n\n if (!isNil(this.cutbarAfterProperties) && this.cutbarAfterProperties.getGreatestDeficitLength() > result) {\n result = this.cutbarAfterProperties.getGreatestDeficitLength();\n }\n }\n\n return result;\n }\n\n public getNumberOfIncompatibilities(): number {\n let result = 0;\n\n if (this.hasDeficitLength()) {\n if (!isNil(this.cutbarBeforeProperties)) {\n result += this.cutbarBeforeProperties.getNumberOfIncompatibilities();\n }\n\n if (!isNil(this.cutbarAfterProperties)) {\n result += this.cutbarAfterProperties.getNumberOfIncompatibilities();\n }\n }\n return result;\n }\n}\n","import {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {FinishingAndFinishingTemplateLabelOverviewList} from '@presentation/pages/textile-data/finishing-template/overview/finishing-and-finishing-template-label-overview-list';\nimport {CutbarsInformationForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/cutbars-information-for-machine-quality';\nimport {isNil} from 'lodash-es';\n\nexport class FinishingTemplateForMachineQuality {\n private _id: number;\n private _name: string;\n private _finishingType: FinishingType;\n private _cutbarsInformation: CutbarsInformationForMachineQuality;\n private _labels: FinishingAndFinishingTemplateLabelOverviewList[];\n\n public constructor(id: number, name: string, finishingType: FinishingType, cutbarsInformation: CutbarsInformationForMachineQuality, labels: FinishingAndFinishingTemplateLabelOverviewList[]) {\n this._id = id;\n this._name = name;\n this._finishingType = finishingType;\n this._cutbarsInformation = cutbarsInformation;\n this._labels = labels;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get finishingType(): FinishingType {\n return this._finishingType;\n }\n\n public get cutbarsInformation(): CutbarsInformationForMachineQuality {\n return this._cutbarsInformation;\n }\n\n public get labels(): FinishingAndFinishingTemplateLabelOverviewList[] {\n return this._labels;\n }\n\n public static fromJSON(finishingTemplateForForCompatibilityWithMachineQualityJSON: any): FinishingTemplateForMachineQuality {\n return new FinishingTemplateForMachineQuality(\n finishingTemplateForForCompatibilityWithMachineQualityJSON.id,\n finishingTemplateForForCompatibilityWithMachineQualityJSON.name,\n finishingTemplateForForCompatibilityWithMachineQualityJSON.finishingType as FinishingType,\n CutbarsInformationForMachineQuality.fromJSON(finishingTemplateForForCompatibilityWithMachineQualityJSON.cutbarsInformation),\n finishingTemplateForForCompatibilityWithMachineQualityJSON.labels?.map((finishingTemplateLabelJSON: any) => FinishingAndFinishingTemplateLabelOverviewList.fromJSON(finishingTemplateLabelJSON))\n );\n }\n\n public hasCutbarsInformation(): boolean {\n return !isNil(this.cutbarsInformation);\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Pattern} from '@domain/pattern';\nimport {PropertyValue} from '@domain/property-value';\nimport {FinishingTemplate} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template';\nimport {ImageForFinishingImageLabel} from '@domain/textile-data/finishing-and-finishing-template/image-for-finishing-image-label';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {FinishingTemplates} from '@infrastructure/http/finishing-template/finishing-templates';\nimport {OverviewListFinishingTemplate} from '@presentation/pages/textile-data/finishing-template/overview/overview-list-finishing-template';\nimport {FinishingTemplateForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/finishing-template-for-machine-quality';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {each, map} from 'lodash-es';\nimport {forkJoin, Observable} from 'rxjs';\nimport {map as rxjsMap, retry} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpFinishingTemplatesService implements FinishingTemplates {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}finishingtemplates/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates`).pipe(\n rxjsMap((finishingTemplatesJSON: any) => {\n return map(finishingTemplatesJSON, (finishingTemplateJSON: any) => {\n return OverviewListFinishingTemplate.fromJSON(finishingTemplateJSON);\n });\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/${id}`).pipe(\n rxjsMap((finishingTemplateJSON: any) => {\n return FinishingTemplate.fromJSON(finishingTemplateJSON);\n })\n );\n }\n\n public save(item: FinishingTemplate): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}finishingtemplates`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: FinishingTemplate): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}finishingtemplates/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}finishingtemplates/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public getFinishingTemplatesForMachineQuality(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/machine-quality/${machineQualityId}`).pipe(\n rxjsMap((finishingTemplatesJSON: any) => {\n return map(finishingTemplatesJSON, (finishingTempalateJSON: any) => {\n return FinishingTemplateForMachineQuality.fromJSON(finishingTempalateJSON);\n });\n })\n );\n }\n\n public getFinishingTemplatesForQuality(weaveStructureId: number, pickDensity: number): Observable {\n const params = new HttpParams().set('weave-structure-id', weaveStructureId).set('pick-density', pickDensity);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}finishingtemplates`, {params}).pipe(\n rxjsMap((finishingTemplatesJSON: any) => {\n return finishingTemplatesJSON.map((finishingTempalateJSON: any) => {\n return FinishingTemplateForMachineQuality.fromJSON(finishingTempalateJSON);\n });\n })\n );\n }\n\n public getListOfFinishingTypes(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/finishing-types`).pipe(\n rxjsMap((response: PropertyValue) => {\n return response;\n })\n );\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/custom-settings`).pipe(\n rxjsMap((response: PropertyValue[]) => {\n return response;\n })\n );\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n const settingsToSave: PropertyValue[] = [];\n\n each(chosenSettings, (chosenSetting: PropertyValue) => {\n settingsToSave.push({propertyName: chosenSetting.propertyName, propertyValue: chosenSetting.propertyValue});\n });\n\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}finishingtemplates/custom-settings`, settingsToSave);\n }\n\n public getCategoriesWithComponents(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/categories-with-components`).pipe(\n rxjsMap((placeholderCategoriesJSON: any) => {\n return map(placeholderCategoriesJSON, (placeholderCategoryJSON: any) => {\n return PlaceholderCategory.fromJSON(placeholderCategoryJSON);\n });\n })\n );\n }\n\n public getImagesForLabels(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/label-images`).pipe(\n rxjsMap((imagesForFinishingImageLabelJSON: any) => {\n return map(imagesForFinishingImageLabelJSON, (imageForFinishingImageLabelJSON: any) => {\n return ImageForFinishingImageLabel.fromJSON(imageForFinishingImageLabelJSON);\n });\n })\n );\n }\n\n public getFoldingTypes(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/folding-types`).pipe(\n rxjsMap((patternsJSON: any) => {\n return map(patternsJSON, (patternJSON: any) => {\n return Pattern.fromFoldingTypeJSON(patternJSON);\n });\n })\n );\n }\n\n public uploadImagesForLabels(imagesForFinishingImageLabel: ImageForFinishingImageLabel[]): Observable {\n return forkJoin(\n map(imagesForFinishingImageLabel, (imageForFinishingImageLabel: ImageForFinishingImageLabel) => {\n const formDataToUpload = new FormData();\n formDataToUpload.append('file', imageForFinishingImageLabel.file, imageForFinishingImageLabel.file.name);\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint(2)}finishingtemplates/label-images/image`, formDataToUpload).pipe(\n rxjsMap((response: any) => {\n imageForFinishingImageLabel.imageId = response.imageId;\n imageForFinishingImageLabel.id = response.id;\n return imageForFinishingImageLabel;\n })\n );\n })\n );\n }\n\n public getImageForLabels(imageId: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/label-images/image?imageId=${imageId}`, {responseType: 'blob'}).pipe(retry(2));\n }\n\n public deleteImageForLabels(imageId: string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}finishingtemplates/label-images/${imageId}`);\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/${id}/conflicts`).pipe(\n rxjsMap((conflictsJSON: any) => {\n return map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON));\n })\n );\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishingtemplates/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: FinishingTemplate): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}finishingtemplates/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Pattern} from '@domain/pattern';\nimport {CutbarPattern} from '@domain/textile-data/finishing-and-finishing-template/finishing/cutbar-pattern';\nimport {Finishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const FINISHINGS = new InjectionToken('Finishings');\n\nexport interface Finishings\n extends Repository,\n UniqueIdentifierObjectRepository,\n ConflictsRepository,\n CustomSettingsObjectRepository,\n NameGenerationRepository {\n getAll(parameters?: Partial): Observable;\n\n getPatternsForCutbarForMachineQuality(parameters: Partial, includeDrawings?: boolean): Observable;\n\n getFinishingsForMachineQualityId(parameters?: Partial): Observable;\n\n generateFinishingForFinishingTemplateAndMachineQuality(finishingTemplateId: number, machineQualityId: number): Observable;\n\n generateFinishingForFinishingTemplateAndQuality(finishingTemplateId: number, weaveStructureId: number, pickDensity: number): Observable;\n\n getOverviewListFinishingById(id: number): Observable;\n\n getMinNumberOfPicks(foldingTypeName: string, machineQualityId: number): Observable;\n\n getMinNumberOfCutbarPicks(foldingTypeName: string, weaveStructureId: number): Observable;\n\n getFoldingTypes(weaveStructureId: number): Observable;\n}\n\nexport interface GetAllFinishingsParameters {\n showOnlyLatestVersion: boolean;\n machineQualityId: number;\n weaveStructureId: number;\n onlyRecommended: boolean;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Pattern} from '@domain/pattern';\nimport {PropertyValue} from '@domain/property-value';\nimport {CutbarPattern} from '@domain/textile-data/finishing-and-finishing-template/finishing/cutbar-pattern';\nimport {Finishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing';\nimport {ExtendedHttpParams} from '@infrastructure/http/extended-http-params';\nimport {Finishings, GetAllFinishingsParameters} from '@infrastructure/http/finishing/finishings';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpFinishingsService implements Finishings {\n private readonly VARIABLE_NAMES_TO_HTTP_PARAMS_MAP = new Map([\n ['showOnlyLatestVersion', 'only-latest-versions'],\n ['onlyRecommended', 'only-recommended'],\n ['machineQualityId', 'machine-quality-id'],\n ['weaveStructureId', 'weave-structure-id']\n ]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}finishings/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public getPatternsForCutbarForMachineQuality(parameters?: Partial, includeDrawings?: boolean): Observable {\n let params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n params = params.set('include-drawings', includeDrawings ?? false);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint(2)}finishings/cutbar-patterns`, {params})\n .pipe(rxjsMap((cutbarPatternsJSON: any) => map(cutbarPatternsJSON, (cutbarPatternJSON: any) => CutbarPattern.fromJSON(cutbarPatternJSON))));\n }\n\n public getFinishingsForMachineQualityId(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}finishings/machine-quality/${parameters.machineQualityId}`, {params})\n .pipe(rxjsMap((finishingsJSON: any) => map(finishingsJSON, (finishingJSON: any) => OverviewListFinishing.fromJSON(finishingJSON))));\n }\n\n public generateFinishingForFinishingTemplateAndMachineQuality(finishingTemplateId: number, machineQualityId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}finishings/finishing-template/${finishingTemplateId}/machine-quality/${machineQualityId}`)\n .pipe(rxjsMap((finishingJSON: any) => Finishing.fromJSON(finishingJSON)));\n }\n\n public generateFinishingForFinishingTemplateAndQuality(finishingTemplateId: number, weaveStructureId: number, pickDensity: number): Observable {\n const params = new HttpParams().set('weave-structure-id', weaveStructureId).set('pick-density', pickDensity);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint(2)}finishings/finishing-template/${finishingTemplateId}`, {params})\n .pipe(rxjsMap((finishingJSON: any) => Finishing.fromJSON(finishingJSON)));\n }\n\n public getOverviewListFinishingById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishings/${id}`).pipe(rxjsMap((finishingJSON: any) => OverviewListFinishing.fromJSON(finishingJSON)));\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}finishings/${id}`);\n }\n\n public getAll(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}finishings`, {params})\n .pipe(rxjsMap((finishingsJSON: any) => map(finishingsJSON, (finishingJSON: any) => OverviewListFinishing.fromJSON(finishingJSON))));\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishings/${id}`).pipe(rxjsMap((finishingJSON: any) => Finishing.fromJSON(finishingJSON)));\n }\n\n public save(item: Finishing): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}finishings`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: Finishing): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}finishings/${item.id}`, item.toJSON());\n }\n\n public getMinNumberOfPicks(foldingTypeName: string, machineQualityId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}finishings/folding-types/${foldingTypeName}/min-number-of-cutbar-picks/machine-quality-id=${machineQualityId}`)\n .pipe(rxjsMap((response: {minNumberOfCutbarPicks: number}) => response.minNumberOfCutbarPicks));\n }\n\n public getMinNumberOfCutbarPicks(foldingTypeName: string, weaveStructureId: number): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject({weaveStructureId}, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint(2)}finishings/folding-types/${foldingTypeName}/min-number-of-cutbar-picks`, {params})\n .pipe(rxjsMap((response: {minNumberOfCutbarPicks: number}) => response.minNumberOfCutbarPicks));\n }\n\n public getFoldingTypes(weaveStructureId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishings/folding-types/weave-structure-id/${weaveStructureId}`).pipe(\n rxjsMap((patternsJSON: any) => {\n return patternsJSON.map((patternJSON: any) => {\n return Pattern.fromFoldingTypeJSON(patternJSON);\n });\n })\n );\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}finishings/${id}/conflicts`).pipe(\n rxjsMap((conflictsJSON: any) => {\n return map(conflictsJSON, (conflictJSON: any) => {\n return Conflict.fromJSON(conflictJSON);\n });\n })\n );\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishings/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}finishings/custom-settings/already-adjusted`)\n .pipe(rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => response.alreadyAdjustedCustomSettings));\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}finishings/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}finishings/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: Finishing): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}finishings/custom-settings/generate-name`, item.toJSON(false));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Floorplan} from '@domain/machine/floorplan';\nimport {MachineFile} from '@domain/machine/machine-file';\nimport {CustomSettingsObjectRepository} from '@infrastructure/http/custom-settings-object-repository';\nimport {OverviewMachine} from '@presentation/pages/machine-overview/overview-machine';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {MachineOverviewMessageFilter} from '@presentation/pages/machine-overview/sidebar/machine-overview-message-filter';\nimport {Message} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\n\nexport const MACHINE_OVERVIEW = new InjectionToken('MachineOverview');\n\nexport interface MachineOverview extends CustomSettingsObjectRepository {\n getFloorplan(): Observable;\n\n updateMachinePosition(machine: OverviewMachine): Observable;\n\n addMachineToFloorplan(machine: OverviewMachine): Observable;\n\n getMessages(start: number, count: number, filter: Partial): Observable;\n\n saveMachineFiles(machineId: number, files: MachineFile[]): Observable;\n\n deleteMachineFiles(machineId: number, files: MachineFile[]): Observable;\n\n getRemoteAccessUrl(machineId: number): Observable;\n\n getRootGroup(): Observable;\n}\n","import {CarpetWeaveQuality} from '@domain/textile-data/machine-quality/carpet-weave-quality';\nimport {VelvetWeaveQuality} from '@domain/textile-data/machine-quality/velvet-weave-quality';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\n\nconst weaveQualityClassFromQualityTypeMap = new Map([\n [WeaveQualityType.CARPET, CarpetWeaveQuality],\n [WeaveQualityType.VELVET, VelvetWeaveQuality]\n]);\n\nexport function getWeaveQualityClassFromQualityType(qualityType: WeaveQualityType): any {\n return weaveQualityClassFromQualityTypeMap.get(qualityType);\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {getWeaveQualityClassFromQualityType} from '@application/helper/textile-data/machine-quality/get-weave-quality-class-from-quality-type';\nimport {PropertyValue} from '@domain/property-value';\nimport {CommercialMachineQuality} from '@domain/textile-data/machine-quality/commercial-machine-quality';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {ExtendedHttpParams} from '@infrastructure/http/extended-http-params';\nimport {GetAllMachineQualitiesParameters, MachineQualities} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {CheckName, Conflict, GridModel, Unit} from '@vdw/angular-component-library';\nimport {each, isNil, map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpMachineQualitiesService implements MachineQualities {\n private readonly VARIABLE_NAMES_TO_HTTP_PARAMS_MAP = new Map([\n ['showOnlyLatestVersion', 'only-latest-versions'],\n ['numberOfCreelPositions', 'creel-positions']\n ]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public update(item: WeaveQuality): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}machinequalities/${item.id}`, item.toJSON());\n }\n\n public updateOrCreateNewVersion(item: WeaveQuality): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}machinequalities/${item.id}`, item.toJSON()).pipe(rxjsMap((response: {qualityId: number}) => response.qualityId));\n }\n\n public getSlice(gridModel: GridModel, parameters?: Partial): Observable {\n const url = `${this.backendConfiguration.getEndpoint()}machinequalities/get`;\n const body = gridModel.toJSON();\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .post(url, body, {params})\n .pipe(rxjsMap((machineQualitiesJSON: any) => machineQualitiesJSON.map((machineQualityJSON: any) => OverviewListMachineQuality.fromJSON(machineQualityJSON))));\n }\n\n public getAll(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities`, {params}).pipe(\n rxjsMap((machineQualitiesJSON: any) => {\n return map(machineQualitiesJSON, (machineQualityJSON: any) => {\n return OverviewListMachineQuality.fromJSON(machineQualityJSON);\n });\n })\n );\n }\n\n public getPathWidths(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/path-widths`).pipe(\n rxjsMap((pathWidthsJSON: any) => {\n return map(pathWidthsJSON, (pathWidthJSON: any) => {\n return PathWidth.fromJSON(pathWidthJSON);\n });\n })\n );\n }\n\n public getFactorForConversionFromDentsToMillimeters(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/factor-for-conversion-from-dents-to-millimeters`).pipe(\n rxjsMap((response: {factorForConversionFromDentsToMillimeters: number}) => {\n return response.factorForConversionFromDentsToMillimeters;\n })\n );\n }\n\n public getFactorForConversionFromMillimetersToDents(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/factor-for-conversion-from-millimeters-to-dents`).pipe(\n rxjsMap((response: {factorForConversionFromMillimetersToDents: number}) => {\n return response.factorForConversionFromMillimetersToDents;\n })\n );\n }\n\n public getFactorForConversionFromMillimetersToPicks(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/factor-for-conversion-from-millimeters-to-picks`).pipe(\n rxjsMap((response: {factorForConversionFromMillimetersToPicks: number}) => {\n return response.factorForConversionFromMillimetersToPicks;\n })\n );\n }\n\n public getFactorForConversionFromPicksToMillimeters(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/factor-for-conversion-from-picks-to-millimeters`).pipe(\n rxjsMap((response: {factorForConversionFromPicksToMillimeters: number}) => {\n return response.factorForConversionFromPicksToMillimeters;\n })\n );\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/custom-settings`).pipe(\n rxjsMap((response: PropertyValue[]) => {\n return response;\n })\n );\n }\n\n public getSuggestionForWeftDensity(weaveStructureId: number, pickDensity: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/weftdensity-suggestion/weave-structure-id=${weaveStructureId}&pick-density=${pickDensity}`).pipe(\n rxjsMap((response: {suggestionForWeftDensity: number}) => {\n return response.suggestionForWeftDensity;\n })\n );\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}machinequalities/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public save(item: WeaveQuality): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}machinequalities`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n const settingsToSave: PropertyValue[] = [];\n\n each(chosenSettings, (chosenSetting: PropertyValue) => {\n let propertyValue: any = chosenSetting.propertyValue;\n\n if (!isNil(Unit.getKeyFromValue(chosenSetting.propertyValue))) {\n propertyValue = Unit.getKeyFromValue(chosenSetting.propertyValue);\n }\n\n settingsToSave.push({propertyName: chosenSetting.propertyName, propertyValue});\n });\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}machinequalities/custom-settings`, settingsToSave);\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}machinequalities/${id}`);\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/${id}`).pipe(\n rxjsMap((machineQualityJSON: any) => {\n return getWeaveQualityClassFromQualityType(WeaveQualityType[`${machineQualityJSON['type']}`]).fromJSON(machineQualityJSON);\n })\n );\n }\n\n public getListOfCommercialMachineQualities(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/commercial-machine-qualities`).pipe(\n rxjsMap((commercialMachineQualitiesJSON: any) => {\n return map(commercialMachineQualitiesJSON, (commercialMachineQualityJSON: any) => {\n return CommercialMachineQuality.fromJSON(commercialMachineQualityJSON);\n });\n })\n );\n }\n\n public getActiveMachineQualityForMachine(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/machine/${id}/active`).pipe(rxjsMap((machineQualityJSON: any) => WeaveQuality.fromJSON(machineQualityJSON)));\n }\n\n public getPossibleMachineQualitiesForMachine(id: number, parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/machine/${id}/possible`, {params}).pipe(\n rxjsMap((machineQualitiesJSON: any) => {\n return map(machineQualitiesJSON, (machineQualityJSON: any) => {\n return WeaveQuality.fromJSON(machineQualityJSON);\n });\n })\n );\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machinequalities/${id}/conflicts`).pipe(\n rxjsMap((conflictsJSON: any) => {\n return map(conflictsJSON, (conflictJSON: any) => {\n return Conflict.fromJSON(conflictJSON);\n });\n })\n );\n }\n\n public getListOfConditionPatterns(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/jute/condition-patterns`).pipe(\n rxjsMap((conditionPatterns: string[]) => {\n return conditionPatterns;\n })\n );\n }\n\n public getListOfPatternFields(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}machinequalities/jute/pattern-fields`).pipe(\n rxjsMap((conditionPatterns: string[]) => {\n return conditionPatterns;\n })\n );\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/custom-settings/name-generation-properties`)\n .pipe(rxjsMap((nameGenerationProperties: string[]) => nameGenerationProperties));\n }\n\n public generateName(item: WeaveQuality): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}machinequalities/custom-settings/generate-name`, item.toJSON());\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n const url = `${this.backendConfiguration.getEndpoint()}machinequalities/${columnIdentifier}/possible-values`;\n return this.httpClient.get(url).pipe(rxjsMap((possibleValues: string[] | number[]) => possibleValues));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {CommercialMachineQuality} from '@domain/textile-data/machine-quality/commercial-machine-quality';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {CustomSettingsObjectRepository} from '@infrastructure/http/custom-settings-object-repository';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {GetSliceRepository} from '../get-slice-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const MACHINE_QUALITIES = new InjectionToken('MachineQualities');\n\nexport interface MachineQualities\n extends Repository,\n UniqueIdentifierObjectRepository,\n CustomSettingsObjectRepository,\n ConflictsRepository,\n NameGenerationRepository,\n GetSliceRepository {\n getSlice(gridModel: GridModel, parameters?: Partial): Observable;\n\n getAll(parameters?: Partial): Observable;\n\n getSuggestionForWeftDensity(weaveStructureId: number, pickDensity: number): Observable;\n\n getFactorForConversionFromMillimetersToPicks(machineQualityId: number): Observable;\n\n getFactorForConversionFromPicksToMillimeters(machineQualityId: number): Observable;\n\n getFactorForConversionFromMillimetersToDents(machineQualityId: number): Observable;\n\n getFactorForConversionFromDentsToMillimeters(machineQualityId: number): Observable;\n\n getPathWidths(machineQualityId: number): Observable;\n\n getListOfCommercialMachineQualities(): Observable;\n\n getActiveMachineQualityForMachine(id: number): Observable;\n\n getPossibleMachineQualitiesForMachine(id: number, parameters?: Partial): Observable;\n\n getListOfConditionPatterns(): Observable;\n\n getListOfPatternFields(): Observable;\n\n getPossibleValues(columnIdentifier: string): Observable;\n\n updateOrCreateNewVersion(weaveQuality: WeaveQuality): Observable;\n}\n\nexport interface GetAllMachineQualitiesParameters {\n showOnlyLatestVersion: boolean;\n numberOfCreelPositions: number;\n}\n","import {DyeingMachineType} from '@domain/machine/dyeing-machine-type';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {TuftingMachineType} from '@domain/machine/tufting-machine-type';\nimport {WeavingMachineType} from '@domain/machine/weaving-machine-type';\nimport {WinderMachineType} from '@domain/machine/winder-machine-type';\n\nconst equipmentTypeClassFromEquipmentTypeMap = new Map([\n [MachineType.WEAVING_MACHINE, WeavingMachineType],\n [MachineType.TUFT, TuftingMachineType],\n [MachineType.WINDER, WinderMachineType],\n [MachineType.DYEING, DyeingMachineType],\n [MachineType.PLASTIC_MACHINE, PlasticsMachineType]\n]);\n\nexport function getEquipmentTypeClassFromEquipmentType(equipmentType: MachineType): any {\n return equipmentTypeClassFromEquipmentTypeMap.get(equipmentType);\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {getEquipmentTypeClassFromEquipmentType} from '@application/helper/machine/get-machine-type-class-from-machine-type';\nimport {IdName} from '@domain/id-name';\nimport {BaseMachineType} from '@domain/machine/base-machine-type';\nimport {ControllerType} from '@domain/machine/controller-type';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {Technology} from '@domain/machine/technology';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpMachineTypesService implements UniqueIdentifierObjectRepository {\n private readonly equipmentTypeToBackendRouteMap = new Map([\n [MachineType.WEAVING_MACHINE, 'weaving'],\n [MachineType.TUFT, 'tufting'],\n [MachineType.WINDER, 'winder'],\n [MachineType.DYEING, 'dyeing'],\n [MachineType.PLASTIC_MACHINE, 'plastic']\n ]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(equipmentType: MachineType): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/${this.equipmentTypeToBackendRouteMap.get(equipmentType)}`).pipe(\n map((equipmentTypesJSON: any) =>\n equipmentTypesJSON.map((equipmentTypeJSON: any) => {\n return getEquipmentTypeClassFromEquipmentType(equipmentType).fromJSON(equipmentTypeJSON);\n })\n )\n );\n }\n\n public getById(id: number, equipmentType: MachineType): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/${this.equipmentTypeToBackendRouteMap.get(equipmentType)}/${id}`).pipe(\n map((machineTypeJSON: any) => {\n return getEquipmentTypeClassFromEquipmentType(equipmentType).fromJSON(machineTypeJSON);\n })\n );\n }\n\n public save(machineType: T, equipmentType: MachineType): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getMachineEndpoint()}machine-types/${this.equipmentTypeToBackendRouteMap.get(equipmentType)}`, machineType.toJSON())\n .pipe(map((response: {id: number}) => response.id));\n }\n\n public getMachineTechnologies(equipmentType: MachineType): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/technologies/${equipmentType.toString()}`).pipe(\n map((technologiesJSON: any) => {\n return technologiesJSON.map((technologyJSON: any) => {\n return Technology.fromJSON(technologyJSON);\n });\n })\n );\n }\n\n public getControllerTypes(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/dyeing-machine-controllers`).pipe(\n map((controllerTypesJSON: any) => {\n return controllerTypesJSON.map((controllerTypeJSON: any) => {\n return ControllerType.fromJSON(controllerTypeJSON);\n });\n })\n );\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/check-name`, {params}).pipe(\n map((response: {machineTypeNameAvailable: boolean}) => {\n return response.machineTypeNameAvailable;\n })\n );\n }\n\n public machineTypesForSubscription(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/subscription`).pipe(map((response: any) => response as IdName[]));\n }\n}\n","import {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {ColorStubFactory} from '@vdw/angular-component-library';\nimport {times} from 'lodash-es';\n\nexport class ColorSetStubFactory {\n public static getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(id: number, numberOfCreelPositions: number): ColorSet {\n return new ColorSet(\n id,\n `Color set ${id}`,\n times(numberOfCreelPositions, (creelPositionIndex: number) => {\n return new CreelPosition([new HorizontalPositionOfColorCreelPosition(3, ColorStubFactory.getRandomColorWithId(creelPositionIndex))]);\n }),\n false,\n null,\n null\n );\n }\n\n public static getRandomColorSetWithIdAndName(id: number, name: string): ColorSet {\n return new ColorSet(\n id,\n name,\n [\n new CreelPosition([new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(1, '#10bb12'))]),\n new CreelPosition([\n new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(2, '#EFA355')),\n new HorizontalPositionOfGroupCreelPosition(2, [\n new HorizontalPositionOfColorCreelPosition(1, ColorStubFactory.getRandomColorWithIdAndColorCode(3, '#DD3406')),\n new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(4, '#00f33c')),\n new HorizontalPositionOfColorCreelPosition(4, ColorStubFactory.getRandomColorWithIdAndColorCode(5, '#c62adc'))\n ]),\n new HorizontalPositionOfColorCreelPosition(3, ColorStubFactory.getRandomColorWithIdAndColorCode(6, '#2e6cff')),\n new HorizontalPositionOfColorCreelPosition(1, ColorStubFactory.getRandomColorWithIdAndColorCode(7, '#efd800')),\n new HorizontalPositionOfGroupCreelPosition(3, [\n new HorizontalPositionOfColorCreelPosition(3, ColorStubFactory.getRandomColorWithIdAndColorCode(8, '#537dff')),\n new HorizontalPositionOfColorCreelPosition(4, ColorStubFactory.getRandomColorWithIdAndColorCode(9, '#ffc1de'))\n ])\n ]),\n new CreelPosition([\n new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(8, '#9867bb')),\n new HorizontalPositionOfColorCreelPosition(1, ColorStubFactory.getRandomColorWithIdAndColorCode(9, '#c4dbff'))\n ]),\n new CreelPosition([\n new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(10, '#3f53ff')),\n new HorizontalPositionOfColorCreelPosition(3, ColorStubFactory.getRandomColorWithIdAndColorCode(11, '#fff46a')),\n new HorizontalPositionOfColorCreelPosition(1, ColorStubFactory.getRandomColorWithIdAndColorCode(12, '#ef7513'))\n ]),\n new CreelPosition([\n new HorizontalPositionOfColorCreelPosition(2, ColorStubFactory.getRandomColorWithIdAndColorCode(13, '#3f53ff')),\n new HorizontalPositionOfColorCreelPosition(3, ColorStubFactory.getRandomColorWithIdAndColorCode(14, '#fff46a')),\n new HorizontalPositionOfColorCreelPosition(1, ColorStubFactory.getRandomColorWithIdAndColorCode(15, '#ef7513'))\n ])\n ],\n false,\n null,\n null\n );\n }\n\n public static getRandomColorSetWithId(id: number): ColorSet {\n return this.getRandomColorSetWithIdAndName(id, `Color set ${id}`);\n }\n\n public static getRandomColorSet(): ColorSet {\n return this.getRandomColorSetWithId(1);\n }\n}\n","import {OverviewListYarnTypeStubFactory} from '@application/helper/textile-data/yarn-type/overview-list-yarn-type-stub-factory';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {times} from 'lodash-es';\n\nexport class YarnSetStubFactory {\n public static getRandomYarnSetOverviewListWithIdAndNumberOfCreelPositions(id: number, numberOfCreelPositions: number): YarnSet {\n return new YarnSet(\n id,\n `Yarn set ${id}`,\n times(numberOfCreelPositions, (creelPositionIndex: number) => {\n return new CreelPosition([new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(creelPositionIndex))]);\n }),\n false\n );\n }\n\n public static getRandomYarnSetWithIdAndName(id: number, name: string): YarnSet {\n return new YarnSet(\n 1,\n name,\n [\n new CreelPosition([new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(1))]),\n new CreelPosition([\n new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(1)),\n new HorizontalPositionOfYarnTypeCreelPosition(1, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(2)),\n new HorizontalPositionOfYarnTypeCreelPosition(5, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(3))\n ]),\n new CreelPosition([\n new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(1)),\n new HorizontalPositionOfYarnTypeCreelPosition(5, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(3))\n ]),\n new CreelPosition([\n new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(1)),\n new HorizontalPositionOfYarnTypeCreelPosition(1, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(2)),\n new HorizontalPositionOfYarnTypeCreelPosition(5, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(3))\n ]),\n new CreelPosition([\n new HorizontalPositionOfYarnTypeCreelPosition(3, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(1)),\n new HorizontalPositionOfYarnTypeCreelPosition(1, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(2)),\n new HorizontalPositionOfYarnTypeCreelPosition(5, OverviewListYarnTypeStubFactory.getRandomOverviewListYarnTypeWithId(3))\n ])\n ],\n false\n );\n }\n\n public static getRandomYarnSetWithId(id: number): YarnSet {\n return this.getRandomYarnSetWithIdAndName(id, `Yarn set ${id}`);\n }\n}\n","import {ColorSetStubFactory} from '@application/helper/textile-data/color-set/color-set-stub-factory';\nimport {YarnSetStubFactory} from '@application/helper/textile-data/yarn-set/yarn-set-stub-factory';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\n\nexport class ColoredYarnSetStubFactory {\n public static getRandomColoredYarnSet(): ColoredYarnSet {\n return ColoredYarnSetStubFactory.getRandomColoredYarnSetWithId(1);\n }\n\n public static getRandomColoredYarnSetWithId(id: number): ColoredYarnSet {\n return this.getRandomColoredYarnSetWithIdAndName(id, `ColoredYarnSet ${id}`);\n }\n\n public static getRandomColoredYarnSetWithIdAndName(id: number, name: string): ColoredYarnSet {\n return new ColoredYarnSet(id, name, ColorSetStubFactory.getRandomColorSetWithId(1), YarnSetStubFactory.getRandomYarnSetWithId(1), false, null, []);\n }\n\n public static getRandomColoredYarnSetWithIdAndNameAndNumberOfCreelPositions(id: number, name: string, numberOfCreelPositions: number): ColoredYarnSet {\n return new ColoredYarnSet(\n id,\n name,\n ColorSetStubFactory.getRandomColorSetOverviewListWithIdAndNumberOfCreelPositions(id, numberOfCreelPositions),\n YarnSetStubFactory.getRandomYarnSetWithId(1),\n false,\n null,\n []\n );\n }\n}\n","export class OverviewListMachineWithCompany {\n private _id: string;\n private _companyId: string;\n\n public constructor(id: string, companyId: string) {\n this._id = id;\n this._companyId = companyId;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get companyId(): string {\n return this._companyId;\n }\n\n public static fromJSON(machineCompanyJSON: any): OverviewListMachineWithCompany {\n return new OverviewListMachineWithCompany(machineCompanyJSON.machineOrderId, machineCompanyJSON.companyId);\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {getMachineClassFromMachineType} from '@application/helper/machine/get-machine-class-from-machine-type';\nimport {ColoredYarnSetStubFactory} from '@application/helper/textile-data/colored-yarn-set/colored-yarn-set-stub-factory';\nimport {Equipment} from '@domain/machine/equipment';\nimport {EquipmentManufacturer} from '@domain/machine/equipment-manufacturer';\nimport {Gauge} from '@domain/machine/gauge';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {PropertyValue} from '@domain/property-value';\nimport {WinderVibrationFormValues} from '@domain/texbi/winder-vibration-form-values';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {Machines} from '@infrastructure/http/machine/machines.interface';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {MachineOverviewListHelper} from '@presentation/pages/machine-overview/machine-overview-list-helper';\nimport {OverviewListMachineWithCompany} from '@presentation/pages/textile-data/company-weave-structure/overview/overview-list-machine-company';\nimport {AssertionUtils, NotImplementedError} from '@vdw/angular-component-library';\nimport {Observable, of as observableOf, throwError} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpMachinesService implements Machines {\n private readonly MACHINE_TYPE_TO_EQUIPMENT_MANUFACTURERS_URL_MAP = new Map([\n [MachineType.WEAVING_MACHINE, 'weaving-machine-manufacturers'],\n [MachineType.TUFT, 'tufting-machine-manufacturers'],\n [MachineType.WINDER, 'winder-machine-manufacturers'],\n [MachineType.DYEING, 'dyeing-machine-manufacturers'],\n [MachineType.PLASTIC_MACHINE, 'plastic-machine-manufacturers']\n ]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public delete(id: number): Observable {\n return throwError(() => new NotImplementedError());\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/${id}`).pipe(\n rxjsMap((machineJSON: any) => {\n return getMachineClassFromMachineType(MachineType[`${machineJSON['machineType']}`]).fromJSON(machineJSON);\n })\n );\n }\n\n public getActiveColoredYarnSetsWithWidthsForMachineId(id: number): Observable {\n const productionOrderColoredYarnSet: OverviewListColoredYarnSetWithStartDent[] = [\n new OverviewListColoredYarnSetWithStartDent(ColoredYarnSetStubFactory.getRandomColoredYarnSetWithId(1), 1, 200),\n new OverviewListColoredYarnSetWithStartDent(ColoredYarnSetStubFactory.getRandomColoredYarnSetWithId(2), 200, 300)\n ];\n\n if (id === 1) {\n productionOrderColoredYarnSet.push(new OverviewListColoredYarnSetWithStartDent(ColoredYarnSetStubFactory.getRandomColoredYarnSetWithId(2), 500, 500));\n }\n\n return observableOf(productionOrderColoredYarnSet);\n }\n\n public getCurrentWeaveQualityForMachineId(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/${id}/machine-quality`).pipe(rxjsMap((machineQualityJSON: any) => WeaveQuality.fromJSON(machineQualityJSON)));\n }\n\n public save(machine: Equipment): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getMachineEndpoint()}machines`, machine.toJSON()).pipe(rxjsMap((response: number) => response));\n }\n\n public update(machine: Equipment): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getMachineEndpoint()}machines/${machine.id}`, machine.toJSON());\n }\n\n public getMachineManufacturers(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/machine-manufacturers`).pipe(\n rxjsMap((machineManufacturersJSON: any) => {\n return machineManufacturersJSON.map((machineManufacturerJSON: any) => MachineManufacturer.fromJSON(machineManufacturerJSON));\n })\n );\n }\n\n public getEquipmentManufacturers(equipmentType: MachineType): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/${this.MACHINE_TYPE_TO_EQUIPMENT_MANUFACTURERS_URL_MAP.get(equipmentType)}`).pipe(\n rxjsMap((equipmentManufacturersJSON: any) => {\n return equipmentManufacturersJSON.map((equipmentManufacturerJSON: any) => EquipmentManufacturer.fromJSON(equipmentManufacturerJSON));\n })\n );\n }\n\n public getTuftingMachineGauges(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machine-types/tufting-machine-gauges`).pipe(\n rxjsMap((tuftingMachineGaugesJSON: any) => {\n return tuftingMachineGaugesJSON.map((tuftingMachineGaugeJSON: any) => Gauge.fromJSON(tuftingMachineGaugeJSON));\n })\n );\n }\n\n public getMachineGroups(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/machine-groups`).pipe(\n rxjsMap((machineGroupsJSON: any) => {\n return machineGroupsJSON.map((machineGroupJSON: any) => MachineGroup.fromJSON(machineGroupJSON));\n })\n );\n }\n\n public getSummaryForMachine(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/${id}/summary`).pipe(rxjsMap((machineSummaryJSON: any) => MachineSummary.fromJSON(machineSummaryJSON)));\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/check-name`, {params}).pipe(\n rxjsMap((response: {machineNameAvailable: boolean}) => {\n return response.machineNameAvailable;\n })\n );\n }\n\n public getCompatible(toolId?: number, plasticProductId?: number, machineGroupId?: number): Observable {\n let params = new HttpParams();\n\n if (!AssertionUtils.isNullOrUndefined(toolId)) {\n params = params.set('toolId', toolId);\n }\n\n if (!AssertionUtils.isNullOrUndefined(plasticProductId)) {\n params = params.set('plasticProductId', plasticProductId);\n }\n\n if (!AssertionUtils.isNullOrUndefined(machineGroupId)) {\n params = params.set('machineGroupId', machineGroupId);\n }\n\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}compatible/machines`, {params}).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllMachinesWithCompanies(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getMachineEndpoint()}machines/company`)\n .pipe(rxjsMap((machineCompaniesJSON: any) => machineCompaniesJSON.map((machineCompanyJSON: any) => OverviewListMachineWithCompany.fromJSON(machineCompanyJSON))));\n }\n\n public getAllForWeaveStructureId(weaveStructureId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/weavestructure/${weaveStructureId}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllForWeaveProductId(weaveProductId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/weave-product/${weaveProductId}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllForTuftProductId(tuftProductId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/tuft-product/${tuftProductId}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllForPlasticProductId(plasticProductId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/plastic-product/${plasticProductId}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllForMachineQualityId(machineQualityId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}machines/machine-quality/${machineQualityId}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n public getAllBobbinHolderShaftNumbers(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/bobbin-holder-shaft-numbers`).pipe(\n rxjsMap((bobbinHolderShaftNumbers: string[]) => {\n return bobbinHolderShaftNumbers;\n })\n );\n }\n\n public getAllWinderSerialNumbers(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/winder-serial-numbers`).pipe(\n rxjsMap((winderSerialNumbers: string[]) => {\n return winderSerialNumbers;\n })\n );\n }\n\n public saveWinderVibrationFormValues(winderVibrationFormValues: WinderVibrationFormValues): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getWorkerEndpoint()}extrusion/winder-vibration-form`, winderVibrationFormValues.toJSON())\n .pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public getAllForAmountOfCreelPositions(amountOfCreelPositions: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/creel-positions/${amountOfCreelPositions}/compatible`).pipe(rxjsMap(this.mapMachinesJSONToList));\n }\n\n private mapMachinesJSONToList = (machinesJSON: any): MachineOverviewList[] => {\n return machinesJSON.map((machineJSON: any): MachineOverviewList => {\n return MachineOverviewListHelper.fromJSON(machineJSON);\n });\n };\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getMachineEndpoint()}machines/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getMachineEndpoint()}machines/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: Equipment): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getMachineEndpoint()}machines/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {IdName} from '@domain/id-name';\nimport {Equipment} from '@domain/machine/equipment';\nimport {EquipmentManufacturer} from '@domain/machine/equipment-manufacturer';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {WinderVibrationFormValues} from '@domain/texbi/winder-vibration-form-values';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {Repository} from '@infrastructure/http/repository';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {OverviewListMachineWithCompany} from '@presentation/pages/textile-data/company-weave-structure/overview/overview-list-machine-company';\nimport {Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\nexport const MACHINES = new InjectionToken('Machines');\n\nexport interface Machines extends Repository, UniqueIdentifierObjectRepository, CustomSettingsObjectRepository, NameGenerationRepository {\n getActiveColoredYarnSetsWithWidthsForMachineId(id: number): Observable;\n\n getMachineManufacturers(): Observable;\n\n getEquipmentManufacturers(machineType: MachineType): Observable;\n\n getTuftingMachineGauges(): Observable;\n\n getMachineGroups(): Observable;\n\n getSummaryForMachine(id: number): Observable;\n\n getAllMachinesWithCompanies(): Observable;\n\n getAllForWeaveStructureId(weaveStructureId: number): Observable;\n\n getAllForWeaveProductId(weaveProductId: number): Observable;\n\n getCompatible(toolId?: number, plasticProductId?: number, machineGroupId?: number): Observable;\n\n getAllForTuftProductId(tuftProductId: number): Observable;\n\n getAllForPlasticProductId(plasticProductId: number): Observable;\n\n getAllForMachineQualityId(machineQualityId: number): Observable;\n\n getAllWinderSerialNumbers(): Observable;\n\n getAllBobbinHolderShaftNumbers(): Observable;\n\n saveWinderVibrationFormValues(winderVibrationFormValues: WinderVibrationFormValues): Observable;\n\n getAllForAmountOfCreelPositions(amountOfCreelPositions: number): Observable;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {HighestSeverityNotification} from '@domain/notifications/highest-severity-notification';\nimport {Notification} from '@domain/notifications/notification';\nimport {WebNotificationSubscription} from '@domain/notifications/web-notification-subscription';\nimport {EnumUtils} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n@Injectable({providedIn: 'root'})\nexport class HttpNotificationsService {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getSlice(start: number, count: number, priorities: PriorityLevel[], groupId?: number, equipmentId?: number): Observable {\n const filters = priorities.map((priority: PriorityLevel) => EnumUtils.getKeyFromValue(PriorityLevel, priority));\n const params = new HttpParams().set('unread', true).set('start', start).set('count', count);\n\n return this.httpClient\n .post(`${this.backendConfiguration.getAlertingEndpoint()}notifications`, {priorities: filters, groupId, equipmentId}, {params})\n .pipe(map((notificationsJSON: any) => notificationsJSON.map((notifications: any) => Notification.fromJSON(notifications))));\n }\n\n public markAsRead(notificationId?: number): Observable {\n const url = notificationId ? `${this.backendConfiguration.getAlertingEndpoint()}notifications/read/${notificationId}` : `${this.backendConfiguration.getAlertingEndpoint()}notifications/read`;\n return this.httpClient.put(url, null);\n }\n\n public getUnreadCount(): Observable {\n const params = new HttpParams().set('unread', true);\n return this.httpClient.get(`${this.backendConfiguration.getAlertingEndpoint()}notifications/count`, {params});\n }\n\n public addWebNotificationSubscription(webNotificationSubscription: WebNotificationSubscription): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getAlertingEndpoint()}notifications/web-notification-subscription`, webNotificationSubscription.toJSON())\n .pipe(map((response: {id: number}) => response.id));\n }\n\n public deleteWebNotificationSubscription(endpoint: string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getAlertingEndpoint()}notifications/web-notification-subscription`, {body: {endpoint}});\n }\n\n public getHighestSeverityNotifications(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getAlertingEndpoint()}notifications/highest-severity`)\n .pipe(map((notificationsJson: any[]) => notificationsJson.map((notificationJson: any) => HighestSeverityNotification.fromJSON(notificationJson))));\n }\n\n public getHighestSeverityNotificationsForIds(equipmentIds: number[], groupIds: number[]): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getAlertingEndpoint()}notifications/highest-severity`, {equipmentIds, groupIds})\n .pipe(map((notificationsJson: any[]) => notificationsJson.map((notificationJson: any) => HighestSeverityNotification.fromJSON(notificationJson))));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {OrderLinesTarget} from '@domain/order-lines-target.enum';\nimport {OrderLine} from '@domain/orderbook/order-line';\nimport {Repository} from '@infrastructure/http/repository';\nimport {OverviewListOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-order-line';\nimport {GroupedOrderLine} from '@presentation/pages/texfab/production-schedule/add/drawing-library/views/order-lines-grouped-view/grouped-order-line';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\n\nexport const ORDERBOOK = new InjectionToken('Orderbook');\n\nexport interface Orderbook extends Omit, 'getAll' | 'getById'>, Omit {\n getSlice(target: OrderLinesTarget, gridModel: GridModel, productionScheduleId?: string): Observable;\n\n getGroupedOrderlines(gridModel: GridModel, groupedBy: string[]): Observable;\n\n getById(id: number | string, target: OrderLinesTarget): Observable;\n\n getPossibleValues(columnIdentifier: string): Observable;\n}\n","/* eslint-disable brace-style */\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PathLayoutTemplate} from '@domain/path-layout-template/path-layout-template';\nimport {PropertyValue} from '@domain/property-value';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {map, Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPathLayoutTemplatesService\n implements Repository, UniqueIdentifierObjectRepository, CustomSettingsObjectRepository, NameGenerationRepository\n{\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates`)\n .pipe(map((pathLayoutTemplatesJSON: any) => pathLayoutTemplatesJSON.map((pathLayoutTemplateJSON: any) => PathLayoutTemplate.fromJSON(pathLayoutTemplateJSON))));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/${id}`);\n }\n\n public deleteMulti(ids: number[]): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/multi-delete`, {body: ids}).pipe(\n map((reponsesJSON: any) => {\n return reponsesJSON.map((reponseJSON: any) => {\n return MultiDeleteResponse.fromJSON(reponseJSON);\n });\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/${id}`).pipe(map((response: any) => PathLayoutTemplate.fromJSON(response)));\n }\n\n public save(item: PathLayoutTemplate): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: PathLayoutTemplate): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/check-name?name=${identifier}`)\n .pipe(map((response: {isAvailable: boolean}) => response.isAvailable));\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/custom-settings/already-adjusted`).pipe(\n map((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: PathLayoutTemplate): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}path-layout-templates/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {Command} from '@application/command/command';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {PATTERNS, Patterns} from '@infrastructure/http/patterns/patterns';\nimport {Observable, Subject, tap} from 'rxjs';\n\nexport interface GetPatternVisualisationByPatternIdArguments {\n weaveStructureId: number;\n weavePatternId: number;\n type: PatternVisualisationType;\n}\n\n@Injectable()\nexport class GetPatternVisualisationByPatternId implements Command<{weaveStructureId: number; weavePatternId: number; type: PatternVisualisationType}, Observable> {\n private patternVisualisationLoaded = new Subject();\n\n public constructor(@Inject(PATTERNS) private readonly patterns: Patterns) {}\n\n public execute(getPatternVisualisationByPatternIdArgs: GetPatternVisualisationByPatternIdArguments): Observable {\n return this.patterns\n .getPatternVisualisationByPatternId(getPatternVisualisationByPatternIdArgs.weaveStructureId, getPatternVisualisationByPatternIdArgs.weavePatternId, getPatternVisualisationByPatternIdArgs.type)\n .pipe(tap((patternVisualisation: PatternVisualisation) => this.patternVisualisationLoaded.next(patternVisualisation)));\n }\n\n public patternVisualisationLoadedObservable(): Observable {\n return this.patternVisualisationLoaded.asObservable();\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Pattern} from '@domain/pattern';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {Patterns} from './patterns';\n\n@Injectable()\nexport class HttpPatternsService implements Patterns {\n private readonly httpClient: HttpClient;\n private readonly backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getAllRestZonePatterns(machineQualityId: number, colorSetId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/rest-zone?color-set=${colorSetId}`)\n .pipe(rxjsMap((restZonePatternsJSON: any) => map(restZonePatternsJSON, Pattern.fromJSON)));\n }\n\n public getAllFreeZonePatterns(machineQualityId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/free-zone`)\n .pipe(rxjsMap((freeZonePatternsJSON: any) => map(freeZonePatternsJSON, Pattern.fromJSON)));\n }\n\n public getAllJutePatterns(machineQualityId: number, colorSetId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/jute?color-set=${colorSetId}`)\n .pipe(rxjsMap((jutePatternsJSON: any) => map(jutePatternsJSON, Pattern.fromJSON)));\n }\n\n public getJutePatternsOrDrawings(weaveStructureId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/jute`)\n .pipe(rxjsMap((freeZonePatternsJSON: any) => map(freeZonePatternsJSON, Pattern.fromJSON)));\n }\n\n public getJutePatterns(weaveStructureId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/jute?exclude-drawings=true`)\n .pipe(rxjsMap((freeZonePatternsJSON: any) => map(freeZonePatternsJSON, Pattern.fromJSON)));\n }\n\n public getWeavePatternsOrDrawings(weaveStructureId: number, excludeColors: boolean): Observable {\n const params = new HttpParams().set('exclude-colors', excludeColors);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/weave`, {params})\n .pipe(rxjsMap((weavePatternsOrDrawingsJSON: any) => map(weavePatternsOrDrawingsJSON, Pattern.fromJSON)));\n }\n\n public getPatternVisualisationByPatternId(weaveStructureId: number, weavePatternId: number, type: PatternVisualisationType): Observable {\n const params = new HttpParams().set('type', PatternVisualisationType[type]);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/${weavePatternId}/visualisation`, {params})\n .pipe(rxjsMap((patternVisualisationJSON: any) => Pattern.fromPatternVisualisationJSON(patternVisualisationJSON)));\n }\n\n public saveRestZonePattern(name: string, imageData: string, machineQualityId: number, colorSetId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/rest-zone?color-set=${colorSetId}`, this.getNewPatternBody(name, imageData))\n .pipe(rxjsMap(({id}: {id: number}) => id));\n }\n\n public saveFreeZonePattern(name: string, imageData: string, machineQualityId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/free-zone`, this.getNewPatternBody(name, imageData))\n .pipe(rxjsMap(({id}: {id: number}) => id));\n }\n\n public saveJutePattern(name: string, imageData: string, machineQualityId: number, colorSetId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}machinequalities/${machineQualityId}/patterns/jute?color-set=${colorSetId}`, this.getNewPatternBody(name, imageData))\n .pipe(rxjsMap(({id}: {id: number}) => id));\n }\n\n public saveJutePatternWithWeaveStructureId(name: string, imageData: string, weaveStructureId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/jute`, this.getNewPatternBody(name, imageData))\n .pipe(rxjsMap(({id}: {id: number}) => id));\n }\n\n public saveWeavePatternWithWeaveStructureId(name: string, imageData: string, weaveStructureId: number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}machinequalities/weavestructures/${weaveStructureId}/patterns/weave`, this.getNewPatternBody(name, imageData))\n .pipe(rxjsMap(({id}: {id: number}) => id));\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n const params = new HttpParams().set('name', identifier);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}machinequalities/patterns/check-name`, {params})\n .pipe(rxjsMap((response: {patternNameAvailable: boolean}) => response.patternNameAvailable));\n }\n\n private getNewPatternBody(name: string, imageData: string): Record {\n return {\n name,\n image: imageData,\n patternType: PatternVisualisationType[PatternVisualisationType.DRAWING]\n };\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Pattern} from '@domain/pattern';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\nimport {Observable} from 'rxjs';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\nexport const PATTERNS = new InjectionToken('Patterns');\n\nexport interface Patterns extends UniqueIdentifierObjectRepository {\n getAllRestZonePatterns(machineQualityId: number, colorSetId: number): Observable;\n\n getAllFreeZonePatterns(machineQualityId: number): Observable;\n\n getAllJutePatterns(machineQualityId: number, colorSetId: number): Observable;\n\n getJutePatternsOrDrawings(weaveStructureId: number): Observable;\n\n getJutePatterns(weaveStructureId: number): Observable;\n\n getWeavePatternsOrDrawings(weaveStructureId: number, excludeColors: boolean): Observable;\n\n getPatternVisualisationByPatternId(weaveStructureId: number, weavePatternId: number, type: PatternVisualisationType): Observable;\n\n saveRestZonePattern(name: string, imageData: string, machineQualityId: number, colorSetId: number): Observable;\n\n saveFreeZonePattern(name: string, imageData: string, machineQualityId: number): Observable;\n\n saveJutePattern(name: string, imageData: string, machineQualityId: number, colorSetId: number): Observable;\n\n saveJutePatternWithWeaveStructureId(name: string, imageData: string, weaveStructureId: number): Observable;\n\n saveWeavePatternWithWeaveStructureId(name: string, imageData: string, weaveStructureId: number): Observable;\n}\n","import {PlanningEquipment} from './planning-equipment';\nimport {PlanningItem} from './planning-item';\nimport {PlanningItemFactory} from './planning-item-factory';\n\nexport class PlanningLine {\n private _id: number;\n private _name: string;\n private _parentEquipment: PlanningEquipment;\n private _planningItems: PlanningItem[];\n\n public constructor(id: number, name: string, parentEquipment: PlanningEquipment, planningItems: PlanningItem[]) {\n this._id = id;\n this._name = name;\n this._parentEquipment = parentEquipment;\n this._planningItems = planningItems;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get parentEquipment(): PlanningEquipment {\n return this._parentEquipment;\n }\n\n public get planningItems(): PlanningItem[] {\n return this._planningItems;\n }\n\n public set planningItems(value: PlanningItem[]) {\n this._planningItems = value;\n }\n\n public static fromJSON(json: any): PlanningLine {\n return new PlanningLine(json.id, json.name, PlanningEquipment.fromJSON(json.parentEquipment), json.planningItems?.map(PlanningItemFactory.fromJSON));\n }\n\n public toJSON(clearCompletedItems: boolean = false): JSON {\n const planningItems = [...(this.planningItems ?? [])];\n planningItems.sort(PlanningItem.compareBySequenceNumber);\n return {\n id: this.id,\n equipmentId: this.parentEquipment.id,\n planningItems: planningItems.filter((item: PlanningItem) => !clearCompletedItems || !item.isCompleted).map((item: PlanningItem) => item.toJSON(clearCompletedItems))\n } as any as JSON;\n }\n}\n","import {PlanningItemForecast} from './planning-item-forecast';\nimport {PlanningLine} from './planning-line';\n\nexport class PlanningForecast {\n private _planningLines: PlanningLine[];\n private _forecasts: PlanningItemForecast[];\n\n public constructor(planningLines: PlanningLine[], forecasts: PlanningItemForecast[]) {\n this._planningLines = planningLines;\n this._forecasts = forecasts;\n }\n\n public get planningLines(): PlanningLine[] {\n return this._planningLines;\n }\n\n public set planningLines(value: PlanningLine[]) {\n this._planningLines = value;\n }\n\n public get forecasts(): PlanningItemForecast[] {\n return this._forecasts;\n }\n\n public set forecasts(value: PlanningItemForecast[]) {\n this._forecasts = value;\n }\n\n public static fromJSON(json: any): PlanningForecast {\n return new PlanningForecast(json.planningLines.map(PlanningLine.fromJSON), json.forecasts.map(PlanningItemForecast.fromJSON));\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {PlanningEquipment} from '../planning-equipment';\n\nexport class FixedScheduleCompatibility {\n private _machine: PlanningEquipment;\n private _creels: IdName[];\n private _qualities: IdName[];\n\n public constructor(machine: PlanningEquipment, creels: IdName[], qualities: IdName[]) {\n this._machine = machine;\n this._creels = creels;\n this._qualities = qualities;\n }\n\n public get machine(): PlanningEquipment {\n return this._machine;\n }\n\n public get creels(): IdName[] {\n return this._creels;\n }\n\n public get qualities(): IdName[] {\n return this._qualities;\n }\n\n public static fromJSON(json: any): FixedScheduleCompatibility {\n return new FixedScheduleCompatibility(PlanningEquipment.fromJSON(json.machine), json.creels.map(IdName.fromJSON), json.qualities.map(IdName.fromJSON));\n }\n}\n","import {FixedSchedule} from '../carpet/fixed-schedule';\nimport {FixedScheduleCompatibility} from './fixed-schedule-compatibility';\n\nexport class FixedScheduleToPlan {\n private _fixedSchedule: FixedSchedule;\n private _compatibility: FixedScheduleCompatibility[];\n\n public constructor(fixedSchedule: FixedSchedule, compatibility: FixedScheduleCompatibility[]) {\n this._fixedSchedule = fixedSchedule;\n this._compatibility = compatibility;\n }\n\n public get fixedSchedule(): FixedSchedule {\n return this._fixedSchedule;\n }\n\n public get name(): string {\n return this.fixedSchedule.name;\n }\n\n public get compatibility(): FixedScheduleCompatibility[] {\n return this._compatibility;\n }\n\n public static fromJSON(json: any): FixedScheduleToPlan {\n return new FixedScheduleToPlan(FixedSchedule.fromJSON(json.fixedSchedule), json.compatibility.map(FixedScheduleCompatibility.fromJSON));\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PlanningFilter} from '@domain/planning-prototype/custom-settings/planning-filter';\nimport {PlanningForecast} from '@domain/planning-prototype/planning-forecast';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {PlanningItemFactory} from '@domain/planning-prototype/planning-item-factory';\nimport {PlanningItemForecast} from '@domain/planning-prototype/planning-item-forecast';\nimport {PlanningLine} from '@domain/planning-prototype/planning-line';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {UUID} from 'crypto';\nimport {DateTime} from 'luxon';\nimport {Observable, map} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPlanningPrototypeService {\n private readonly HISTORY_REQUEST_FORMAT = 'yyyy-MM-dd';\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getForecast(equipmentGroupIds?: number[]): Observable {\n let queryParams = new HttpParams();\n if (!AssertionUtils.isEmpty(equipmentGroupIds)) {\n for (const id of equipmentGroupIds) {\n queryParams = queryParams.append('equipmentGroupIds', id);\n }\n }\n\n return this.httpClient.get(`${this.backendConfiguration.getPlanningEndpoint()}planning/forecast`, {params: queryParams}).pipe(map(PlanningForecast.fromJSON));\n }\n\n public getForecastForDraft(planningLines: PlanningLine[]): Observable {\n return this.httpClient\n .post(\n `${this.backendConfiguration.getPlanningEndpoint()}planning/forecast`,\n planningLines.map((planningLine: PlanningLine) => planningLine.toJSON())\n )\n .pipe(map((json: any[]) => json.map(PlanningItemForecast.fromJSON)));\n }\n\n public patchPlanningLines(planningLines: PlanningLine[]): Observable<{[draftId: UUID]: number}> {\n return this.httpClient.post<{[draftId: UUID]: number}>(`${this.backendConfiguration.getPlanningEndpoint()}planning`, {\n planningLines: planningLines.map((planningLine: PlanningLine) => planningLine.toJSON(true))\n });\n }\n\n public getProductionOrdersToPlan(equipmentGroupIds?: number[]): Observable {\n let queryParams = new HttpParams();\n if (!AssertionUtils.isEmpty(equipmentGroupIds)) {\n for (const id of equipmentGroupIds) {\n queryParams = queryParams.append('equipmentGroupIds', id);\n }\n }\n\n return this.httpClient\n .get(`${this.backendConfiguration.getPlanningEndpoint()}production-orders/to-plan`, {params: queryParams})\n .pipe(map((json: any[]) => json.map(ProductionOrderToPlan.fromJSON)));\n }\n\n public getFixedSchedulesToPlan(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getPlanningEndpoint()}fixed-schedules/to-plan`).pipe(map((json: any[]) => json.map(FixedScheduleToPlan.fromJSON)));\n }\n\n public getPlanningHistory(from: Date, to: Date, equipmentGroupIds?: number[]): Observable<{[id: number]: PlanningItem[]}> {\n let queryParams = new HttpParams().set('from', DateTime.fromJSDate(from).toFormat(this.HISTORY_REQUEST_FORMAT)).set('to', DateTime.fromJSDate(to).toFormat(this.HISTORY_REQUEST_FORMAT));\n\n if (!AssertionUtils.isEmpty(equipmentGroupIds)) {\n for (const id of equipmentGroupIds) {\n queryParams = queryParams.append('equipmentGroupIds', id);\n }\n }\n\n return this.httpClient.get(`${this.backendConfiguration.getPlanningEndpoint()}planning/history`, {params: queryParams}).pipe(\n map((json: {[id: number]: any[]}) =>\n Object.keys(json).reduce((result: {[id: number]: PlanningItem[]}, key: string) => {\n result[key] = json[key].map(PlanningItemFactory.fromJSON);\n return result;\n }, {})\n )\n );\n }\n\n public getFilter(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getPlanningEndpoint()}custom-settings/filter`).pipe(map(PlanningFilter.fromJSON));\n }\n\n public setFilter(filter: PlanningFilter): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getPlanningEndpoint()}custom-settings/filter`, filter.toJSON()).pipe(map(() => undefined));\n }\n\n public getCreelMapForRun(runId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getPlanningEndpoint()}runs/${runId}/creel-mapping`);\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {DateRange} from '@domain/date-range';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {NeedsAttentionItem} from '@domain/planning/needs-attention-item';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningOrderDetails} from '@domain/planning/planning-order-details';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {Observable} from 'rxjs';\nimport {MachineDetails} from './machine-details';\n\nexport const PLANNING = new InjectionToken('Planning');\n\nexport interface Planning {\n getGroupedRunsForPeriod(dateRange: DateRange): Observable;\n\n getMachines(): Observable;\n\n getMachineDetails(machineId: number): Observable;\n\n updateGroupedItems(groupedItems: CalendarItemGroup[]): Observable;\n\n getPlanningOrderDetails(id: number): Observable;\n\n deletePlanningItem(planningItem: PlanningItem): Observable;\n\n processProductionOrder(id: number): Observable;\n\n queueProductionOrder(id: number): Observable;\n\n processAndQueueProductionOrder(id: number): Observable;\n\n getCreelForRun(runId: number): Observable;\n\n checkRunCompatibilityWithMachine(runId: number, machineId: number): Observable;\n\n deletePlanningOrder(productionOrderId: number): Observable;\n\n deletePlanningOrderLite(productionOrderLiteId: number): Observable;\n\n getCreelMapForRun(runId: number): Observable;\n\n getOrdersThatRequireAttention(): Observable;\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {DefaultCustomSettingsRepository} from '../default-custom-settings-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPlasticProductsCustomSettingsService extends DefaultCustomSettingsRepository {\n public constructor(\n httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {\n super(httpClient, `${backendConfiguration.getEndpoint()}plastic-products/custom-settings`);\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {CheckName, Conflict, GridModel} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPlasticProductsService implements Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}plastic-products`)\n .pipe(map((plasticProductsJSON: any) => plasticProductsJSON.map((plasticProductJSON: any) => PlasticProduct.fromJSON(plasticProductJSON))));\n }\n\n public getCompatible(toolId?: number, machineId?: number): Observable {\n let params = new HttpParams();\n\n if (toolId !== undefined) {\n params = params.set('toolId', toolId);\n }\n\n if (machineId !== undefined) {\n params = params.set('machineId', machineId);\n }\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}compatible/plastic-products`, {params})\n .pipe(map((plasticProductsJSON: any) => plasticProductsJSON.map((plasticProductJSON: any) => PlasticProduct.fromJSON(plasticProductJSON))));\n }\n\n public delete(id: string | number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}plastic-products/${id}`);\n }\n\n public deleteMulti(ids: number[]): Observable {\n return this.httpClient\n .delete(`${this.backendConfiguration.getEndpoint()}plastic-products/multi-delete`, {body: ids})\n .pipe(map((reponsesJSON: any) => reponsesJSON.map((reponseJSON: any) => MultiDeleteResponse.fromJSON(reponseJSON))));\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-products/${id}`).pipe(map((plasticProductJSON: any) => PlasticProduct.fromJSON(plasticProductJSON)));\n }\n\n public save(item: PlasticProduct): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}plastic-products`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: PlasticProduct): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}plastic-products/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-products/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-products/${columnIdentifier}/possible-values`).pipe(map((response: string[]) => response));\n }\n\n public getSlice(gridModel: GridModel): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}plastic-products/get`, gridModel)\n .pipe(map((plasticProductsJSON: any) => plasticProductsJSON.map((plasticProductJSON: any) => PlasticProduct.fromJSON(plasticProductJSON))));\n }\n\n public getAllForMachineId(machineId: number): Observable {\n throw new Error('Method not implemented.');\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}plastic-products/conflicts`, [id])\n .pipe(map((conflictsJSON: any) => conflictsJSON[0].conflicts.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PlasticProductionOrder} from '@domain/texfab/plastic-production-order/plastic-production-order';\nimport {CheckName, GridModel} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPlasticProductionOrdersService implements Repository, UniqueIdentifierObjectRepository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic`)\n .pipe(map((plasticProductionOrdersJSON: any) => plasticProductionOrdersJSON.map((plasticProductionOrderJSON: any) => PlasticProductionOrder.fromJSON(plasticProductionOrderJSON))));\n }\n\n public delete(id: string | number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic/${id}`);\n }\n\n public getById(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic/${id}`)\n .pipe(map((plasticProductionOrderJSON: any) => PlasticProductionOrder.fromJSON(plasticProductionOrderJSON)));\n }\n\n public save(item: PlasticProductionOrder): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: PlasticProductionOrder): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-products/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-products/${columnIdentifier}/possible-values`).pipe(map((response: string[]) => response));\n }\n\n public getSlice(gridModel: GridModel): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}plastic-products/get`, gridModel)\n .pipe(map((plasticProductionOrdersJSON: any) => plasticProductionOrdersJSON.map((plasticProductionOrderJSON: any) => PlasticProductionOrder.fromJSON(plasticProductionOrderJSON))));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {ProductConfiguration} from '@domain/product-configuration/product-configuration';\nimport {SelectListProductConfiguration} from '@domain/product-configuration/select-list-product-configuration';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {OverviewListProductConfiguration} from '@presentation/pages/texedit/product-configuration/overview/overview-list-product-configuration';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\nexport const PRODUCT_CONFIGURATIONS = new InjectionToken('ProductConfiguration');\n\nexport interface ProductConfigurations\n extends UniqueIdentifierObjectRepository,\n CustomSettingsObjectRepository,\n Repository,\n NameGenerationRepository {\n getSlice(gridModel: GridModel): Observable;\n updateLocked(id: number, locked: boolean): Observable;\n updateReadyForProduction(id: number, version: number): Observable;\n updateAdditionalInformation(id: number, version: number, additionalInformation: string): Observable;\n getPossibleProductConfigurationsForMachine(machineId: number): Observable;\n getCategoriesWithComponentsForProductConfigurationName(): Observable;\n getPossibleValues(columnIdentifier: string): Observable;\n getGeneratedProductConfigurationName(machineId: number, qualityId: number): Observable;\n}\n","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\r\nimport {ProductionOrderNameGenerationView} from '@domain/production-schedule/custom-settings/production-order-name-generation-view.interface';\r\nimport {map, Observable} from 'rxjs';\r\nimport {CustomSettingsRepository} from '../custom-settings-repository.interface';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class HttpProductionOrdersCustomSettingsService implements CustomSettingsRepository {\r\n public constructor(\r\n private readonly httpClient: HttpClient,\r\n private readonly backendConfiguration: BackendConfiguration\r\n ) {}\r\n\r\n public get(): Observable {\r\n return this.httpClient.get(this.baseUrl()).pipe(map((json: any) => ProductionOrderCustomSettings.fromJSON(json)));\r\n }\r\n\r\n public save(customSettings: ProductionOrderCustomSettings): Observable {\r\n return this.httpClient.post(this.baseUrl(), customSettings.toJSON());\r\n }\r\n\r\n public getNameGenerationProperties(): Observable {\r\n return this.httpClient.get(`${this.baseUrl()}/name-generation-properties`).pipe(map((json: any[]) => json.map((jsonElement: any) => NameGeneratorProperty.fromJSON(jsonElement))));\r\n }\r\n\r\n public generateName(entity: ProductionOrderNameGenerationView): Observable {\r\n return this.httpClient.post(`${this.baseUrl()}/generate-name`, entity);\r\n }\r\n\r\n public getPathLabelNameGenerationProperties(): Observable {\r\n return this.httpClient.get(`${this.baseUrl()}/path-label/name-generation-properties`).pipe(map((json: any[]) => json.map((jsonElement: any) => NameGeneratorProperty.fromJSON(jsonElement))));\r\n }\r\n\r\n public hasAlreadyAdjusted(): Observable {\r\n return this.httpClient.get(`${this.baseUrl()}/has-already-adjusted`);\r\n }\r\n\r\n private baseUrl(version: number = 2): string {\r\n return `${this.backendConfiguration.getProductionOrderEndpoint(version)}production-orders/carpet/custom-settings`;\r\n }\r\n}\r\n","import {InjectionToken} from '@angular/core';\nimport {ProductionOrderWeaving} from '@domain/production-order-lite/production-order-weaving/production-order-weaving';\nimport {Repository} from '@infrastructure/http/repository';\nimport {OverviewListProductionOrderWeaving} from '@presentation/pages/texfab/production-order-lite/overview/overview-list-production-order-weaving';\nimport {Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const PRODUCTION_ORDERS_WEAVING = new InjectionToken('ProductionOrdersWeaving');\n\nexport interface ProductionOrdersWeaving\n extends Repository,\n CustomSettingsObjectRepository,\n NameGenerationRepository {\n checkCompatibilityWithMachine(productionOrderLiteId: number, machineId: number): Observable;\n saveAndPlan(productionOrderWeaving: ProductionOrderWeaving, runId: number): Observable;\n updateAndPlan(productionOrderWeaving: ProductionOrderWeaving, runId: number): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {InitialOptionsForProductionOrder} from '@domain/production-schedule/initial-options-for-production-order';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {Repository} from '@infrastructure/http/repository';\nimport {OverviewListProductionSchedule} from '@presentation/pages/texfab/production-schedule/overview/overview-list-production-schedule';\nimport {ReasonForFailureContext} from '@presentation/pages/texfab/production-schedule/overview/reason-for-failure-context';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\n\nexport const PRODUCTION_ORDERS = new InjectionToken('ProductionOrders');\n\nexport interface ProductionOrders extends Repository {\n getSlice(gridModel: GridModel): Observable;\n\n getInitialOptionsForMachine(machineId: number): Observable;\n\n getInitialOptionsForMachineAndMachineQuality(machineId: number, machineQualityId: number, reedDensity: number): Observable;\n\n getCategoriesWithComponentsForProductionOrderLabel(): Observable;\n\n getCategoriesWithComponentsForPathLabel(): Observable;\n\n getCategoriesWithComponentsForProductionOrderName(): Observable;\n\n getWeavingOrderXMLForProductionOrder(productionOrderId: number): Observable;\n\n getWeavingOrderXSLTForProductionOrder(productionOrderId: number): Observable;\n\n getReasonForFailure(productionOrderId: number): Observable;\n\n getReadyToQueue(productionOrderId: number): Observable;\n\n downloadEpFiles(productionOrderId: string): Observable;\n\n removeMachineFiles(productionOrderId: string | number, machineFromProductionOrderId: number): Observable;\n\n checkCompatibilityWithMachine(productionOrderId: number, machineId: number): Observable;\n\n completeProductionOrder(productionOrderId: number | string, schedule: ProductionSchedule | ProductionScheduleStatus): Observable;\n\n updateProductionOrder(\n productionScheduleId: string,\n productionSchedulePathsOfColoredYarnSets: ProductionSchedulePathsOfColoredYarnSet[],\n factorForConversionFromMillimetersToDents: number,\n productionScheduleStatus: ProductionScheduleStatus\n ): Observable;\n\n getPossibleValues(columnIdentifier: string): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {CreelForProductionSchedule} from '@domain/production-schedule/creel-for-production-schedule';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {MachineQualityForProductionSchedule} from '@domain/production-schedule/machine-quality-for-production-schedule';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {ProductionSchedulePhase} from '@domain/production-schedule/production-schedule-phase.enum';\nimport {ProductionScheduleProductConfiguration} from '@domain/production-schedule/production-schedule-product-configuration';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {ZoneType} from '@domain/zone-type.enum';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {ParametersForPreselection} from '@presentation/pages/texfab/production-schedule/add/plan/parameters-for-preselection';\nimport {ConflictedOrderLine} from '@presentation/pages/texfab/production-schedule/confirm/conflicted-order-line';\nimport {Conflict, GridModel} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\n\nexport const PRODUCTION_SCHEDULES = new InjectionToken('ProductionSchedules');\n\nexport interface ProductionSchedules extends Repository, UniqueIdentifierObjectRepository {\n createProductionSchedule(\n machineSummary: MachineSummary,\n machineQuality: MachineQualityForProductionSchedule,\n practicalPickDensityInPicksPerMM: number,\n coloredYarnSets: OverviewListColoredYarnSetWithStartDent[],\n creel: CreelForProductionSchedule,\n runId: number,\n mappingForCurrentPositionOnMachine: CreelMap[],\n productConfiguration: ProductionScheduleProductConfiguration,\n isSample: boolean,\n canAddJute: boolean,\n hmiVersion: string,\n addToPlanboard: boolean,\n preselectionId: number\n ): Observable;\n\n decreateProductionOrder(decreatedProductionOrder: ProductionSchedule): Observable;\n\n updateWithMachineQualityChanged(productionSchedule: ProductionSchedule, isMachineQualityChanged?: boolean): Observable;\n getConflicts(id: number): Observable;\n\n setProductionSchedulePlan(\n productionScheduleId: string,\n productionSchedulePathsOfColoredYarnSets: ProductionSchedulePathsOfColoredYarnSet[],\n reedDensityInDentsPerMeter: number\n ): Observable;\n\n verifyProductionSchedule(id: string, manualSave?: boolean, productionSchedulePhase?: ProductionSchedulePhase): Observable;\n\n cancelTemporarySavedChanges(id: string): Observable;\n\n checkVerifyProductionSchedule(productionScheduleId: string, type: ZoneType, startDent: number, value: number, coloredYarnSetPathNr: number): Observable;\n\n completeAndPlan(productionSchedule: ProductionSchedule): Observable;\n\n completeAndQueue(productionSchedule: ProductionSchedule): Observable;\n\n process(productionSchedule: ProductionSchedule): Observable;\n\n saveDesignsAndOrderLines(id: number | string, designs: Drawing[], orderLines: ProductionScheduleOrderLine[], scheduleName: string): Observable;\n\n getDesignsAndOrderLines(id: number | string, status: ProductionScheduleStatus): Observable<{designs: Drawing[]; orderLines: ProductionScheduleOrderLine[]}>;\n\n getPreselectionListById(id: number | string): Observable;\n\n savePreselectionList(id: number | string, designIds: number[], orderLinesIds: number[], gridModel: GridModel, configurationIds?: number[]): Observable;\n\n updatePreselectionList(id: number | string, designIds: number[], orderLinesIds: number[], gridModel: GridModel, configurationIds?: number[]): Observable;\n\n checkPossibleConflictsWithOrderLines(id: string): Observable;\n\n getDuplicatedProductionOrder(id: number | string): Observable;\n\n duplicateProductionOrder(productionOrderToDuplicate: ProductionSchedule): Observable;\n\n getGeneratedProductionOrderName(machineId: number, qualityId: number, creelId: number): Observable;\n}\n","export class UserInfo {\n private readonly _firstName: string;\n private readonly _lastName: string;\n private readonly _email: string;\n\n public constructor(firstName: string, lastName: string, email: string) {\n this._firstName = firstName;\n this._lastName = lastName;\n this._email = email;\n }\n\n public get firstName(): string {\n return this._firstName;\n }\n\n public get lastName(): string {\n return this._lastName;\n }\n\n public get email(): string {\n return this._email;\n }\n\n public static fromJSON(userInfoJSON: any): UserInfo {\n return new UserInfo(userInfoJSON.firstName, userInfoJSON.lastName, userInfoJSON.email);\n }\n}\n","import {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {UserInfo} from '@domain/profile/user-info';\n\nexport class ProfileInfo {\n private readonly _userInfo: UserInfo;\n private _activeSubscription: Subscription;\n\n public constructor(userInfo: UserInfo, activeSubscription: Subscription) {\n this._userInfo = userInfo;\n this._activeSubscription = activeSubscription;\n }\n\n public get userInfo(): UserInfo {\n return this._userInfo;\n }\n\n public get activeSubscription(): Subscription {\n return this._activeSubscription;\n }\n\n public set activeSubscription(subscription: Subscription) {\n this._activeSubscription = subscription;\n }\n\n public static fromJSON(profileInfoJSON: any): ProfileInfo {\n return new ProfileInfo(UserInfo.fromJSON(profileInfoJSON.user), Subscription.fromJSON(profileInfoJSON.activeSubscription));\n }\n\n public hasPermission(permission: Permission): boolean {\n return this._activeSubscription.hasPermission(permission);\n }\n}\n","export class Company {\n private readonly _id: string;\n private readonly _name: string;\n\n public constructor(id: string, name: string) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(companyJSON: any): Company {\n return new Company(companyJSON.id, companyJSON.name);\n }\n}\n","import {ApplicationMaintenance} from '@domain/profile/application-maintenance';\nimport {Company} from '@domain/profile/company';\nimport {Subscription} from '@domain/profile/subscription';\nimport {find, map, sortBy} from 'lodash-es';\n\nexport class CompanySubscriptions {\n private readonly _companies: Company[];\n private readonly _subscriptions: Subscription[];\n private readonly _applicationMaintenance: ApplicationMaintenance;\n\n public constructor(companies: Company[], subscriptions: Subscription[], applicationMaintenance: ApplicationMaintenance) {\n this._companies = companies;\n this._subscriptions = subscriptions;\n this._applicationMaintenance = applicationMaintenance;\n }\n\n public get companies(): Company[] {\n return this._companies;\n }\n\n public get subscriptions(): Subscription[] {\n return this._subscriptions;\n }\n\n public get applicationMaintenance(): ApplicationMaintenance {\n return this._applicationMaintenance;\n }\n\n public static fromJSON(companySubscriptionsJSON: any): CompanySubscriptions {\n const companies: Company[] = sortBy(\n map(companySubscriptionsJSON.companies, (companyJSON: any) => Company.fromJSON(companyJSON)),\n (company: Company) => company.name\n );\n const subscriptions: Subscription[] = map(companySubscriptionsJSON.subscriptions, (subscriptionJSON: any) => {\n const subscription: Subscription = Subscription.fromJSON(subscriptionJSON);\n subscription.company = find(companies, {id: subscriptionJSON.companyId});\n\n return subscription;\n });\n\n return new CompanySubscriptions(companies, subscriptions, companySubscriptionsJSON.applicationMaintenance);\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {ProfileInfo} from '@domain/profile/profile-info';\nimport {Versionable} from '@domain/profile/versionable';\nimport {VersionableType} from '@domain/profile/versionable-type';\nimport {VERSION} from '@environments/version';\nimport {Profile} from '@infrastructure/http/profile/profile';\nimport {each, sortBy} from 'lodash-es';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {createCancelRequestContext} from '../cancel-request-context';\nimport {CompanySubscriptions} from './company-subscriptions';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpProfileService implements Profile {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getCreditsAmount(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAuthenticationEndpoint()}vdwuser/credits`).pipe(\n rxjsMap((creditsJSON: any) => {\n return creditsJSON.remainingCredits;\n })\n );\n }\n\n public getProfileInfo(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAuthenticationEndpoint()}vdwuser/profile`).pipe(rxjsMap((profileInfoJSON: any) => ProfileInfo.fromJSON(profileInfoJSON)));\n }\n\n public getSubscriptions(shouldCancelRequest: boolean = true): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}vdwuser/companysubscriptions`, {\n context: createCancelRequestContext(shouldCancelRequest)\n })\n .pipe(rxjsMap((companySubscriptionsJSON: any) => CompanySubscriptions.fromJSON(companySubscriptionsJSON)));\n }\n\n public getVersionables(): Observable {\n const versionEndpointUrl = 'version';\n const versionables: Versionable[] = [\n {\n type: VersionableType.CLIENT,\n version: VERSION.version\n }\n ];\n const versionablesSubject = new BehaviorSubject(versionables);\n\n each(\n [\n {\n type: VersionableType.TEXTILE,\n url: `${this.backendConfiguration.getEndpoint()}${versionEndpointUrl}`\n },\n {\n type: VersionableType.MACHINE,\n url: `${this.backendConfiguration.getMachineOverviewEndpoint()}${versionEndpointUrl}`\n },\n {\n type: VersionableType.PRODUCTION,\n url: `${this.backendConfiguration.getProductionOrderEndpoint()}${versionEndpointUrl}`\n },\n {\n type: VersionableType.WORKER,\n url: `${this.backendConfiguration.getWorkerEndpoint()}${versionEndpointUrl}`\n }\n ],\n ({url, type}: {url: string; type: VersionableType}) => {\n this.httpClient.get<{version: string}>(url).subscribe((res: {version: string}) => {\n if (type === VersionableType.WORKER) {\n versionables.push({type: VersionableType.MESSAGING, version: res.version});\n }\n\n versionables.push({type, version: res.version});\n versionablesSubject.next(sortBy(versionables, 'type'));\n });\n }\n );\n\n return versionablesSubject;\n }\n\n public getExternalApplicationKey(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAuthenticationEndpoint()}vdwuser/external-application-key`).pipe(\n rxjsMap((externalApplicationKeyJSON: any) => {\n return externalApplicationKeyJSON.applicationKey;\n })\n );\n }\n\n public signTermsAndConditions(): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getAuthenticationEndpoint()}vdwuser/sign-terms-and-conditions`, {});\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {ProfileInfo} from '@domain/profile/profile-info';\nimport {Versionable} from '@domain/profile/versionable';\nimport {Observable} from 'rxjs';\nimport {CompanySubscriptions} from './company-subscriptions';\n\nexport const PROFILE = new InjectionToken('Profile');\n\nexport interface Profile {\n getCreditsAmount(): Observable;\n\n getProfileInfo(): Observable;\n\n getSubscriptions(shouldCancelRequest?: boolean): Observable;\n\n getVersionables(): Observable;\n\n getExternalApplicationKey(): Observable;\n\n signTermsAndConditions(): Observable;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {IdNameUsed} from '@domain/id-name-used';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {Repository} from '@infrastructure/http/repository';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class HttpRawMaterialsService implements Repository {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}raw-materials/${id}`).pipe(map((response: any) => IdNameUsed.fromJSON(response)));\n }\n\n public save(item: IdNameUsed): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}raw-materials`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: IdNameUsed): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}raw-materials/${item.id}`, item.toJSON());\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}raw-materials`);\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}raw-materials/${id}`);\n }\n\n public deleteMulti(ids: number[]): Observable {\n return this.httpClient\n .delete(`${this.backendConfiguration.getEndpoint()}raw-materials/multi-delete`, {body: ids})\n .pipe(map((reponsesJSON: any) => reponsesJSON.map((reponseJSON: any) => MultiDeleteResponse.fromJSON(reponseJSON))));\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}raw-materials/check-name`, {params}).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}raw-materials/${id}/conflicts`)\n .pipe(map((conflictsJSON: any) => conflictsJSON.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {SalesOrder} from '@domain/sales-order/sales-order';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListSalesOrder} from '@presentation/pages/texfab/sales-order/overview/overview-list-sales-order';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\n\nexport const SALES_ORDERS = new InjectionToken('SalesOrders');\n\nexport interface SalesOrders extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n copyToOrderbook(id: number): Observable;\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {IdName} from '@domain/id-name';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpStockLocationService implements UniqueIdentifierObjectRepository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public save(item: IdName): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}stock-locations`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: IdName): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}stock-locations/${item.id}`, item.toJSON());\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}stock-locations/${id}`).pipe(map((toolJSON: any) => IdName.fromJSON(toolJSON)));\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}stock-locations/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}stock-locations/${id}`);\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}stock-locations/conflicts`, [id])\n .pipe(map((conflictsJSON: any) => conflictsJSON[0].conflicts.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {DefaultCustomSettingsRepository} from '../default-custom-settings-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpToolsCustomSettingsService extends DefaultCustomSettingsRepository {\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n super(httpClient, `${backendConfiguration.getEndpoint()}tools/custom-settings`);\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {IdName} from '@domain/id-name';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {CheckName, Conflict, GridModel} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpToolsService implements Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tools`).pipe(map((toolsJSON: any) => toolsJSON.map((toolJSON: any) => Tool.fromJSON(toolJSON))));\n }\n\n public getCompatible(plasticProductId?: number, machineId?: number): Observable {\n let params = new HttpParams();\n\n if (plasticProductId !== undefined) {\n params = params.set('plasticProductId', plasticProductId);\n }\n\n if (machineId !== undefined) {\n params = params.set('machineId', machineId);\n }\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}compatible/tools`, {params}).pipe(map((toolsJSON: any) => toolsJSON.map((toolJSON: any) => Tool.fromJSON(toolJSON))));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}tools/${id}`);\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tools/${id}`).pipe(map((toolJSON: any) => Tool.fromJSON(toolJSON)));\n }\n\n public save(item: Tool): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}tools`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: Tool): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}tools/${item.id}`, item.toJSON());\n }\n\n public getStockLocations(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}stock-locations`)\n .pipe(map((stockLocationsJSON: any) => stockLocationsJSON.map((stockLocationJSON: any) => IdName.fromJSON(stockLocationJSON))));\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tools/${columnIdentifier}/possible-values`).pipe(map((response: string[]) => response));\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tools/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getSlice(gridModel: GridModel): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}tools/get`, gridModel).pipe(map((toolsJSON: any) => toolsJSON.map((toolJSON: any) => Tool.fromJSON(toolJSON))));\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}tools/conflicts`, [id])\n .pipe(map((conflictsJSON: any) => conflictsJSON[0].conflicts.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Gauge} from '@domain/machine/gauge';\nimport {TuftProduct} from '@domain/textile-data/tuft-product/tuft-product';\nimport {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {ExtendedHttpParams} from '../extended-http-params';\nimport {Repository} from '../repository';\nimport {UniqueIdentifierObjectRepository} from '../unique-identifier-object-repository';\nimport {GetAllTuftProductsParameters} from './tuft-products.interface';\n\n@Injectable({providedIn: 'root'})\nexport class HttpTuftProductsService implements Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n private readonly VARIABLE_NAMES_TO_HTTP_PARAMS_MAP = new Map([['showOnlyLatestVersion', 'only-latest-versions']]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}tuft-products`, {params})\n .pipe(map((tuftProductsJSON: any) => tuftProductsJSON.map((tuftProductJSON: any) => OverviewListTuftProduct.fromJSON(tuftProductJSON))));\n }\n\n public getAllForMachineId(machineId: number, parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}tuft-products/machine-id/${machineId}/compatible`, {params})\n .pipe(map((tuftProductsJSON: any) => tuftProductsJSON.map((tuftProductJSON: any) => OverviewListTuftProduct.fromJSON(tuftProductJSON))));\n }\n\n public delete(id: string | number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}tuft-products/${id}`);\n }\n\n public getById(id: string | number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tuft-products/${id}`).pipe(map((tuftProductJSON: any) => TuftProduct.fromJSON(tuftProductJSON)));\n }\n\n public save(item: TuftProduct): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}tuft-products`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: TuftProduct): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}tuft-products/${item.id}`, item.toJSON());\n }\n\n public getGauges(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tuft-products/gauges`).pipe(map((gaugesJSON: any) => gaugesJSON.map((gaugeJSON: any) => Gauge.fromJSON(gaugeJSON))));\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}tuft-products/check-name`, {params}).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}tuft-products/${id}/conflicts`)\n .pipe(map((conflictsJSON: any) => conflictsJSON.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {IdNameVersion} from '@domain/id-name-version';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\n\nexport class OverviewListTuftProductionOrder {\n private _id: number;\n private _name: string;\n private _status: ProductionScheduleStatus;\n private _tuftProduct: IdNameVersion;\n private _machine: IdName;\n private _plannedQuantityInMeters: number;\n private _tuftingNotes: string;\n private _dateCreated: Date;\n private _dueDate: Date;\n private _actualStartDate: Date;\n private _actualEndDate: Date;\n\n public constructor(\n id: number,\n name: string,\n status: ProductionScheduleStatus,\n tuftProduct: IdNameVersion,\n machine: IdName,\n plannedQuantityInMeters: number,\n tuftingNotes: string,\n dateCreated: Date,\n dueDate: Date,\n actualStartDate: Date,\n actualEndDate: Date\n ) {\n this._id = id;\n this._name = name;\n this._status = status;\n this._tuftProduct = tuftProduct;\n this._machine = machine;\n this._plannedQuantityInMeters = plannedQuantityInMeters;\n this._tuftingNotes = tuftingNotes;\n this._dateCreated = dateCreated;\n this._dueDate = dueDate;\n this._actualStartDate = actualStartDate;\n this._actualEndDate = actualEndDate;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get tuftProduct(): IdNameVersion {\n return this._tuftProduct;\n }\n\n public get machine(): IdName {\n return this._machine;\n }\n\n public get plannedQuantityInMeters(): number {\n return this._plannedQuantityInMeters;\n }\n\n public get tuftingNotes(): string {\n return this._tuftingNotes;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get actualStartDate(): Date {\n return this._actualStartDate;\n }\n\n public get actualEndDate(): Date {\n return this._actualEndDate;\n }\n\n public static fromJSON(overviewListTuftProductionOrderJSON: any): OverviewListTuftProductionOrder {\n return new OverviewListTuftProductionOrder(\n overviewListTuftProductionOrderJSON.id,\n overviewListTuftProductionOrderJSON.name,\n overviewListTuftProductionOrderJSON.status,\n IdNameVersion.fromJSON(overviewListTuftProductionOrderJSON.tuftProduct),\n overviewListTuftProductionOrderJSON.machine ? IdName.fromJSON(overviewListTuftProductionOrderJSON.machine) : null,\n overviewListTuftProductionOrderJSON.plannedQuantityInMeters,\n overviewListTuftProductionOrderJSON.tuftingNotes,\n new Date(overviewListTuftProductionOrderJSON.creationDate),\n overviewListTuftProductionOrderJSON.dueDate ? new Date(overviewListTuftProductionOrderJSON.dueDate) : null,\n overviewListTuftProductionOrderJSON.actualStartDate ? new Date(overviewListTuftProductionOrderJSON.actualStartDate) : null,\n overviewListTuftProductionOrderJSON.actualEndDate ? new Date(overviewListTuftProductionOrderJSON.actualEndDate) : null\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n}\n","/* eslint-disable brace-style */\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {TuftProductionOrder} from '@domain/texfab/tuft-production-order/tuft-production-order';\nimport {OverviewListTuftProductionOrder} from '@presentation/pages/texfab/tuft-production-order/overview/overview-list-tuft-production-order';\nimport {map, Observable} from 'rxjs';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\nimport {Repository} from '../repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpTuftProductionOrdersService\n implements Repository, CustomSettingsObjectRepository, NameGenerationRepository\n{\n public error = 'Method not implemented.';\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft`)\n .pipe(map((tuftProductionOrdersJSON: any) => tuftProductionOrdersJSON.map((tuftProductionOrderJSON: any) => OverviewListTuftProductionOrder.fromJSON(tuftProductionOrderJSON))));\n }\n\n public getById(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/${id}`)\n .pipe(map((tuftProductionOrderJSON: any) => TuftProductionOrder.fromJSON(tuftProductionOrderJSON)));\n }\n\n public save(item: TuftProductionOrder): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public saveAndPlan(item: TuftProductionOrder, runId: number): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getAggregatorEndpoint()}productionorders/tuft/save-and-plan`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: TuftProductionOrder): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/${item.id}`, item.toJSON());\n }\n\n public updateAndPlan(item: TuftProductionOrder, runId: number): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getAggregatorEndpoint()}productionorders/tuft/${item.id}/save-and-plan`, item.toJSON());\n }\n\n public delete(id: string | number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/${id}`);\n }\n\n public checkCompatibilityWithMachine(tuftProductionOrderId: number, machineId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}productionorders/tuft/${tuftProductionOrderId}/is-compatible-machine/${machineId}`);\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/custom-settings/already-adjusted`)\n .pipe(map((response: {alreadyAdjustedCustomSettings: boolean}) => response.alreadyAdjustedCustomSettings));\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: TuftProductionOrder): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getProductionOrderEndpoint()}production-orders/tuft/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {WeaveProduct} from '@domain/textile-data/weave-product/weave-product';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\nimport {ExtendedHttpParams} from '../extended-http-params';\nimport {GetAllWeaveProductsParameters, WeaveProducts} from './weave-products.interface';\n\n@Injectable()\nexport class HttpWeaveProductsService implements WeaveProducts {\n private readonly VARIABLE_NAMES_TO_HTTP_PARAMS_MAP = new Map([['showOnlyLatestVersion', 'only-latest-versions']]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: string | number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}weave-products/${id}`);\n }\n\n public getById(id: string | number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weave-products/${id}`).pipe(map((weaveProductJSON: any) => WeaveProduct.fromJSON(weaveProductJSON)));\n }\n\n public save(item: WeaveProduct): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}weave-products`, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: WeaveProduct): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}weave-products/${item.id}`, item.toJSON());\n }\n\n public getAll(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}weave-products`, {params})\n .pipe(map((weaveProductsJSON: any) => weaveProductsJSON.map((weaveProductJSON: any) => OverviewListWeaveProduct.fromJSON(weaveProductJSON))));\n }\n\n public getAllForMachineId(machineId: number, parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}weave-products/machine-id/${machineId}/compatible`, {params})\n .pipe(map((weaveProductsJSON: any) => weaveProductsJSON.map((weaveProductJSON: any) => OverviewListWeaveProduct.fromJSON(weaveProductJSON))));\n }\n\n public getConflicts(id: string | number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}weave-products/${id}/conflicts`)\n .pipe(map((conflictsJSON: any) => conflictsJSON.map((conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}weave-products/check-name`, {params}).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {WeaveProduct} from '@domain/textile-data/weave-product/weave-product';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\n\nexport const WEAVE_PRODUCT = new InjectionToken('WeaveProducts');\n\nexport interface WeaveProducts extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {\n getAll(parameters?: Partial): Observable;\n getAllForMachineId(machineId: number, parameters?: Partial): Observable;\n}\n\nexport interface GetAllWeaveProductsParameters {\n showOnlyLatestVersion: boolean;\n}\n","import {HttpClient, HttpParams, HttpResponse} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {WeftSelection} from '@domain/textile-data/machine-quality/weft-selection';\nimport {WeaveStructure} from '@domain/textile-data/weave-structure/weave-structure';\nimport {WeaveStructureDetails} from '@domain/textile-data/weave-structure/weave-structure-details';\nimport {WeaveStructureForMachineQuality} from '@domain/textile-data/weave-structure/weave-structure-for-machine-quality';\nimport {ExtendedHttpParams} from '@infrastructure/http/extended-http-params';\nimport {WeaveStructureNameCheck} from '@infrastructure/http/weave-structure/weave-structure-name-check.interface';\nimport {GetAllWeaveStructuresParameters, WeaveStructures} from '@infrastructure/http/weave-structure/weave-structures';\nimport {OverviewListWeaveStructure} from '@presentation/pages/textile-data/weave-structure/overview/overview-list-weave-structure';\nimport {Conflict, GridModel} from '@vdw/angular-component-library';\nimport {isNil, map, orderBy} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {WeftSelectionSuggestions} from './weft-selection-suggestions.interface';\n\n@Injectable()\nexport class HttpWeaveStructuresService implements WeaveStructures {\n private readonly VARIABLE_NAMES_TO_HTTP_PARAMS_MAP = new Map([\n ['showOnlyLatestVersion', 'only-latest-versions'],\n ['numberOfCreelPositions', 'creel-positions'],\n ['isActive', 'active']\n ]);\n\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}weavestructures`, {params})\n .pipe(rxjsMap((weaveStructuresJSON: any) => weaveStructuresJSON.map((weaveStructureJSON: any) => WeaveStructureForMachineQuality.fromShortJSON(weaveStructureJSON))));\n }\n\n public get(gridModel: GridModel, additionalParams: any): Observable {\n const parameters: Partial = additionalParams;\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}weavestructures/get`, gridModel.toJSON(), {params})\n .pipe(rxjsMap((weaveStructuresJSON: any) => weaveStructuresJSON.map((weaveStructureJSON: any) => WeaveStructureForMachineQuality.fromShortJSON(weaveStructureJSON))));\n }\n\n public getAllOverviewListWeaveStructures(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}weavestructures`, {params})\n .pipe(rxjsMap((weaveStructuresJSON: any) => weaveStructuresJSON.map((weaveStructureJSON: any) => OverviewListWeaveStructure.fromJSON(weaveStructureJSON))));\n }\n\n public getById(id: number): Observable {\n return undefined;\n }\n\n public manageDelete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}weavestructures/manage/${id}`);\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}weavestructures/${id}`);\n }\n\n public save(item: WeaveStructureForMachineQuality): Observable {\n return undefined;\n }\n\n public update(item: WeaveStructureForMachineQuality): Observable {\n return undefined;\n }\n\n public getCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/custom-settings`).pipe(rxjsMap((response: PropertyValue[]) => response));\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}weavestructures/custom-settings`, chosenSettings);\n }\n\n public manageSaveOrUpdateSimple(item: WeaveStructure, wvsxFile: File): Observable {\n const formDataToUpload = new FormData();\n formDataToUpload.append('data', JSON.stringify(item.toJSON()));\n if (!isNil(wvsxFile)) {\n formDataToUpload.append('file', wvsxFile, wvsxFile.name);\n }\n\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}weavestructures/manage`, formDataToUpload).pipe(rxjsMap((result: number) => result));\n }\n\n public manageGetAllOverviewListWeaveStructures(parameters?: Partial): Observable {\n const params = new ExtendedHttpParams().setHttpParamsFromObject(parameters, this.VARIABLE_NAMES_TO_HTTP_PARAMS_MAP);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/manage`, {params}).pipe(\n rxjsMap((weaveStructuresJSON: any) => {\n return orderBy(\n map(weaveStructuresJSON, (weaveStructureJSON: any) => OverviewListWeaveStructure.fromJSON(weaveStructureJSON)),\n ['name', 'version'],\n ['asc', 'desc']\n );\n })\n );\n }\n\n public getByIdExtended(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/${id}`).pipe(rxjsMap((weaveStructureJSON: any) => WeaveStructure.fromJSON(weaveStructureJSON)));\n }\n\n public manageGetByIdExtended(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/manage/${id}`).pipe(rxjsMap((weaveStructureJSON: any) => WeaveStructure.fromJSON(weaveStructureJSON)));\n }\n\n public parseDescription(name: string, description: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/manage/parse-description?name=${name}&description=${encodeURIComponent(description)}`).pipe(\n rxjsMap((weaveStructureDetailsJSON: any) => {\n return WeaveStructureDetails.fromJSON(weaveStructureDetailsJSON);\n })\n );\n }\n\n public getFactorForConversionFromPicksToWefts(weaveStructureId: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}weavestructures/${weaveStructureId}/factor-for-conversion-from-picks-to-wefts`)\n .pipe(rxjsMap((result: {factorForConversionFromPicksToWefts: number}) => result.factorForConversionFromPicksToWefts));\n }\n\n public getWeftSelectionSuggestions(weaveStructureId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/${weaveStructureId}/cols-for-weft-selection-suggestion`).pipe(\n rxjsMap((result: {nrColumnsToDropForWeftSelection: number; weftSelections: any}) => {\n return {\n numberColumnsToDropForWeftSelectionSuggestion: result.nrColumnsToDropForWeftSelection,\n weftSelections: result.weftSelections?.map((weftSelectionJSON: any) => WeftSelection.fromJSON(weftSelectionJSON)) ?? []\n };\n })\n );\n }\n\n public duplicateWeaveStructure(weaveStructureId: number, name: string): Observable {\n const requestBody = {\n name,\n duplicatedFromWeaveStructureId: weaveStructureId,\n version: '1'\n };\n return this.httpClient.post<{id: number}>(`${this.backendConfiguration.getEndpoint()}weavestructures/duplicate`, requestBody).pipe(rxjsMap((result: {id: number}) => result.id));\n }\n\n public isNameUnavailableOrReserved(name: string): Observable {\n const params = new HttpParams().set('name', name);\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/check-name`, {params});\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weavestructures/${id}/conflicts`).pipe(\n rxjsMap((conflictsJSON: any) => {\n return conflictsJSON.map((conflictJSON: any) => {\n return Conflict.fromJSON(conflictJSON);\n });\n })\n );\n }\n\n public exportToWvsx(\n weaveStructureId: number,\n overrideWeaveStructureName: string,\n overrideWeaveStructureVersion: number,\n overrideWeaveStructureReleaseNotes: string,\n overrideWeaveStructureDescription: string,\n autoAddToConnect: boolean\n ): Observable> {\n const body = {\n weaveStructureId,\n overrideWeaveStructureName,\n overrideWeaveStructureVersion,\n overrideWeaveStructureReleaseNotes,\n overrideWeaveStructureDescription,\n autoAddToConnect\n };\n\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}weavestructures/manage/export-wvsx`, body, {\n observe: 'response',\n responseType: 'blob'\n });\n }\n}\n","import {HttpResponse} from '@angular/common/http';\nimport {InjectionToken} from '@angular/core';\nimport {PropertyValue} from '@domain/property-value';\nimport {WeaveStructure} from '@domain/textile-data/weave-structure/weave-structure';\nimport {WeaveStructureDetails} from '@domain/textile-data/weave-structure/weave-structure-details';\nimport {WeaveStructureForMachineQuality} from '@domain/textile-data/weave-structure/weave-structure-for-machine-quality';\nimport {GridModelRepository} from '@infrastructure/http/grid-model-repository';\nimport {Repository} from '@infrastructure/http/repository';\nimport {WeaveStructureNameCheck} from '@infrastructure/http/weave-structure/weave-structure-name-check.interface';\nimport {OverviewListWeaveStructure} from '@presentation/pages/textile-data/weave-structure/overview/overview-list-weave-structure';\nimport {Observable} from 'rxjs';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {WeftSelectionSuggestions} from './weft-selection-suggestions.interface';\n\nexport const WEAVE_STRUCTURES = new InjectionToken('WeaveStructures');\n\nexport interface WeaveStructures extends Repository, ConflictsRepository, GridModelRepository {\n getAll(parameters?: Partial): Observable;\n getAllOverviewListWeaveStructures(parameters?: Partial): Observable;\n manageGetAllOverviewListWeaveStructures(parameters?: Partial): Observable;\n manageSaveOrUpdateSimple(item: WeaveStructure, wvsxFile: File): Observable;\n getByIdExtended(id: number): Observable;\n manageGetByIdExtended(id: number): Observable;\n parseDescription(name: string, description: string): Observable;\n getFactorForConversionFromPicksToWefts(weaveStructureId: number): Observable;\n getWeftSelectionSuggestions(weaveStructureId: number): Observable;\n duplicateWeaveStructure(weaveStructureId: number, name: string): Observable;\n isNameUnavailableOrReserved(name: string): Observable;\n manageDelete(id: number): Observable;\n getCustomSettings(): Observable;\n saveCustomSettings(chosenSettings: PropertyValue[]): Observable;\n exportToWvsx(\n weaveStructureId: number,\n overrideWeaveStructureName: string,\n overrideWeaveStructureVersion: number,\n overrideWeaveStructureReleaseNotes: string,\n overrideWeaveStructureDescription: string,\n autoAddToConnect: boolean\n ): Observable>;\n}\n\nexport interface GetAllWeaveStructuresParameters {\n showOnlyLatestVersion: boolean;\n numberOfCreelPositions: number;\n isActive: boolean;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {WeftColoredYarnSet} from '@domain/textile-data/weft-colored-yarn-set/weft-colored-yarn-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {WeftColoredYarnSets} from './weft-colored-yarn-sets';\n\n@Injectable()\nexport class HttpWeftColoredYarnSetsService implements WeftColoredYarnSets {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets`).pipe(\n rxjsMap((weftColoredYarnSetsJSON: any) => {\n return map(weftColoredYarnSetsJSON, (coloredYarnSetJSON: any) => {\n return OverviewListColoredYarnSet.fromJSON(coloredYarnSetJSON);\n });\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets/${id}`).pipe(\n rxjsMap((weftColoredYarnSetJSON: any) => {\n return WeftColoredYarnSet.fromJSON(weftColoredYarnSetJSON);\n })\n );\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets/check-name`, {params}).pipe(\n rxjsMap((response: {weftColoredYarnSetNameAvailable: boolean}) => {\n return response.weftColoredYarnSetNameAvailable;\n })\n );\n }\n\n public save(item: WeftColoredYarnSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: WeftColoredYarnSet): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets/${item.id}`, item.toJSON());\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}weftcoloredyarnsets/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {WeftColoredYarnSet} from '@domain/textile-data/weft-colored-yarn-set/weft-colored-yarn-set';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {ConflictsRepository} from '../conflicts-repository';\n\nexport const WEFT_COLORED_YARN_SETS = new InjectionToken('WeftColoredYarnSets');\n\nexport interface WeftColoredYarnSets extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository {}\n","import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nexport const YARN_CONSUMPTION = new InjectionToken('YarnConsumption');\n\nexport interface YarnConsumption {\n calculateYarnConsumptionForOrderline(id: number): Observable;\n calculateYarnConsumptionForProductionOrder(id: number | string): Observable;\n calculateYarnConsumptionForDesign(id: number, colorSetId: number, yarnSetId: number, machineQualityId: number, calculateYarnConsumptionPerDent: boolean): Observable;\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {YarnSets} from '@infrastructure/http/yarn-set/yarn-sets';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {CheckName, Conflict} from '@vdw/angular-component-library';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpYarnSetsService implements YarnSets {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}yarnsets/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarnsets`).pipe(\n rxjsMap((yarnSetsJSON: any) => {\n return map(yarnSetsJSON, (yarnSetJSON: any) => {\n return OverviewListYarnSet.fromJSON(yarnSetJSON);\n });\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarnsets/${id}`).pipe(\n rxjsMap((yarnSetJSON: any) => {\n return YarnSet.fromJSON(yarnSetJSON);\n })\n );\n }\n\n public save(item: YarnSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}yarnsets`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public update(item: YarnSet): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}yarnsets/${item.id}`, item.toJSON());\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}yarnsets/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}yarnsets/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarnsets/custom-settings`);\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarnsets/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}yarnsets/custom-settings`, chosenSettings);\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarnsets/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: YarnSet): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}yarnsets/custom-settings/generate-name`, item.toJSON());\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {ConflictsRepository} from '../conflicts-repository';\nimport {CustomSettingsObjectRepository} from '../custom-settings-object-repository';\nimport {NameGenerationRepository} from '../name-generation-repository';\n\nexport const YARN_SETS = new InjectionToken('YarnSets');\n\nexport interface YarnSets extends Repository, UniqueIdentifierObjectRepository, ConflictsRepository, CustomSettingsObjectRepository, NameGenerationRepository {}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {CheckName, Conflict, GridModel, Unit} from '@vdw/angular-component-library';\nimport {each, isNil, map} from 'lodash-es';\nimport {Observable, OperatorFunction} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {NameGenerationRepository} from '../name-generation-repository';\nimport {Repository} from '../repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpYarnTypesService implements Repository, NameGenerationRepository {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}yarntypes/${id}`);\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes`).pipe(this.getOverviewListYarnType());\n }\n\n public get(gridModel: GridModel): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}yarntypes/get`, gridModel.toJSON()).pipe(this.getOverviewListYarnType());\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/${id}`).pipe(rxjsMap((yarnTypeJSON: any) => YarnType.fromJSON(yarnTypeJSON)));\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/custom-settings`).pipe(rxjsMap((response: PropertyValue[]) => response));\n }\n\n public getListOfGroups(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/groups`).pipe(rxjsMap((response: string[]) => response));\n }\n\n public getListOfRawMaterials(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/raw-materials`).pipe(rxjsMap((response: string[]) => response));\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}yarntypes/custom-settings/already-adjusted`)\n .pipe(rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => response.alreadyAdjustedCustomSettings));\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}yarntypes/check-name`, {params}).pipe(rxjsMap((response: any) => CheckName.fromJSON(response)));\n }\n\n public save(item: YarnType): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}yarntypes`, item.toJSON()).pipe(rxjsMap((response: {id: number}) => response.id));\n }\n\n public saveCustomSettings(chosenSettings: PropertyValue[]): Observable {\n const settingsToSave: PropertyValue[] = [];\n\n each(chosenSettings, (chosenSetting: PropertyValue) => {\n let propertyValue: any = chosenSetting.propertyValue;\n\n if (!isNil(Unit.getKeyFromValue(chosenSetting.propertyValue))) {\n propertyValue = Unit.getKeyFromValue(chosenSetting.propertyValue);\n }\n\n settingsToSave.push({propertyName: chosenSetting.propertyName, propertyValue});\n });\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}yarntypes/custom-settings`, settingsToSave);\n }\n\n public update(item: YarnType): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}yarntypes/${item.id}`, item.toJSON());\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}yarntypes/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/${columnIdentifier}/possible-values`).pipe(rxjsMap((response: string[]) => response));\n }\n\n public getNameGenerationProperties(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}yarntypes/custom-settings/name-generation-properties`);\n }\n\n public generateName(item: YarnType): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}yarntypes/custom-settings/generate-name`, item.toJSON());\n }\n\n private getOverviewListYarnType(): OperatorFunction {\n return rxjsMap((yarnTypesJSON: any) => {\n return map(yarnTypesJSON, (yarnTypeJSON: any) => {\n return OverviewListYarnType.fromJSON(yarnTypeJSON);\n });\n });\n }\n}\n","\n
\n
\n
\n \n

{{ getTitleKey() | bmsTranslate }}

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

{{ getStepTitleKey() | bmsTranslate }}

\n

{{ getStepDescriptionKey() | bmsTranslate }}

\n
\n
\n
\n
\n

{{ 'ONBOARDING.FEATURES_UNDER_TAB' | bmsTranslate }}

\n
\n
\n
    \n
  • {{ feature | bmsTranslate }}
  • \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, Inject, ViewChild} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {BaseComponent, TranslateService, WINDOW} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, isNil, isString, keys, map, max, size} from 'lodash-es';\nimport {fromEvent} from 'rxjs';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\nimport {OnboardingStep} from './onboarding-step.enum';\nimport {OnboardingType} from './onboarding-type';\n\n@Component({\n selector: 'app-onboarding-dialog',\n templateUrl: './onboarding-dialog.component.html',\n styleUrls: ['./onboarding-dialog.component.scss']\n})\nexport class OnboardingDialogComponent extends BaseComponent implements AfterViewInit {\n @ViewChild('dialogHeader') public dialogHeader: ElementRef;\n public onboardingStepFeatures: string[] = [];\n public arrowLeftPositionInPx: number;\n public arrowTopPositionInPx: number;\n public canShowBlueArrow = false;\n\n private readonly translate: TranslateService;\n private readonly matDialogRef: MatDialogRef;\n private readonly elementRef: ElementRef;\n private readonly changeDetectorRef: ChangeDetectorRef;\n private readonly onboardingTranslationKey = 'ONBOARDING';\n private readonly arrowPadding = 5;\n private readonly arrowSize = 24;\n private readonly dialogMargin = 16;\n private readonly position: PositionOfDialog;\n private readonly genericTitleKey = `${this.onboardingTranslationKey}.TITLE`;\n\n private onboardingType: OnboardingType;\n private currentOnboardingStep: OnboardingStep;\n private currentStepIndex = 0;\n private onboardingSteps: OnboardingStep[] = [];\n private onNextStep: (updateDialog: (sourceElement: HTMLElement, leftPositionInPx?: number) => void, currentOnboardingStep: OnboardingStep) => void;\n private sourceElement: HTMLElement;\n private initialLeftPositionInPx: number;\n private navigatingToNextStep = false;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n @Inject(WINDOW) private readonly window: Window,\n translate: TranslateService,\n matDialogRef: MatDialogRef,\n elementRef: ElementRef,\n changeDetectorRef: ChangeDetectorRef\n ) {\n super();\n\n this.translate = translate;\n this.matDialogRef = matDialogRef;\n this.elementRef = elementRef;\n this.changeDetectorRef = changeDetectorRef;\n\n this.onboardingType = data.type;\n this.onboardingSteps = data.steps;\n this.currentOnboardingStep = data.steps[this.currentStepIndex];\n this.position = data.position;\n this.onNextStep = data.onNextStep;\n this.setSourceElementAndInitialLeftPositionInPx(data.sourceElement, data.leftPositionInPx);\n this.setOnboardingStepFeatures();\n }\n\n public ngAfterViewInit(): void {\n fromEvent(this.window, 'resize')\n .pipe(debounceTime(250), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.updateDialog(this.sourceElement, this.initialLeftPositionInPx);\n });\n\n this.updateDialog(this.sourceElement, this.initialLeftPositionInPx);\n this.changeDetectorRef.detectChanges();\n }\n\n public canShowFeatures(): boolean {\n return !isEmpty(this.onboardingStepFeatures);\n }\n\n public finishTour(): void {\n if (!this.navigatingToNextStep) {\n this.matDialogRef.close(true);\n }\n }\n\n public canGoToNextStep(): boolean {\n return this.currentStepIndex + 1 < size(this.onboardingSteps);\n }\n\n public getTitleKey(): string {\n const onboardingTypeTitleKey = `${this.onboardingTranslationKey}.${this.onboardingType}.TITLE`;\n\n return this.translate.has(onboardingTypeTitleKey) ? onboardingTypeTitleKey : this.genericTitleKey;\n }\n\n public getStepTitleKey(): string {\n return `${this.onboardingTranslationKey}.${this.onboardingType}.${this.currentOnboardingStep}.TITLE`;\n }\n\n public getStepDescriptionKey(): string {\n return `${this.onboardingTranslationKey}.${this.onboardingType}.${this.currentOnboardingStep}.DESCRIPTION`;\n }\n\n public hasOnboardingSteps(): boolean {\n return !isEmpty(this.onboardingSteps);\n }\n\n public isArrowPositionedAtTop(): boolean {\n return isEqual(this.position, PositionOfDialog.BOTTOM);\n }\n\n public getChooseEventName(): string {\n return this.canGoToNextStep() ? 'ONBOARDING.NEXT' : 'ONBOARDING.FINISH_TOUR';\n }\n\n public chooseEvent(): void {\n this.canGoToNextStep() ? this.goToNextStep() : this.finishTour();\n }\n\n private goToNextStep(): void {\n this.currentStepIndex++;\n this.currentOnboardingStep = this.onboardingSteps[this.currentStepIndex];\n this.navigatingToNextStep = true;\n\n this.setOnboardingStepFeatures();\n\n setTimeout(() => {\n this.onNextStep((sourceElement: HTMLElement, leftPositionInPx?: number): void => {\n this.updateDialog(sourceElement, leftPositionInPx);\n }, this.currentOnboardingStep);\n this.navigatingToNextStep = false;\n });\n }\n\n private setOnboardingStepFeatures(): void {\n const onboardingStepFeatures = this.translate.instant(`${this.onboardingTranslationKey}.${this.onboardingType}.${this.currentOnboardingStep}.FEATURES`);\n\n this.onboardingStepFeatures = !isString(onboardingStepFeatures)\n ? map(keys(onboardingStepFeatures), (onboardingStepFeatureKey: string) => {\n return `${this.onboardingTranslationKey}.${this.onboardingType}.${this.currentOnboardingStep}.FEATURES.${onboardingStepFeatureKey}`;\n })\n : [];\n }\n\n private updateDialog(sourceElement: HTMLElement, leftPositionInPx?: number): void {\n this.setSourceElementAndInitialLeftPositionInPx(sourceElement, leftPositionInPx);\n sourceElement?.scrollIntoView(false);\n this.repositionDialog(sourceElement);\n\n this.canShowBlueArrow = (this.dialogHeader.nativeElement as HTMLElement).getBoundingClientRect().bottom >= this.arrowTopPositionInPx + this.arrowSize;\n }\n\n private repositionDialog(sourceElement: HTMLElement): void {\n if (!sourceElement) {\n return;\n }\n\n const sourceElementDOMRect: DOMRect = sourceElement.getBoundingClientRect();\n const dialogDOMRect: DOMRect = (this.elementRef.nativeElement as HTMLElement).getBoundingClientRect();\n\n const {arrowLeftPositionInPx, dialogLeftPositionInPx} = this.calculateArrowAndDialogLeftPositionInPx(sourceElementDOMRect, dialogDOMRect);\n\n const {arrowTopPositionInPx, dialogTopPositionInPx} = this.calculateArrowAndDialogTopPositionInPx(sourceElementDOMRect, dialogDOMRect);\n\n this.arrowLeftPositionInPx = arrowLeftPositionInPx;\n this.arrowTopPositionInPx = arrowTopPositionInPx;\n\n this.matDialogRef.updatePosition({left: `${dialogLeftPositionInPx}px`, top: `${dialogTopPositionInPx}px`});\n }\n\n private setSourceElementAndInitialLeftPositionInPx(sourceElement: HTMLElement, leftPositionInPx?: number): void {\n this.sourceElement = sourceElement;\n this.initialLeftPositionInPx = isNil(leftPositionInPx) ? sourceElement?.getBoundingClientRect().right : leftPositionInPx;\n }\n\n private calculateArrowAndDialogLeftPositionInPx(sourceElementDOMRect: DOMRect, dialogDOMRect: DOMRect): {arrowLeftPositionInPx: number; dialogLeftPositionInPx: number} {\n let arrowLeftPositionInPx: number;\n let dialogLeftPositionInPx: number;\n\n if (isEqual(this.position, PositionOfDialog.RIGHT)) {\n arrowLeftPositionInPx = this.initialLeftPositionInPx;\n dialogLeftPositionInPx = arrowLeftPositionInPx + this.arrowSize - this.arrowPadding;\n } else {\n arrowLeftPositionInPx = sourceElementDOMRect.left + sourceElementDOMRect.width / 2 - (sourceElementDOMRect.width - this.arrowSize) / 2;\n dialogLeftPositionInPx = sourceElementDOMRect.left;\n\n if (dialogDOMRect.width + dialogLeftPositionInPx > this.window.innerWidth + this.dialogMargin) {\n dialogLeftPositionInPx = max([this.dialogMargin, this.window.innerWidth - dialogDOMRect.width - this.dialogMargin]);\n }\n }\n\n return {arrowLeftPositionInPx, dialogLeftPositionInPx};\n }\n\n private calculateArrowAndDialogTopPositionInPx(sourceElementDOMRect: DOMRect, dialogDOMRect: DOMRect): {arrowTopPositionInPx: number; dialogTopPositionInPx: number} {\n let arrowTopPositionInPx: number;\n let dialogTopPositionInPx: number;\n\n if (isEqual(this.position, PositionOfDialog.RIGHT)) {\n arrowTopPositionInPx = sourceElementDOMRect.top + sourceElementDOMRect.height / 2 - this.arrowSize / 2;\n dialogTopPositionInPx = arrowTopPositionInPx - (this.dialogHeader.nativeElement.offsetHeight - this.arrowSize) / 2;\n\n if (dialogDOMRect.height + dialogTopPositionInPx > this.window.innerHeight - this.dialogMargin) {\n dialogTopPositionInPx = max([this.dialogMargin, this.window.innerHeight - dialogDOMRect.height - this.dialogMargin]);\n }\n } else {\n arrowTopPositionInPx = sourceElementDOMRect.bottom - this.arrowPadding;\n dialogTopPositionInPx = arrowTopPositionInPx + this.arrowSize - this.arrowPadding;\n }\n\n return {arrowTopPositionInPx, dialogTopPositionInPx};\n }\n}\n","import {Injectable} from '@angular/core';\nimport {OnboardingDialogComponent} from '@presentation/components/onboarding-dialog/onboarding-dialog.component';\nimport {OnboardingType} from '@presentation/components/onboarding-dialog/onboarding-type';\nimport {DialogBuilder, DialogBuilderFactoryService, LocalStorageService} from '@vdw/angular-component-library';\nimport {defaultTo, find, first, get, isEqual, isNil, lowerCase, noop, pull} from 'lodash-es';\nimport {Observable, Subject} from 'rxjs';\nimport {Onboarding} from './onboarding';\nimport {OnboardingConfig} from './onboarding-config';\n\ninterface QueuedOnboarding {\n isRunning: boolean;\n config: OnboardingConfig;\n}\n\n@Injectable()\nexport class OnboardingService implements Onboarding {\n public static readonly LOCAL_STORAGE_KEY = 'onboarding';\n private queuedOnboarding: QueuedOnboarding[] = [];\n private dialogBuilder: DialogBuilder;\n private restartOnboardingSubject: Subject = new Subject();\n\n public constructor(\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly localStorage: LocalStorageService\n ) {}\n\n public start(config: OnboardingConfig): void {\n this.queuedOnboarding.push({\n isRunning: false,\n config\n });\n\n this.processFirstItemInQueuedOnboarding();\n }\n\n public stop(): void {\n if (!isNil(this.dialogBuilder)) {\n this.dialogBuilder.close(false);\n }\n }\n\n public canStartOnboarding(onboardingType: OnboardingType): boolean {\n return !get(this.localStorage.get>(OnboardingService.LOCAL_STORAGE_KEY), lowerCase(onboardingType), false);\n }\n\n public onOnboardingRestart(): Observable {\n return this.restartOnboardingSubject;\n }\n\n public restart(type: OnboardingType): void {\n this.updateOnboardingState(type, false);\n\n if (isEqual(type, OnboardingType.NAVIGATION)) {\n this.restartOnboardingSubject.next();\n }\n }\n\n public completeTypeOfOnboarding(type: OnboardingType): void {\n this.updateOnboardingState(type, true);\n }\n\n private processFirstItemInQueuedOnboarding(): void {\n const firstItemInQueue: QueuedOnboarding = first(this.queuedOnboarding);\n if (!isNil(firstItemInQueue) && !firstItemInQueue.isRunning) {\n firstItemInQueue.isRunning = true;\n const {panelClass, showBackdrop, type, steps, sourceElement, leftPositionInPx, position, onNextStep, onCompleted} = this.setDefaultValuesForOnboardingConfig(firstItemInQueue.config);\n\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder().withClass(panelClass);\n this.dialogBuilder = showBackdrop ? this.dialogBuilder.withCustomBackdrop('onboarding-backdrop') : this.dialogBuilder.withoutBackdrop();\n\n this.dialogBuilder\n .openDialog(OnboardingDialogComponent, {\n type,\n steps,\n onNextStep,\n sourceElement,\n leftPositionInPx,\n position\n })\n .subscribe((updateLocalStorage: boolean) => {\n if (updateLocalStorage) {\n this.completeTypeOfOnboarding(type);\n onCompleted?.();\n this.cleanUpAndHandleNextItemInQueue();\n } else {\n this.dialogBuilder = null;\n this.queuedOnboarding = [];\n }\n });\n }\n }\n\n private cleanUpAndHandleNextItemInQueue(): void {\n pull(this.queuedOnboarding, find(this.queuedOnboarding, {isRunning: true}));\n this.dialogBuilder = null;\n this.processFirstItemInQueuedOnboarding();\n }\n\n private setDefaultValuesForOnboardingConfig(config: OnboardingConfig): OnboardingConfig {\n config.showBackdrop = defaultTo(config.showBackdrop, false);\n config.leftPositionInPx = defaultTo(config.leftPositionInPx, null);\n config.steps = defaultTo(config.steps, []);\n config.panelClass = defaultTo(config.panelClass, 'onboarding-dialog');\n config.onNextStep = defaultTo(config.onNextStep, noop);\n\n return config;\n }\n\n private updateOnboardingState(type: OnboardingType, value: boolean): void {\n const storedOnboardingStates = defaultTo(this.localStorage.get>(OnboardingService.LOCAL_STORAGE_KEY), {});\n storedOnboardingStates[lowerCase(type)] = value;\n this.localStorage.set(OnboardingService.LOCAL_STORAGE_KEY, storedOnboardingStates);\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {OnboardingType} from '@presentation/components/onboarding-dialog/onboarding-type';\nimport {Observable} from 'rxjs';\nimport {OnboardingConfig} from './onboarding-config';\n\nexport const ONBOARDING = new InjectionToken('Onboarding');\n\nexport interface Onboarding {\n start(config: OnboardingConfig): void;\n stop(): void;\n canStartOnboarding(onboardingType: OnboardingType): boolean;\n onOnboardingRestart(): Observable;\n restart(onboardingType: OnboardingType): void;\n completeTypeOfOnboarding(type: OnboardingType): void;\n}\n","import {InjectionToken} from '@angular/core';\nimport {EventExecutedSuccessfullyUpdate} from '@domain/event-executed-successfully-update';\nimport {Observable} from 'rxjs';\n\nexport const SIGNALR_EVENT = new InjectionToken('SignalrEvent');\n\nexport interface SignalrEvent {\n getEventExecutedSuccessfullyUpdates(): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {BackgroundJobGlobalStatusUpdate} from '@domain/background-jobs/background-job-global-status-update';\nimport {Observable} from 'rxjs';\n\nexport const REALTIME_BACKGROUND_JOBS = new InjectionToken('RealtimeBackgroundJobs');\n\nexport interface RealtimeBackgroundJobs {\n getJobGlobalStatusChanged(): Observable;\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {EventExecutedSuccessfullyUpdate} from '@domain/event-executed-successfully-update';\nimport {MachineDirectoryUpdate} from '@domain/machine/machine-information-update/machine-directory-update.interface';\nimport {MachineEfficiencyUpdate} from '@domain/machine/machine-information-update/machine-efficiency-update.interface';\nimport {MachineMessageUpdate} from '@domain/machine/machine-information-update/machine-message-update.interface';\nimport {MachineProductionOrderUpdate} from '@domain/machine/machine-information-update/machine-production-order-update.interface';\nimport {MachineQueueProgressUpdate} from '@domain/machine/machine-information-update/machine-queue-progress-update.interface';\nimport {MachineReportItemUpdate} from '@domain/machine/machine-information-update/machine-report-item-update.interface';\nimport {MachineSpeedUpdate} from '@domain/machine/machine-information-update/machine-speed-update.interface';\nimport {MachineStatusUpdate} from '@domain/machine/machine-information-update/machine-status-update.interface';\nimport {HubConnection} from '@microsoft/signalr';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {concatAll, first, map, Observable, tap} from 'rxjs';\nimport {MachineReportItemsUpdated} from './events/machine-report-items-updated.interface';\nimport {RealtimeMachines} from './realtime-machines';\n\n@Injectable()\nexport class SignalrMachineService implements RealtimeMachines {\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public getReportItemsChanged(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getReportItemsHubEndPoint()}reportitems`, 'OnMachineReportItemChangedLegacy').pipe(\n map((result: MachineReportItemsUpdated) => result.reportItems),\n concatAll()\n );\n }\n\n public getMachineEfficiency(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`,\n 'OnMachineEfficiencyChanged'\n );\n }\n\n public getMachineStatus(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnMachineStatusChanged');\n }\n\n public getMachineMessage(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnMachineMessageReceived');\n }\n\n public getMachineOrderProgress(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`,\n 'OnOrderProgressChanged'\n );\n }\n\n public getMachineQueueProgress(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnQueueProgressChanged');\n }\n\n public getMachineDirectory(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnMachineDirectoryReceived');\n }\n\n public requestForMachineDirectories(orderId: string): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubConnection(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`).pipe(\n first(),\n tap((hubConnection: HubConnection) => hubConnection.send('GetMachineDirectories', orderId)),\n map(() => null)\n );\n }\n\n public getMachineSpeed(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnMachineSpeedChanged');\n }\n\n public getMachineEventExecutedSuccessfully(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getMachineOverviewHubEndPoint()}machineoverview`,\n 'OnEventExecutedSuccessfully'\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Notification} from '@domain/notifications/notification';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {OnNotificationMarkedAsReadInterface} from './on-notification-marked-as-read.interface';\n\n@Injectable()\nexport class SignalrNotificationsService {\n public readonly newNotifications: Observable;\n public readonly notificationsMarkedAsRead: Observable;\n\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {\n this.newNotifications = this.getNewNotifications();\n this.notificationsMarkedAsRead = this.getNotificationsMarkedAsRead();\n }\n\n private getNewNotifications(): Observable {\n return this.signalrHubConnectionFactoryService\n .getSignalrHubEvents(`${this.backendConfiguration.getAlertingHubEndPoint()}alerting`, 'OnNotificationReceived')\n .pipe(map((notificationChanges: any) => Notification.fromJSON(notificationChanges)));\n }\n\n private getNotificationsMarkedAsRead(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getAlertingHubEndPoint()}alerting`, 'OnNotificationMarkedAsRead').pipe(\n map((notificationChanges: any) => {\n return {readNotificationIds: notificationChanges.readNotificationIds, unreadCount: notificationChanges.unreadCount};\n })\n );\n }\n}\n","export enum ReportItemGroupType {\n MACHINE = 'MACHINE',\n GROUP = 'GROUP'\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {ReportItemField} from '@domain/planning-prototype/real-time/report-item-field.enum';\nimport {ReportItemGroupType} from '@domain/planning-prototype/real-time/report-item-group-type.enum';\nimport {ReportItemSubscription} from '@domain/planning-prototype/real-time/report-item-subscription';\nimport {ReportItemUpdate} from '@domain/planning-prototype/real-time/report-item-update';\nimport {HubConnection} from '@microsoft/signalr';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {EMPTY, Observable, Subscriber, catchError, filter, switchMap} from 'rxjs';\n\n@Injectable()\nexport class SignalRPlanningPrototypeService {\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public itemsToPlanChanged(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getPlanningHubEndPoint()}planning`, 'OnItemsToPlanChanged');\n }\n\n public getReportItemUpdates(machineId: number, reportItem: ReportItemField): Observable> {\n return this.signalrHubConnectionFactoryService.getSignalrHubConnection(`${this.backendConfiguration.getPlanningHubEndPoint()}planning`).pipe(\n switchMap(\n (connection: HubConnection) =>\n new Observable((subscriber: Subscriber>) => {\n const callBack = (update: ReportItemUpdate): void => subscriber.next(update);\n const subscription: ReportItemSubscription = {groupId: machineId, reportItem, groupType: ReportItemGroupType.MACHINE};\n connection.on('OnReportItemChanged', callBack);\n connection.invoke('SubscribeToReportItemAsync', subscription).catch((e: Error) => subscriber.error(e));\n return () => {\n connection.invoke('UnsubscribeFromReportItemAsync', subscription).catch((e: Error) => subscriber.error(e));\n connection.off('OnReportItemChanged', callBack);\n };\n })\n ),\n filter((update: ReportItemUpdate): update is ReportItemUpdate => update.groupId === machineId && update.reportItem === reportItem && update.groupType === ReportItemGroupType.MACHINE),\n catchError(() => EMPTY)\n );\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {Observable} from 'rxjs';\nimport {DeletedPlanningItem} from './deleted-planning-item';\n\nexport const REALTIME_PLANNING = new InjectionToken('RealtimePlanning');\n\nexport interface RealtimePlanning {\n getPlanningChanges(): Observable;\n getDeletedPlanningItem(): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {ProductionOrderLiteStatusChange} from './production-order-lite-status-change';\n\nexport const REALTIME_PRODUCTION_ORDER_LITE = new InjectionToken('RealtimeProductionOrderLite');\n\nexport interface RealtimeProductionOrderLite {\n getProductionOrdersLiteStatusChanges(): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {ProductionOrderCreated} from '@infrastructure/signalr/production-order/production-order-created';\nimport {Observable} from 'rxjs';\nimport {ProductionOrderStatusChange} from './production-order-status-change';\n\nexport const REALTIME_PRODUCTION_ORDER = new InjectionToken('RealtimeProductionOrder');\n\nexport interface RealtimeProductionOrder {\n getProductionOrdersStatusChanges(): Observable;\n\n getProductionOrderCreated(): Observable;\n}\n","import {InjectionToken} from '@angular/core';\nimport {CalculatedYarnConsumption} from '@domain/yarn-consumption/calculated-yarn-consumption';\nimport {CalculatedYarnConsumptionForProductionOrder} from '@domain/yarn-consumption/calculated-yarn-consumption-for-production-order';\nimport {Observable} from 'rxjs';\n\nexport const REALTIME_YARN_CONSUMPTION = new InjectionToken('RealtimeYarnConsumption');\n\nexport interface RealtimeYarnConsumption {\n getCalculatedYarnConsumption(): Observable;\n getCalculatedYarnConsumptionForProductionOrder(): Observable;\n getSingleBmpProcessed(): Observable;\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {CalculatedYarnConsumption} from '@domain/yarn-consumption/calculated-yarn-consumption';\nimport {CalculatedYarnConsumptionForProductionOrder} from '@domain/yarn-consumption/calculated-yarn-consumption-for-production-order';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {merge, Observable} from 'rxjs';\nimport {RealtimeYarnConsumption} from './realtime-yarn-consumption';\n\n@Injectable()\nexport class SignalrYarnConsumptionService implements RealtimeYarnConsumption {\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public getCalculatedYarnConsumption(): Observable {\n return merge(\n this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getProcessingHubEndPoint()}processing`,\n 'OnYarnConsumptionOrderLineCalculated'\n ),\n this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getProcessingHubEndPoint()}processing`, 'OnYarnConsumptionDesignCalculated')\n );\n }\n\n public getCalculatedYarnConsumptionForProductionOrder(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getProcessingHubEndPoint()}processing`,\n 'OnYarnConsumptionProductionOrderCalculated'\n );\n }\n\n public getSingleBmpProcessed(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getTexCatalogHubEndPoint()}texcatalog`, 'OnSingleBmpProcessed');\n }\n}\n","import {DragDropModule} from '@angular/cdk/drag-drop';\nimport {NgModule} from '@angular/core';\nimport {BreakPoint, FlexLayoutModule, MediaMarshaller} from '@angular/flex-layout';\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 {MAT_CARD_CONFIG, MatCardModule} from '@angular/material/card';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatRippleModule} from '@angular/material/core';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatExpansionModule} from '@angular/material/expansion';\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 {MatProgressBarModule} from '@angular/material/progress-bar';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatRadioModule} from '@angular/material/radio';\nimport {MatSelectModule} from '@angular/material/select';\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 {MatTabsModule} from '@angular/material/tabs';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {filter, isEmpty, noop} from 'lodash-es';\n\n@NgModule({\n imports: [\n MatSidenavModule,\n MatListModule,\n MatIconModule,\n MatDialogModule,\n MatCardModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatRadioModule,\n MatInputModule,\n MatTabsModule,\n MatMenuModule,\n MatButtonModule,\n MatSelectModule,\n MatExpansionModule,\n MatTooltipModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatToolbarModule,\n MatSliderModule,\n DragDropModule,\n MatDatepickerModule,\n MatRippleModule,\n FlexLayoutModule,\n MatButtonToggleModule,\n MatBadgeModule,\n MatSnackBarModule\n ],\n exports: [\n MatSidenavModule,\n MatListModule,\n MatIconModule,\n MatDialogModule,\n MatCardModule,\n MatCheckboxModule,\n MatProgressSpinnerModule,\n MatProgressBarModule,\n MatRadioModule,\n MatInputModule,\n MatTabsModule,\n MatMenuModule,\n MatButtonModule,\n MatSelectModule,\n MatExpansionModule,\n MatTooltipModule,\n MatAutocompleteModule,\n MatSlideToggleModule,\n MatToolbarModule,\n MatSliderModule,\n DragDropModule,\n MatDatepickerModule,\n MatRippleModule,\n FlexLayoutModule,\n MatButtonToggleModule,\n MatBadgeModule,\n MatSnackBarModule\n ],\n providers: [\n {\n provide: MAT_CARD_CONFIG,\n useValue: {\n appearance: 'outlined'\n }\n }\n ]\n})\nexport class MaterialModule {\n private lastActivatedBreakpoints: BreakPoint[];\n\n public constructor(mediaMarshaller: MediaMarshaller) {\n // @ts-ignore\n mediaMarshaller.subject.subscribe(() => {\n // @ts-ignore\n if (isEmpty(filter(mediaMarshaller.activatedBreakpoints, {alias: 'print'}))) {\n // @ts-ignore\n this.lastActivatedBreakpoints = [...mediaMarshaller.activatedBreakpoints];\n } else {\n // @ts-ignore\n mediaMarshaller.activatedBreakpoints = [...this.lastActivatedBreakpoints];\n // @ts-ignore\n mediaMarshaller.hook.collectActivations = noop;\n // @ts-ignore\n mediaMarshaller.hook.deactivations = [...this.lastActivatedBreakpoints];\n }\n });\n }\n}\n","
\n \n \n
\n","import {Component, Inject} from '@angular/core';\nimport {BackgroundStatus} from '@domain/background-jobs/background-status';\nimport {BackgroundTaskWithJob} from '@presentation/components/background-jobs/background-task-with-job';\nimport {ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {first} from 'lodash-es';\n\n@Component({\n templateUrl: './background-jobs-overview-status.component.html',\n styleUrls: ['./background-jobs-overview-status.component.scss']\n})\nexport class BackgroundJobsOverviewStatusComponent implements ICellRendererAngularComp {\n public backgroundStatusIcon: string;\n\n public constructor(@Inject(RESPONSIVENESS_VIEW_MODE) public readonly responsivenessViewMode: ResponsivenessViewMode) {}\n\n public agInit(params: ICellRendererParams): void {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.node.group ? first(params.node.allLeafChildren).data : params.data;\n const status: BackgroundStatus = params.node.group || this.responsivenessViewMode.isPhone ? backgroundTaskWithJob.backgroundJob.status : backgroundTaskWithJob.backgroundTask.status;\n\n this.backgroundStatusIcon = BackgroundStatus.getStatusIconName(status);\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {ErrorMessageHelper} from '@application/helper/error-message-helper';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {DurationFormatPipe} from '@application/pipes/duration-format.pipe';\nimport {BackgroundJob} from '@domain/background-jobs/background-job';\nimport {BackgroundJobType} from '@domain/background-jobs/background-job-type';\nimport {BackgroundStatus} from '@domain/background-jobs/background-status';\nimport {BackgroundTask} from '@domain/background-jobs/background-task';\nimport {BackgroundTaskAction} from '@domain/background-jobs/background-task-action';\nimport {ListOverviewActionsComponent} from '@presentation/pages/texfab/production-schedule/overview/actions/list-overview-actions.component';\nimport {ListOverviewAction} from '@presentation/pages/texfab/production-schedule/overview/list-overview-action';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n RESPONSIVENESS_VIEW_MODE,\n ResponsivenessViewMode,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {\n ColDef,\n GetQuickFilterTextParams,\n GridOptions,\n ITooltipParams,\n RowClassParams,\n RowClickedEvent,\n RowDataUpdatedEvent,\n RowGroupOpenedEvent,\n RowNode,\n ValueFormatterParams,\n ValueGetterParams\n} from 'ag-grid-community';\nimport {findLast, first, flatMap, isEmpty, isEqual, isNil, map, reject, some} from 'lodash-es';\nimport {map as rxjsMap} from 'rxjs/operators';\nimport {BackgroundJobsOverviewStatusComponent} from '../background-jobs-overview-status/background-jobs-overview-status.component';\nimport {BackgroundTaskWithJob} from '../background-task-with-job';\n\n@Component({\n selector: 'app-background-jobs-grid',\n templateUrl: './background-jobs-grid.component.html',\n styleUrls: ['./background-jobs-grid.component.scss']\n})\nexport class BackgroundJobsGridComponent extends BaseComponent implements OnInit, OnChanges {\n @ViewChild('backgroundJobsGrid') public backgroundJobsGrid: AgGridAngular;\n\n @Input() public filterText: string;\n @Input() public backgroundJobs: BackgroundJob[];\n @Output() public backgroundJobSelected: EventEmitter = new EventEmitter();\n @Output() public retryBackgroundJob: EventEmitter = new EventEmitter();\n @Output() public cancelBackgroundJob: EventEmitter = new EventEmitter();\n\n @Input() public selectedBackgroundJobs: BackgroundJob[] = [];\n @Output() public selectedBackgroundJobsChange: EventEmitter = new EventEmitter();\n\n public backgroundTaskWithJobs: BackgroundTaskWithJob[];\n public gridOptionsForListOfBackgroundJobs: GridOptions;\n\n private jobType = 'BACKGROUND_JOBS.JOB_TYPE.JOB_TYPE';\n\n public constructor(\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode,\n private readonly translate: TranslateService,\n private readonly durationFormatPipe: DurationFormatPipe,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly errorMessageHelper: ErrorMessageHelper\n ) {\n super();\n\n this.translate = translate;\n this.durationFormatPipe = durationFormatPipe;\n }\n\n public ngOnInit(): void {\n this.setGridOptionsForListOfBackgroundJobs();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('backgroundJobs' in changes && !changes.backgroundJobs.isFirstChange()) {\n if (this.responsivenessViewMode.isPhone) {\n this.backgroundTaskWithJobs = map(this.backgroundJobs, (backgroundJob: BackgroundJob) => {\n return {\n backgroundJob,\n backgroundTask: findLast(backgroundJob.tasks, (task: BackgroundTask) => !isEqual(task.status, BackgroundStatus.NOT_STARTED))\n };\n });\n } else {\n this.backgroundTaskWithJobs = flatMap(this.backgroundJobs, (backgroundJob: BackgroundJob) => {\n return flatMap(backgroundJob.tasks, (backgroundTask: BackgroundTask) => {\n return {\n backgroundJob,\n backgroundTask\n } as BackgroundTaskWithJob;\n });\n });\n }\n }\n }\n\n private setGridOptionsForListOfBackgroundJobs(): void {\n const titleForListOfJobs = 'BACKGROUND_JOBS.PROCESSES';\n\n this.gridOptionsForListOfBackgroundJobs = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefs(this.responsivenessViewMode.isPhone), GridIdentifier.BACKGROUND_JOBS)\n .withOnRowClicked((event: RowClickedEvent) => this.rowClick(event))\n .withOnRowDataUpdated(({api}: RowDataUpdatedEvent) => {\n if (!isEmpty(this.selectedBackgroundJobs)) {\n api.forEachNode((node: RowNode) => {\n node.setExpanded(some(this.selectedBackgroundJobs, {id: node.key}));\n });\n }\n })\n .withOnRowGroupOpened((event: RowGroupOpenedEvent) => this.handleBackgroundJobSelection(first(event.node.allLeafChildren).data.backgroundJob))\n .withLoadingOverlay()\n .withNoRowsOverlay({\n titleParam: titleForListOfJobs,\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withAutoGroupColumnDef(\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName(this.jobType)\n .withCellRenderer('agGroupCellRenderer', {\n suppressCount: true\n })\n .withSortable(false)\n .withSuppressMovable()\n .build()\n )\n .withGetRowClass((params: RowClassParams): string | string[] => {\n let result: string | string[] = 'normal';\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n if (isEqual(backgroundTaskWithJob.backgroundJob.status, BackgroundStatus.FAILED)) {\n result = 'error';\n }\n } else {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.data;\n if (isEqual(backgroundTaskWithJob.backgroundJob.status, BackgroundStatus.FAILED)) {\n result = ['error', isEqual(backgroundTaskWithJob.backgroundTask.status, BackgroundStatus.FAILED) ? 'dark' : ''];\n }\n }\n return result;\n })\n .withSuppressRowClickSelection()\n .withoutGetRowId()\n .build();\n }\n\n private getStatusColumnDefForListOfBackgroundJobs(): ColDef {\n return this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.STATUS')\n .withValueGetter((params: ValueGetterParams) => {\n return params.node.group ? params.node.allLeafChildren[0].data.backgroundJob.status : params.data.backgroundTask.status;\n })\n .withComparator(intComparator)\n .withTooltipValueGetter((params: ITooltipParams) => this.getLabelForActiveTaskStatus(params))\n .withCellRenderer(BackgroundJobsOverviewStatusComponent)\n .build();\n }\n\n private getDesktopColumnDefsForListOfBackgroundJobs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('backgroundJob.id')\n .withRowGroup()\n .withHide(true)\n .withComparator(StringUtils.stringComparator)\n .withValueFormatter((params: ValueFormatterParams) => {\n let result = '';\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n result = this.translate.instant(`BACKGROUND_JOBS.JOB_TYPE.${EnumUtils.getKeyFromValue(BackgroundJobType, backgroundTaskWithJob.backgroundJob.jobType)}`);\n }\n return result;\n })\n .withGetQuickFilterText((params: GetQuickFilterTextParams) => {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.data;\n return EnumUtils.getKeyFromValue(BackgroundJobType, backgroundTaskWithJob.backgroundJob.jobType);\n })\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('BACKGROUND_JOBS.TASK.TASK')\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('name')\n .withValueGetter((params: ValueGetterParams) => this.getLabelForActiveTaskAction(params))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.NAME')\n .withTooltipField('backgroundJob.name')\n .withComparator(StringUtils.stringComparator)\n .withFilterValueGetter(this.getFilterValueForBackgroundJobName)\n .withValueGetter(this.getLabelForBackgroundJobName, true)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.DATETIME.START_DATE')\n .withDate(true)\n .withValueGetter((params: ValueGetterParams) => {\n return params.node.group ? params.node.allLeafChildren[0].data.backgroundJob.startTime : params.data.backgroundTask.startTime;\n })\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.DATETIME.DURATION')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getDurationForRow(params))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withDate(true)\n .withValueGetter((params: ValueGetterParams) => {\n return params.node.group ? params.node.allLeafChildren[0].data.backgroundJob.endTime : params.data.backgroundTask.endTime;\n })\n .withHeaderName('GENERAL.DATETIME.END_DATE')\n .build(),\n this.getStatusColumnDefForListOfBackgroundJobs(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.ACTIONS.ACTIONS')\n .withCellRenderer(ListOverviewActionsComponent)\n .withValueGetter((params: ValueGetterParams) => this.getActionsForBackgroundJob(params))\n .withSortable(false)\n .build()\n ];\n }\n\n private getMobileColumnDefsForListOfBackgroundJobs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('backgroundJob.jobType')\n .withHeaderName(this.jobType)\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('name')\n .withValueFormatter((params: ValueFormatterParams) => this.translate.instant(`BACKGROUND_JOBS.JOB_TYPE.${EnumUtils.getKeyFromValue(BackgroundJobType, params.value)}`))\n .withGetQuickFilterText((params: GetQuickFilterTextParams) => this.translate.instant(`BACKGROUND_JOBS.JOB_TYPE.${EnumUtils.getKeyFromValue(BackgroundJobType, params.value)}`))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('backgroundTask.action')\n .withHeaderName('BACKGROUND_JOBS.TASK.LAST_TASK')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getLabelForActiveTaskAction(params))\n .withGetQuickFilterText((params: GetQuickFilterTextParams) => this.getLabelForActiveTaskAction(params))\n .build(),\n this.getStatusColumnDefForListOfBackgroundJobs()\n ];\n }\n\n private showErrorMessage(job: BackgroundJob): void {\n let errorMsg = job.errorMessage;\n try {\n let jsonMsg = JSON.parse(job.errorMessage);\n if (!AssertionUtils.isNullOrUndefined(jsonMsg?.errorCode)) {\n let result = this.errorMessageHelper.getErrorMessageFromBackendError(jsonMsg).pipe(\n rxjsMap((errorMessage: string) => {\n errorMsg = errorMessage;\n })\n );\n result.subscribe();\n }\n } catch {}\n\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: 'GENERAL.ERRORS.SOMETHING_WRONG',\n messageText: errorMsg,\n type: DialogType.ERROR\n });\n }\n\n private getActionsForBackgroundJob(params: ValueGetterParams): ListOverviewAction[] {\n let actions: ListOverviewAction[] = [];\n\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n const backgroundJob = backgroundTaskWithJob.backgroundJob;\n\n if (backgroundJob.canRetry()) {\n actions = [\n {\n name: 'GENERAL.ACTIONS.RETRY',\n actionFn: (): void => this.retryBackgroundJob.emit(backgroundJob),\n cssClass: backgroundJob.hasFailed() ? 'error' : ''\n }\n ];\n } else if (backgroundJob.canBeCanceled()) {\n actions = [\n {\n name: 'GENERAL.ACTIONS.CANCEL',\n actionFn: (): void => this.cancelBackgroundJob.emit(backgroundJob)\n }\n ];\n } else if (backgroundTaskWithJob.backgroundJob.canBeCanceled()) {\n actions = [\n {\n name: 'GENERAL.ACTIONS.CANCEL',\n actionFn: (): void => this.cancelBackgroundJob.emit(backgroundTaskWithJob.backgroundJob)\n }\n ];\n }\n\n if (backgroundJob.hasErrorMessage()) {\n actions.push({\n name: 'GENERAL.ERRORS.ERROR_DETAILS',\n actionFn: (): void => this.showErrorMessage(backgroundTaskWithJob.backgroundJob),\n cssClass: 'error'\n });\n }\n }\n\n return actions;\n }\n\n private getLabelForActiveTaskStatus(params: ITooltipParams): string {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.node.group ? first(params.node.allLeafChildren).data : params.data;\n const status = params.node.group || this.responsivenessViewMode.isPhone ? backgroundTaskWithJob.backgroundJob.status : backgroundTaskWithJob.backgroundTask.status;\n\n return this.translate.instant(`BACKGROUND_JOBS.STATUS.${EnumUtils.getKeyFromValue(BackgroundStatus, status)}`);\n }\n\n private getDurationForRow(params: ValueGetterParams): string {\n let result = '';\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n if (!isNil(backgroundTaskWithJob.backgroundJob.endTime)) {\n result = this.durationFormatPipe.transform(backgroundTaskWithJob.backgroundJob.durationInMs, 'ms', 'd[d] h[h] m[m]');\n }\n } else {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.data;\n if (!isNil(backgroundTaskWithJob.backgroundTask.startTime) && !isNil(backgroundTaskWithJob.backgroundTask.endTime)) {\n result = this.durationFormatPipe.transform(backgroundTaskWithJob.backgroundTask.durationInMs, 'ms', 'd[d] h[h] m[m]');\n }\n }\n return result;\n }\n\n private getLabelForBackgroundJobName(params: ValueGetterParams | ITooltipParams): string {\n let result = '';\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n result = backgroundTaskWithJob.backgroundJob.name;\n }\n return result;\n }\n\n private getLabelForActiveTaskAction(params: ValueGetterParams | GetQuickFilterTextParams): string {\n let result = '';\n if (params.node.group) {\n const backgroundTaskWithJob: BackgroundTaskWithJob = first(params.node.allLeafChildren).data;\n const activeTask: BackgroundTask = backgroundTaskWithJob.backgroundJob.getActiveTask();\n result = !isNil(activeTask) ? this.translate.instant(`BACKGROUND_JOBS.TASK.ACTION.${EnumUtils.getKeyFromValue(BackgroundTaskAction, activeTask.action)}`) : '';\n } else {\n const backgroundTaskWithJob: BackgroundTaskWithJob = params.data;\n result = this.translate.instant(`BACKGROUND_JOBS.TASK.ACTION.${EnumUtils.getKeyFromValue(BackgroundTaskAction, backgroundTaskWithJob.backgroundTask.action)}`);\n }\n return result;\n }\n\n private rowClick(event: RowClickedEvent): void {\n if (event.node.group) {\n event.node.setExpanded(!event.node.expanded);\n } else {\n this.handleBackgroundJobSelection(event.node.data.backgroundJob);\n }\n }\n\n private getColumnDefs(isPhone: boolean): ColDef[] {\n return isPhone ? this.getMobileColumnDefsForListOfBackgroundJobs() : this.getDesktopColumnDefsForListOfBackgroundJobs();\n }\n\n private handleBackgroundJobSelection(backgroundJob: BackgroundJob): void {\n if (some(this.selectedBackgroundJobs, {id: backgroundJob.id})) {\n this.selectedBackgroundJobs = reject(this.selectedBackgroundJobs, {id: backgroundJob.id});\n } else {\n this.selectedBackgroundJobs = [...this.selectedBackgroundJobs, backgroundJob];\n }\n\n this.selectedBackgroundJobsChange.emit(this.selectedBackgroundJobs);\n }\n\n private getFilterValueForBackgroundJobName(params: ValueGetterParams): string {\n return params.node.data.backgroundJob.name;\n }\n}\n","\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {BackgroundJob} from '@domain/background-jobs/background-job';\nimport {BackgroundJobs, BACKGROUND_JOBS} from '@infrastructure/http/background-jobs/background-jobs';\nimport {RealtimeBackgroundJobs, REALTIME_BACKGROUND_JOBS} from '@infrastructure/signalr/jobs/realtime-background-jobs';\nimport {AlertDialogResult, BaseComponent, DialogBuilderFactoryService, DialogType, TranslateService} from '@vdw/angular-component-library';\nimport {isEqual, noop} from 'lodash-es';\nimport {Subscription} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n template: ''\n})\nexport abstract class BaseBackgroundJobsComponent extends BaseComponent implements OnInit {\n public listOfBackgroundJobs: BackgroundJob[];\n\n private backgroundJobsSubscription: Subscription;\n\n protected constructor(\n @Inject(BACKGROUND_JOBS) protected readonly backgroundJobs: BackgroundJobs,\n @Inject(REALTIME_BACKGROUND_JOBS) protected readonly realtimeBackgroundJobs: RealtimeBackgroundJobs,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadListOfBackgroundJobs();\n this.subscribeToRealtimeJobGlobalStatusChanges();\n }\n\n public retryBackgroundJob(backgroundJob: BackgroundJob): void {\n this.backgroundJobs\n .retry(backgroundJob)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.loadListOfBackgroundJobs();\n });\n }\n\n public cancelBackgroundJob(backgroundJob: BackgroundJob): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('BACKGROUND_JOBS.CANCEL_JOB'),\n messageText: this.translate.instant('BACKGROUND_JOBS.CANCEL_JOB_CONFIRMATION'),\n type: DialogType.DELETE\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((result: AlertDialogResult) => {\n if (isEqual(result, AlertDialogResult.CONFIRM)) {\n this.backgroundJobs.cancelJob(backgroundJob.id).pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe();\n }\n });\n }\n\n protected onBackgroundJobsLoaded(): void {\n noop();\n }\n\n private loadListOfBackgroundJobs(): void {\n this.backgroundJobsSubscription?.unsubscribe();\n this.backgroundJobsSubscription = this.backgroundJobs\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfBackgroundJobs: BackgroundJob[]) => {\n this.listOfBackgroundJobs = listOfBackgroundJobs;\n\n this.onBackgroundJobsLoaded();\n });\n }\n\n private subscribeToRealtimeJobGlobalStatusChanges(): void {\n this.realtimeBackgroundJobs\n .getJobGlobalStatusChanged()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.loadListOfBackgroundJobs());\n }\n}\n","
\n
\n \n
\n
\n

{{ message.main }}

\n

{{ information }}

\n
\n
\n

\n {{ message.main }}\n {{ information }}\n

\n
\n
\n

\n {{ message.main | bmsTranslate }} {{ message.sub | bmsTranslate }}\n

\n
\n
\n \n \n

({{ 'GENERAL.HINTS.UNAUTHORIZED' | bmsTranslate }})

\n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CardInfoMessage} from '@presentation/components/card-info/card-info-message.interface';\nimport {isNil} from 'lodash-es';\n\n@Component({\n selector: 'app-card-info',\n templateUrl: './card-info.component.html',\n styleUrls: ['./card-info.component.scss']\n})\nexport class CardInfoComponent {\n @Input() public message: CardInfoMessage;\n @Input() public information: string;\n @Input() public button: string = null;\n @Input() public progressButton: string = null;\n @Input() public inProgress = false;\n @Input() public authorized = true;\n @Input() public showAsColumn = true;\n @Input() public showWarningIcon = false;\n @Input() public showWarningButton = false;\n @Output() public clickButtonEvent: EventEmitter = new EventEmitter();\n\n public hasButton(): boolean {\n return !isNil(this.button);\n }\n\n public hasProgressButton(): boolean {\n return !isNil(this.progressButton);\n }\n\n public getIcon(): string {\n return this.showWarningIcon ? 'warning-full-52px' : 'info-52px';\n }\n\n public clickButton(): void {\n this.clickButtonEvent.emit();\n }\n}\n","
\n
\n {{ getFirstColorOfFirstCreelPosition().name }}\n \n {{ getCreelMapping(index) }}\n
\n
\n
\n {{ getCreelMapping(index) }}\n
\n \n\n \n \n\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {SourceElementUtils} from '@application/helper/source-element-utils';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {BaseComponent, Color, DialogBuilderFactoryService, DOMUtils} from '@vdw/angular-component-library';\nimport {flatMap, isNil, take, uniqBy, without} from 'lodash-es';\nimport {debounceTime, takeUntil} from 'rxjs';\n\n@Component({\n selector: 'app-color-list-preview',\n templateUrl: './color-list-preview.component.html',\n styleUrls: ['./color-list-preview.component.scss']\n})\nexport class ColorListPreviewComponent extends BaseComponent implements AfterViewInit {\n @Input() public colorList: OverviewListColorSet | OverviewListColoredYarnSet;\n @Input() public maximumCreelPositionsToShow;\n @Input() public maximumColorsToShowPerCreelPosition = 4;\n @Input() public showNameOfFirstColor: boolean;\n @Input() public showDetailsOnClick = true;\n @Input() public positionOfDialog: PositionOfDialog = PositionOfDialog.LEFT;\n @Input() public showBoxShadow = true;\n @Input() public creelMapping: CreelMap = null;\n @Input() public startDent: number = null;\n @Output() public colorListSelected: EventEmitter<{colorList: OverviewListColorSet | OverviewListColoredYarnSet; event: MouseEvent}> = new EventEmitter<{\n colorList: OverviewListColorSet | OverviewListColoredYarnSet;\n event: MouseEvent;\n }>();\n\n @ViewChild('colorListPreviewContainer') public colorListPreviewContainer: ElementRef;\n @ViewChild('startDentLabel', {read: ElementRef}) public startDentLabelElement: ElementRef;\n public creelPositionsToShow: OverviewListCreelPosition[];\n public amountOfCreelPositionsToShow: number;\n public colorMapping = 6;\n public readonly colorPreviewWidthInPx = 16;\n public readonly marginBetweenColorPreviewsInPx = 2;\n\n public constructor(\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n DOMUtils.observeResize(this.colorListPreviewContainer.nativeElement)\n .pipe(debounceTime(250), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.calculateCreelPositionsToShow());\n }\n\n public moreCreelPositionsAvailable(): boolean {\n return this.amountOfCreelPositionsToShow < this.getColorSet().creelPositions.length;\n }\n\n public getCreelMapping(index: number): number {\n const currentPositionOnMachine = index + 1;\n return this.creelMapping?.creelPositions.find((value: {creelPosition: number; currentPositionOnMachine: number}) => currentPositionOnMachine === value.currentPositionOnMachine)?.creelPosition;\n }\n\n public getMarginForCreelMapping(colorIndex: number): number {\n const currentPositionOnMachine = colorIndex + 1;\n const position = this.creelMapping?.creelPositions?.find((value: {creelPosition: number; currentPositionOnMachine: number}) => currentPositionOnMachine === value.currentPositionOnMachine);\n return position?.currentPositionOnMachine < 10 ? 5 : 2;\n }\n\n public colorHasMapping(colorIndex: number): boolean {\n const currentPositionOnMachine = colorIndex + 1;\n const position = this.creelMapping?.creelPositions?.find((value: {creelPosition: number; currentPositionOnMachine: number}) => currentPositionOnMachine === value.currentPositionOnMachine);\n return position?.creelPosition !== position?.currentPositionOnMachine;\n }\n\n public getColorListPreviewContainerClass(): string {\n return this.startDent === null ? 'color-list-preview-container' : 'color-list-multiple-preview-containers';\n }\n\n public getNamesOfOtherColors(): string {\n return flatMap(without(this.getColorSet().creelPositions, ...this.creelPositionsToShow), (creelPosition: OverviewListCreelPosition) => {\n return flatMap(creelPosition.items, (color: Color) => color.name);\n }).join(', ');\n }\n\n public getAmountOfMoreCreelPositionsAvailable(): number {\n return Math.max(this.getColorSet().creelPositions.length - this.amountOfCreelPositionsToShow, 0);\n }\n\n public canShowNameOfFirstColorOfCreelPosition(creelPosition: OverviewListCreelPosition): boolean {\n return this.showNameOfFirstColor && creelPosition.items.length === 1;\n }\n\n public getFirstColorOfFirstCreelPosition(): Color {\n return this.getFirstColorOfCreelPosition(this.getColorSet().creelPositions[0]);\n }\n\n public getFirstColorOfCreelPosition(creelPosition: OverviewListCreelPosition): Color {\n return (creelPosition.items as Color[])[0];\n }\n\n public getColorsOfCreelPosition(creelPosition: OverviewListCreelPosition): Color[] {\n return uniqBy(creelPosition.items as Color[], 'id');\n }\n\n public showColorSetDetails(event: MouseEvent): void {\n if (this.showDetailsOnClick) {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass(['reposition-dialog', this.getColorSet().creelPositions.length > 8 ? 'colored-list-dialog' : ''])\n .withWidth('706px')\n .withMaxHeight('100%')\n .openDialog(RepositionDialogComponent, {\n textileData: this.colorList,\n component: TextileDataDetailComponent,\n sourceElement: SourceElementUtils.findSourceElementForDialog(event, this.getColorListPreviewContainerClass(), this.positionOfDialog),\n positionOfDialog: this.positionOfDialog\n });\n } else {\n this.colorListSelected.emit({\n colorList: this.colorList,\n event\n });\n }\n }\n\n public getColorSet(): OverviewListColorSet {\n if (this.colorList instanceof OverviewListColorSet || isNil(this.colorList)) {\n return this.colorList;\n } else {\n return this.colorList.overviewListColorSet;\n }\n }\n\n public calculateCreelPositionsToShow(): void {\n this.amountOfCreelPositionsToShow = this.getAmountOfCreelPositionsToShow();\n this.creelPositionsToShow = this.getCreelPositionsToShow();\n\n this.changeDetectorRef.detectChanges();\n }\n\n private getCreelPositionsToShow(): OverviewListCreelPosition[] {\n return take(this.getColorSet().creelPositions, this.amountOfCreelPositionsToShow);\n }\n\n private getAmountOfCreelPositionsToShow(): number {\n let possibleCreelPositionsOnScreen = this.getPossibleCreelPositionsOnScreen();\n if (possibleCreelPositionsOnScreen < this.getColorSet().creelPositions.length) {\n possibleCreelPositionsOnScreen--;\n }\n\n return isNil(this.maximumCreelPositionsToShow)\n ? Math.min(possibleCreelPositionsOnScreen, this.getColorSet().creelPositions.length)\n : Math.min(possibleCreelPositionsOnScreen, this.maximumCreelPositionsToShow, this.getColorSet().creelPositions.length);\n }\n\n private getPossibleCreelPositionsOnScreen(): number {\n let widthOfCreelPositionListWithoutPossibleMoreBlock = this.colorListPreviewContainer.nativeElement.parentElement.parentElement.offsetWidth;\n\n if (this.startDentLabelElement) {\n widthOfCreelPositionListWithoutPossibleMoreBlock -= this.startDentLabelElement.nativeElement.offsetWidth;\n }\n\n return Math.floor(widthOfCreelPositionListWithoutPossibleMoreBlock / (this.colorPreviewWidthInPx + this.marginBetweenColorPreviewsInPx));\n }\n}\n","import {Component, Inject, Input, OnChanges, OnInit, ViewChild} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {BackendErrorContext} from '@application/helper/backend-error-context';\nimport {leastCommonMultiple} from '@application/helper/textile-data/colored-yarn-set/least-common-multiple';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {CalculatedYarnConsumption} from '@domain/yarn-consumption/calculated-yarn-consumption';\nimport {CreelPositionForCalculatedYarnConsumption} from '@domain/yarn-consumption/creel-position';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {YARN_CONSUMPTION, YarnConsumption} from '@infrastructure/http/yarn-consumption/yarn-consumption';\nimport {REALTIME_YARN_CONSUMPTION, RealtimeYarnConsumption} from '@infrastructure/signalr/yarn-consumption/realtime-yarn-consumption';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {GridColorsOfCreelPositionComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/grid-colors-of-creel-position.component';\nimport {GridYarnTypesOfCreelPositionComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/grid-yarn-types-of-creel-position.component';\nimport {GridYarnConsumptionComponent} from '@presentation/pages/textile-data/textile-data-detail/grid-yarn-consumption/grid-yarn-consumption.component';\nimport {OverviewListCreelPositionWithColorAndYarnTypes} from '@presentation/pages/textile-data/textile-data-detail/overview-list-creel-position-with-color-and-yarn-types';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogBuilderFactoryService,\n DialogType,\n GridOptionsBuilderFactoryService,\n OverlayComponentParams,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridOptions, ICellRendererParams, ITooltipParams, RowHeightParams} from 'ag-grid-community';\nimport {cloneDeep, isEqual, isNil, map, noop, reverse, size, times} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-colored-yarn-set-preview',\n templateUrl: './colored-yarn-set-preview.component.html',\n styleUrls: ['./colored-yarn-set-preview.component.scss']\n})\nexport class ColoredYarnSetPreviewComponent extends BaseComponent implements OnChanges, OnInit {\n @ViewChild('creelPositionsGrid') public creelPositionsGrid: AgGridAngular;\n @Input() public coloredYarnSet: ColoredYarnSet;\n @Input() public colorSet: OverviewListColorSet;\n @Input() public yarnSet: OverviewListYarnSet;\n @Input() public orderlineId: number;\n @Input() public designId: number;\n @Input() public qualityId: number;\n public listOfCreelPositions: OverviewListCreelPositionWithColorAndYarnTypes[];\n public gridOptionsForListOfCreelPositions: GridOptions;\n public calculatingYarnConsumption = false;\n public yarnConsumptionCalculated = false;\n private readonly rowVerticalPadding = 32;\n private readonly rowLabelHeight = 20;\n private errorContextForMissingMachineQualityParameters = 'YARN_CONSUMPTION_INSUFFICIENT_INFORMATION';\n private readonly calculateYarnConsumptionPermission: Permission = Permission.TEXFAB_YARNCONSUMPTION;\n private currentSubscription: ProfileSubscription;\n\n public constructor(\n @Inject(AUTHENTICATION) private authentication: Authentication,\n @Inject(YARN_CONSUMPTION) private readonly yarnConsumption: YarnConsumption,\n @Inject(REALTIME_YARN_CONSUMPTION) private realtimeYarnConsumption: RealtimeYarnConsumption,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.initializeGridOptionsForCreelPositions();\n }\n\n public ngOnChanges(): void {\n this.connectRealtimeYarnConsumption();\n if (this.coloredYarnSet || (this.colorSet && this.yarnSet)) {\n this.setListOfCreelPositions();\n }\n }\n\n public calculateYarnConsumption(): void {\n this.calculatingYarnConsumption = true;\n let request: Observable;\n\n if (!isNil(this.orderlineId)) {\n request = this.yarnConsumption.calculateYarnConsumptionForOrderline(this.orderlineId).pipe(takeUntil(this.unSubscribeOnViewDestroy));\n } else {\n request = this.yarnConsumption.calculateYarnConsumptionForDesign(this.designId, this.colorSet.id, this.yarnSet.id, this.qualityId, false);\n }\n\n request.subscribe({\n next: () => noop,\n error: (error: BackendErrorContext) => {\n if (isEqual(this.errorContextForMissingMachineQualityParameters, error.errorCode)) {\n this.showErrorDialogForBackendError();\n }\n\n this.calculatingYarnConsumption = false;\n }\n });\n }\n\n public hasPermissionToCalculateYarnConsumption(): boolean {\n return this.currentSubscription?.hasPermission(this.calculateYarnConsumptionPermission);\n }\n\n public getColorList(): ColoredYarnSet | OverviewListColorSet {\n let colorList;\n\n if (!isNil(this.coloredYarnSet)) {\n colorList = new ColoredYarnSet(\n this.coloredYarnSet.id,\n this.coloredYarnSet.name,\n new ColorSet(\n this.coloredYarnSet.colorSet.id,\n this.coloredYarnSet.colorSet.name,\n reverse(cloneDeep(this.coloredYarnSet.colorSet.creelPositions)),\n this.coloredYarnSet.colorSet.used,\n this.coloredYarnSet.colorSet.technicalCode,\n this.coloredYarnSet.colorSet.alternativeColorSetIds\n ),\n this.coloredYarnSet.yarnSet,\n this.coloredYarnSet.used,\n this.coloredYarnSet.technicalCode,\n this.coloredYarnSet.alternativeColoredYarnSetIds\n );\n } else {\n colorList = new OverviewListColorSet(this.colorSet.id, this.colorSet.name, reverse(cloneDeep(this.colorSet.creelPositions)));\n }\n\n return colorList;\n }\n\n public getLabelName(): string {\n return !isNil(this.coloredYarnSet) ? this.coloredYarnSet.name : this.colorSet.name;\n }\n\n private showErrorDialogForBackendError(): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('TEXTILE_DATA.YARN_TYPE.CALCULATE_YARN_CONSUMPTION_ERROR_TITLE'),\n messageText: this.translate.instant('TEXTILE_DATA.YARN_TYPE.CALCULATE_YARN_CONSUMPTION_ERROR'),\n type: DialogType.INFORMATION\n });\n }\n\n private connectRealtimeYarnConsumption(): void {\n this.getCalculatedYarnConsumption();\n }\n\n private getCalculatedYarnConsumption(): void {\n this.realtimeYarnConsumption\n .getCalculatedYarnConsumption()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((calculatedYarnConsumption: CalculatedYarnConsumption) => {\n this.calculatingYarnConsumption = false;\n if (\n this.isIdentifiedConfiguration(calculatedYarnConsumption.colorSetId, calculatedYarnConsumption.yarnSetId, calculatedYarnConsumption.machineQualityId) ||\n isNil(calculatedYarnConsumption.colorSetId)\n ) {\n this.yarnConsumptionCalculated = true;\n }\n\n if (\n !isNil(calculatedYarnConsumption.yarnConsumption) &&\n (this.isIdentifiedConfiguration(calculatedYarnConsumption.colorSetId, calculatedYarnConsumption.yarnSetId, calculatedYarnConsumption.machineQualityId) ||\n isNil(calculatedYarnConsumption.colorSetId))\n ) {\n this.listOfCreelPositions.forEach((creelPosition: OverviewListCreelPositionWithColorAndYarnTypes) => {\n const creelPositionNumber = creelPosition.creelPositionForColors.position;\n creelPosition.creelPositionForYarnTypes.items.forEach((item: OverviewListYarnType, startDent0Based: number) => {\n let yarnConsumptionForDent = calculatedYarnConsumption.yarnConsumption.creelPositions.find(\n (x: CreelPositionForCalculatedYarnConsumption) => x.creelPosition === creelPositionNumber && x.dentNumber === startDent0Based + 1\n );\n if (yarnConsumptionForDent === undefined) {\n yarnConsumptionForDent = calculatedYarnConsumption.yarnConsumption.creelPositions.find(\n (x: CreelPositionForCalculatedYarnConsumption) => x.creelPosition === creelPositionNumber && x.dentNumber === 1\n );\n }\n\n item.yarnConsumption = yarnConsumptionForDent.yarnConsumption;\n });\n });\n\n if (AssertionUtils.isNullOrUndefined(this.orderlineId) || calculatedYarnConsumption.id === this.orderlineId) {\n this.creelPositionsGrid.api.setGridOption('columnDefs', [\n ...this.getColumnDefsForListOfCreelPositions(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withValueGetter('data.creelPositionForYarnTypes')\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_CONSUMPTION')\n .withCellRenderer(GridYarnConsumptionComponent)\n .withMinWidth(200)\n .withoutFilter()\n .build()\n ]);\n this.creelPositionsGrid.api.sizeColumnsToFit();\n }\n }\n });\n }\n\n private isIdentifiedConfiguration(colorSetId: number, yarnSetId: number, machineQualityId: number): boolean {\n return !isNil(this.colorSet) && !isNil(this.yarnSet) && isEqual(colorSetId, this.colorSet.id) && isEqual(yarnSetId, this.yarnSet.id) && isEqual(machineQualityId, this.qualityId);\n }\n\n private setListOfCreelPositions(): void {\n let creelPositions: OverviewListCreelPositionWithColorAndYarnTypes[];\n if (!isNil(this.coloredYarnSet)) {\n creelPositions = this.getCreelPositions(size(this.coloredYarnSet.overviewListColorSet.creelPositions), this.coloredYarnSet.overviewListColorSet, this.coloredYarnSet.overviewListYarnSet);\n } else {\n creelPositions = this.getCreelPositions(size(this.colorSet.creelPositions), this.colorSet, this.yarnSet);\n }\n creelPositions.sort((a: OverviewListCreelPositionWithColorAndYarnTypes, b: OverviewListCreelPositionWithColorAndYarnTypes) => {\n return b.creelPositionForColors.position - a.creelPositionForColors.position;\n });\n\n this.setListOfCreelPositionsWithYarnSetDefined(creelPositions);\n }\n\n private getCreelPositions(numberOfCreelPositions: number, colorSet: OverviewListColorSet, yarnSet: OverviewListYarnSet): OverviewListCreelPositionWithColorAndYarnTypes[] {\n return times(numberOfCreelPositions, (index: number) => {\n const position = numberOfCreelPositions - index;\n return {\n creelPositionForColors: isNil(colorSet) ? null : colorSet.creelPositions.find((x: OverviewListCreelPosition) => x.position === position),\n creelPositionForYarnTypes: isNil(yarnSet) ? null : yarnSet.creelPositions.find((x: OverviewListCreelPosition) => x.position === position)\n };\n });\n }\n\n private setListOfCreelPositionsWithYarnSetDefined(creelPositions: OverviewListCreelPositionWithColorAndYarnTypes[]): void {\n this.listOfCreelPositions = map(cloneDeep(creelPositions), (creelPosition: OverviewListCreelPositionWithColorAndYarnTypes) => {\n const commonMultiple = leastCommonMultiple(size(creelPosition.creelPositionForColors.items), size(creelPosition.creelPositionForYarnTypes.items));\n\n this.replicateCreelPositionUntilLeastCommonMultiple(creelPosition.creelPositionForColors, commonMultiple);\n this.replicateCreelPositionUntilLeastCommonMultiple(creelPosition.creelPositionForYarnTypes, commonMultiple);\n\n return creelPosition;\n });\n }\n\n private replicateCreelPositionUntilLeastCommonMultiple(creelPosition: OverviewListCreelPosition, leastCommonMultipleNumber: number): void {\n const creelPositionToRepeat = cloneDeep(creelPosition.items);\n const numberOfRepititionsForCreelPosition = leastCommonMultipleNumber / size(creelPosition.items);\n\n for (let i = 0; i < numberOfRepititionsForCreelPosition - 1; i++) {\n creelPosition.items.push(...cloneDeep(creelPositionToRepeat));\n }\n }\n\n private initializeGridOptionsForCreelPositions(): void {\n this.gridOptionsForListOfCreelPositions = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfCreelPositions(), GridIdentifier.LIST_OF_CREEL_POSITIONS_FOR_COLORED_YARN_SET_PREVIEW)\n .withGetRowHeight((params: RowHeightParams) => this.calculateRowHeight(params.data))\n .withLoadingOverlay()\n .withNoRowsOverlay({\n titleParam: 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION'\n } as OverlayComponentParams)\n .withoutSorting()\n .withoutGetRowId()\n .withoutColumnMenu()\n .build();\n }\n\n private calculateRowHeight(creelPosition: OverviewListCreelPositionWithColorAndYarnTypes): number {\n let numberOfItemsInRow: number;\n const creelPositionForColors: OverviewListCreelPosition = creelPosition.creelPositionForColors;\n if (!isNil(creelPositionForColors)) {\n numberOfItemsInRow = size(creelPositionForColors.items);\n }\n\n return this.rowVerticalPadding + numberOfItemsInRow * this.rowLabelHeight;\n }\n\n private getColumnDefsForListOfCreelPositions(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.POSITION')\n .withCellRenderer(({node}: ICellRendererParams) => this.getPositionForRowIndex(node.rowIndex))\n .withTooltipValueGetter(({rowIndex}: ITooltipParams) => this.getPositionForRowIndex(rowIndex))\n .withCellClass('text-align-center')\n .withMaxWidth(120)\n .withSuppressMovable()\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withValueGetter('data.creelPositionForColors')\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLOR_NAMES_HEADER')\n .withCellRenderer(\n GridColorsOfCreelPositionComponent,\n {\n showRgbValues: false\n },\n true\n )\n .withMinWidth(160)\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withValueGetter('data.creelPositionForYarnTypes')\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_TYPE')\n .withCellRenderer(GridYarnTypesOfCreelPositionComponent)\n .withMinWidth(160)\n .withoutFilter()\n .build()\n ];\n }\n\n private getPositionForRowIndex(rowIndex: number): string {\n return `${this.listOfCreelPositions.length - rowIndex}`;\n }\n}\n","\n \n \n

{{ getLabelName() }}

\n \n
\n
\n
\n \n \n
\n
\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'app-connect-baseline',\n templateUrl: './connect-baseline.component.html',\n styleUrls: ['./connect-baseline.component.scss']\n})\nexport class ConnectBaselineComponent {}\n","
\n
\n
Connect
\n
\n Empowering\n your\n productivity\n
\n
\n
\n","
\n
\n
\n
\n \n
\n
\n
\n
\n {{ colorIndex + 1 }}\n
\n {{ color.name }}\n
\n
\n
\n\n
\n
\n \n
\n
\n
\n
\n {{ yarnTypeIndex + 1 }}\n
\n {{ yarnType.name }}\n
\n
\n
\n
\n\n
\n
\n
\n \n \n
\n \n \n \n \n
\n
\n
\n\n \n
\n
\n {{ getItemViewIndexForYarnType(patternForCreelPreview.yarnType) }}\n
\n\n \n {{ getItemViewIndexForColor(patternForCreelPreview.color) }}\n
\n\n
\n {{ patternForCreelPreview.dent + 1 }}\n
\n \n
\n
\n
\n","import {Component, Input, OnChanges, SimpleChanges, ViewChild} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {leastCommonMultiple} from '@application/helper/textile-data/colored-yarn-set/least-common-multiple';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {CreelPositionWithColorsAndYarnTypes} from '@presentation/pages/textile-data/colored-yarn-set/add/creel-position-with-colors-and-yarn-types';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {AssertionUtils, BaseComponent, Color} from '@vdw/angular-component-library';\nimport {each, findIndex, isNil, map, range, sumBy} from 'lodash-es';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-creel-preview',\n templateUrl: './creel-preview.component.html',\n styleUrls: ['./creel-preview.component.scss']\n})\nexport class CreelPreviewComponent extends BaseComponent implements OnChanges {\n @ViewChild('scrollCreelPreview') public scrollCreelPreview;\n @Input() public creelPositionWithColorsAndYarnTypes: CreelPositionWithColorsAndYarnTypes;\n @Input() public nameOfColorSet: string;\n @Input() public nameOfYarnSet: string;\n public readonly minimumAmountOfDents = 1;\n public readonly maximumAmountOfDents = 99999;\n public showCreelPreviewForm: FormGroup<{numberOfDentsToShow: FormControl}>;\n\n public patternsForCreelPreview: {\n color?: Color;\n yarnType?: OverviewListYarnType;\n dent: number;\n }[];\n\n private uniqueColors: Color[] = [];\n private uniqueYarnTypes: OverviewListYarnType[] = [];\n\n public constructor(private readonly formBuilder: FormBuilder) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.creelPositionWithColorsAndYarnTypes) {\n if (isNil(this.showCreelPreviewForm)) {\n this.initializeShowCreelPreviewForm();\n }\n\n if (this.isCreelPreview()) {\n const maximumDentOfCreelPositionForColorPatternOfCreelPosition = this.canShowPreviewForColorSet() ? this.getMaximumDentOfCreelPosition(this.getColorPatternOfCreelPosition()) : 1;\n const maximumDentOfCreelPositionForYarnTypePatternOfCreelPosition = this.canShowPreviewForYarnSet() ? this.getMaximumDentOfCreelPosition(this.getYarnTypePatternOfCreelPosition()) : 1;\n\n this.showCreelPreviewForm.controls.numberOfDentsToShow.setValue(\n leastCommonMultiple(maximumDentOfCreelPositionForColorPatternOfCreelPosition, maximumDentOfCreelPositionForYarnTypePatternOfCreelPosition)\n );\n }\n\n this.generatePatternsForNumberOfDents();\n }\n }\n\n public setScrollPosition(): void {\n this.scrollCreelPreview.scrollToIndex(this.showCreelPreviewForm.value.numberOfDentsToShow - 1);\n }\n\n public getUniqueColors(): Color[] {\n return this.uniqueColors;\n }\n\n public getUniqueYarnTypes(): OverviewListYarnType[] {\n return this.uniqueYarnTypes;\n }\n\n public isCreelPreview(): boolean {\n return this.canShowPreviewForYarnSet() || this.canShowPreviewForColorSet();\n }\n\n public canShowPreviewForYarnSet(): boolean {\n return !isNil(this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes);\n }\n\n public canShowPreviewForColorSet(): boolean {\n return !isNil(this.creelPositionWithColorsAndYarnTypes.creelPositionForColors);\n }\n\n public canShowLabelForDent(dent: number): boolean {\n return (dent + 1) % 5 === 0 || dent === this.showCreelPreviewForm.value.numberOfDentsToShow - 1 || dent === 0;\n }\n\n public getItemViewIndexForColor(color: Color): number {\n return findIndex(this.uniqueColors, color) + 1;\n }\n\n public getItemViewIndexForYarnType(yarnType: OverviewListYarnType): number {\n return findIndex(this.uniqueYarnTypes, yarnType) + 1;\n }\n\n private initializeShowCreelPreviewForm(): void {\n this.showCreelPreviewForm = this.formBuilder.group({\n numberOfDentsToShow: this.formBuilder.control(this.minimumAmountOfDents, [Validators.required, Validators.min(this.minimumAmountOfDents), Validators.max(this.maximumAmountOfDents)])\n });\n\n this.showCreelPreviewForm.controls.numberOfDentsToShow.valueChanges.pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy)).subscribe((numberOfDentsToShow: number) => {\n this.numberOfDentsToShowAdjusted(numberOfDentsToShow);\n });\n }\n\n private numberOfDentsToShowAdjusted(newValue: number): void {\n if (newValue >= this.minimumAmountOfDents && newValue <= this.maximumAmountOfDents) {\n this.generatePatternsForNumberOfDents(newValue);\n }\n }\n\n private getColorPatternOfCreelPosition(): HorizontalPositionOfCreelPosition[] {\n return this.creelPositionWithColorsAndYarnTypes.creelPositionForColors.horizontalPositionsOfCreelPosition;\n }\n\n private getYarnTypePatternOfCreelPosition(): HorizontalPositionOfCreelPosition[] {\n return this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes.horizontalPositionsOfCreelPosition;\n }\n\n private generatePatternsForNumberOfDents(userInputValue?: number): void {\n let numberOfDentsToShow = 0;\n\n if (AssertionUtils.isNullOrUndefined(userInputValue)) {\n if (!AssertionUtils.isNullOrUndefined(this.creelPositionWithColorsAndYarnTypes.creelPositionForColors)) {\n this.creelPositionWithColorsAndYarnTypes.creelPositionForColors.horizontalPositionsOfCreelPosition.forEach((creelPosition: HorizontalPositionOfCreelPosition) => {\n numberOfDentsToShow += creelPosition.amount;\n });\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes)) {\n this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes.horizontalPositionsOfCreelPosition.forEach((creelPosition: HorizontalPositionOfCreelPosition) => {\n numberOfDentsToShow += creelPosition.amount;\n });\n }\n } else {\n numberOfDentsToShow = userInputValue;\n }\n\n this.patternsForCreelPreview = map(range(numberOfDentsToShow), (dent: number) => {\n return {\n dent\n };\n });\n\n if (this.canShowPreviewForColorSet()) {\n this.uniqueColors = this.creelPositionWithColorsAndYarnTypes.creelPositionForColors.getUniqueItems() as Color[];\n const patternForColorSet = this.creelPositionWithColorsAndYarnTypes.creelPositionForColors.getPatternForGivenNumberOfDents(numberOfDentsToShow) as Color[];\n each(patternForColorSet, (color: Color, index: number) => {\n this.patternsForCreelPreview[index].color = color;\n });\n }\n\n if (this.canShowPreviewForYarnSet()) {\n this.uniqueYarnTypes = this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes.getUniqueItems() as OverviewListYarnType[];\n const patternForYarnSet = this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes.getPatternForGivenNumberOfDents(numberOfDentsToShow) as OverviewListYarnType[];\n each(patternForYarnSet, (yarnType: OverviewListYarnType, index: number) => {\n this.patternsForCreelPreview[index].yarnType = yarnType;\n });\n }\n }\n\n private getMaximumDentOfCreelPosition(creelPosition: HorizontalPositionOfCreelPosition[]): number {\n return sumBy(creelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n return horizontalPositionOfCreelPosition.getAmountOfDentsInHorizontalPositionOfCreelPosition();\n });\n }\n}\n","import {Directive, Input} from '@angular/core';\nimport {getMappedColoredYarnSetWithStartDent} from '@application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set-with-start-dent';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {PreviewType} from '@presentation/pages/textile-data/creel/add/preview-type';\nimport {BaseComponent} from '@vdw/angular-component-library';\nimport {cloneDeep} from 'lodash-es';\n\n@Directive()\nexport abstract class BaseCreelTableComponent extends BaseComponent {\n public static readonly colorLineHeightInPx = 20;\n public static readonly cellPaddingInPx = 28;\n\n @Input() public previewType: PreviewType = PreviewType.COLOR;\n public cellHeightInPx = 0;\n\n public isOfPreviewTypeColor(): boolean {\n return this.previewType === PreviewType.COLOR;\n }\n\n public togglePreviewType(ofPreviewTypeYarn: boolean): void {\n this.previewType = ofPreviewTypeYarn ? PreviewType.YARN_TYPE : PreviewType.COLOR;\n }\n\n protected getMappedColoredYarnSetWithStartDent(coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent, coloredYarnSetCreelMap: CreelMap): OverviewListColoredYarnSetWithStartDent {\n return getMappedColoredYarnSetWithStartDent(coloredYarnSetWithStartDent, coloredYarnSetCreelMap);\n }\n\n protected reverseColoredYarnSetWithStartDentCreelPositions(coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent): OverviewListColoredYarnSetWithStartDent {\n const reversedColoredYarnSetWithStartDent = cloneDeep(coloredYarnSetWithStartDent);\n reversedColoredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions.reverse();\n reversedColoredYarnSetWithStartDent.coloredYarnSet.overviewListYarnSet.creelPositions.reverse();\n\n return reversedColoredYarnSetWithStartDent;\n }\n\n protected getMaximumAmountOfColorsInColoredYarnSet(coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent): number {\n return Math.max(1, ...coloredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions.map((creelPosition: OverviewListCreelPosition) => creelPosition.getUniqueItems().length));\n }\n\n protected getMaximumAmountOfYarnSetsInColoredYarnSet(coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent): number {\n return Math.max(1, ...coloredYarnSetWithStartDent.coloredYarnSet.overviewListYarnSet.creelPositions.map((creelPosition: OverviewListCreelPosition) => creelPosition.getUniqueItems().length));\n }\n}\n","import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {BaseCreelTableComponent} from '@presentation/components/creel-tables/base-creel-table/base-creel-table.component';\nimport {PreviewType} from '@presentation/pages/textile-data/creel/add/preview-type';\n\n@Component({\n template: ''\n})\nexport abstract class CreelMappingTableBaseComponent extends BaseCreelTableComponent implements OnChanges {\n @Input() public coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent;\n @Input() public activeColoredYarnSetCreelMap: CreelMap;\n\n public activeMappedColoredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent;\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('coloredYarnSetWithStartDent' in changes) {\n this.coloredYarnSetWithStartDent = this.reverseColoredYarnSetWithStartDentCreelPositions(this.coloredYarnSetWithStartDent);\n }\n\n if ('activeColoredYarnSetCreelMap' in changes) {\n this.activeColoredYarnSetCreelMap ??= this.coloredYarnSetWithStartDent.getOriginalMappingForCurrentPositionOnMachine();\n this.activeMappedColoredYarnSetWithStartDent = this.getMappedColoredYarnSetWithStartDent(this.coloredYarnSetWithStartDent, this.activeColoredYarnSetCreelMap);\n }\n this.cellHeightInPx = this.getCellHeight();\n }\n\n public getCreelPositions(): number[] {\n const size = this.getSizeOfCreelPositions();\n return [...Array(size).keys()].map((index: number) => size - index);\n }\n\n public getYarnSetCreelPosition(creelPosition: OverviewListCreelPosition): OverviewListCreelPosition {\n return this.findByPosition(this.coloredYarnSetWithStartDent.coloredYarnSet.overviewListYarnSet.creelPositions, creelPosition.position);\n }\n\n public getMappedYarnSetCreelPosition(overviewListColoredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent, creelPosition: OverviewListCreelPosition): OverviewListCreelPosition {\n return this.findByPosition(overviewListColoredYarnSetWithStartDent.coloredYarnSet.overviewListYarnSet.creelPositions, creelPosition.position);\n }\n\n public isCreelPositionDifferentFromTheoreticalCreel(position: number): boolean {\n return !this.activeColoredYarnSetCreelMap.creelPositions.some(\n ({creelPosition, currentPositionOnMachine}: {creelPosition: number; currentPositionOnMachine: number}) => creelPosition === position && currentPositionOnMachine === position\n );\n }\n\n protected getSizeOfCreelPositions(): number {\n return this.coloredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions.length;\n }\n\n protected getCellHeight(): number {\n const height =\n this.previewType === PreviewType.COLOR\n ? this.getMaximumAmountOfColorsInColoredYarnSet(this.coloredYarnSetWithStartDent)\n : this.getMaximumAmountOfYarnSetsInColoredYarnSet(this.coloredYarnSetWithStartDent);\n\n return height * CreelMappingTableBaseComponent.colorLineHeightInPx + CreelMappingTableBaseComponent.cellPaddingInPx;\n }\n\n private findByPosition(list: OverviewListCreelPosition[], creelPosition: number): OverviewListCreelPosition {\n return list.find(({position}: OverviewListCreelPosition) => position === creelPosition);\n }\n}\n","
\n
\n
\n
\n \n {{ creelPositionNumber }}\n
\n
\n
\n
\n

\n {{ 'MACHINE.DETAILS.CREEL_MAPPING.THEORETICAL_CREEL' | bmsTranslate }}\n

\n
\n \n
\n \n \n \n\n \n
\n \n {{ item.name }}\n \n
\n
\n
\n
\n \n
\n
\n

\n {{ 'GENERAL.ACTIVE_OBJECT' | bmsTranslate: {object: 'TEXTILE_DATA.CREEL.CREEL' | bmsTranslate: {count: 1} | lowercase} }}\n

\n
\n
\n \n
\n \n
\n \n \n \n\n \n
\n e{{ item.name }} \n
\n
\n
\n\n \n {{ '(' + mappedCreelPosition.position + ')' }}\n \n
\n
\n
\n \n \n\n","import {Component, EventEmitter, Input, OnChanges, Output} from '@angular/core';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {CreelMappingTableBaseComponent} from '@presentation/components/creel-tables/creel-mapping-table/creel-mapping-table-base.component';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {cloneDeep} from 'lodash-es';\n\n@Component({\n selector: 'app-creel-mapping-table',\n templateUrl: './creel-mapping-table.component.html',\n styleUrls: ['../base-creel-table/base-creel-table.component.scss']\n})\nexport class CreelMappingTableComponent extends CreelMappingTableBaseComponent implements OnChanges {\n @Input() public readOnly = false;\n @Output() public creelMapUpdate: EventEmitter = new EventEmitter();\n private draggedCreelPosition: OverviewListCreelPosition;\n private sourceIndex: number;\n\n public onDrop(mappedCreelPositionToSwitch: OverviewListCreelPosition, destinationIndex: number): void {\n if (!AssertionUtils.isNullOrUndefined(this.draggedCreelPosition) && !AssertionUtils.isNullOrUndefined(this.sourceIndex)) {\n const creelPositionInCreelMap = this.activeColoredYarnSetCreelMap.creelPositions.find(\n (value: {creelPosition: number; currentPositionOnMachine: number}) => value.creelPosition === this.draggedCreelPosition.position\n );\n\n const creelPositionToSwitch = this.activeColoredYarnSetCreelMap.creelPositions.find(\n (value: {creelPosition: number; currentPositionOnMachine: number}) => value.creelPosition === mappedCreelPositionToSwitch.position\n );\n\n const creelPositionInCreelMapCurrentPositionOnMachine = creelPositionInCreelMap.currentPositionOnMachine;\n creelPositionInCreelMap.currentPositionOnMachine = creelPositionToSwitch.currentPositionOnMachine;\n creelPositionToSwitch.currentPositionOnMachine = creelPositionInCreelMapCurrentPositionOnMachine;\n\n const sourceCreelPositionClone = cloneDeep(this.activeMappedColoredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions[this.sourceIndex]);\n\n this.activeMappedColoredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions[this.sourceIndex] =\n this.activeMappedColoredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions[destinationIndex];\n this.activeMappedColoredYarnSetWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions[destinationIndex] = sourceCreelPositionClone;\n\n this.creelMapUpdate.emit(this.activeColoredYarnSetCreelMap);\n\n this.draggedCreelPosition = null;\n this.sourceIndex = null;\n }\n }\n\n public onDragOver(event: any): void {\n if (AssertionUtils.isNullOrUndefined(this.draggedCreelPosition) || AssertionUtils.isNullOrUndefined(this.sourceIndex)) {\n event.dataTransfer.dropEffect = 'move';\n }\n\n event.preventDefault();\n }\n\n public setDraggedCreelPosition(mappedCreelPosition: OverviewListCreelPosition, sourceIndex: number): void {\n this.draggedCreelPosition = mappedCreelPosition;\n this.sourceIndex = sourceIndex;\n }\n}\n","@if (entityTranslationKey()) {\n

{{ (entityTranslationKey() | bmsTranslate: {count: 1}) + ' ' + ('SETTINGS.MENU_NAME' | bmsTranslate | lowercase) }}

\n}\n\n\n \n @if (canShowSave) {\n \n }\n\n","import {CommonModule} from '@angular/common';\nimport {Component, EventEmitter, Input, input, InputSignal, OnInit, Output, signal, WritableSignal} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {AssertionUtils, TabsAndActionsHeaderComponent, TabsMenuItem, TranslationModule} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-custom-settings-dialog-header',\n templateUrl: './custom-settings-dialog-header.component.html',\n styleUrl: './custom-settings-dialog-header.component.scss',\n standalone: true,\n imports: [TabsAndActionsHeaderComponent, TranslationModule, CommonModule, MatButtonModule]\n})\nexport class CustomSettingsDialogHeaderComponent implements OnInit {\n public menuItems: InputSignal = input.required();\n public entityTranslationKey: InputSignal = input();\n\n @Input() public canShowSave = true;\n @Output() public cancel: EventEmitter = new EventEmitter();\n @Output() public save: EventEmitter = new EventEmitter();\n\n protected selectedMenuTab: WritableSignal = signal(null);\n\n public ngOnInit(): void {\n if (!AssertionUtils.isEmpty(this.menuItems())) {\n this.updateSelectedTab(this.menuItems()[0]);\n }\n }\n\n protected updateSelectedTab(newSelectedTab: TabsMenuItem): void {\n this.selectedMenuTab.update(() => newSelectedTab);\n }\n}\n","
\n {{ label }}\n
\n \n \n {{ getUnit() | bmsTranslate }}\n \n
\n
\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'app-disabled-form-input',\n templateUrl: './disabled-form-input.component.html',\n styleUrls: ['./disabled-form-input.component.scss']\n})\nexport class DisabledFormInputComponent {\n @Input() public label: string;\n @Input() public value: string;\n @Input() public unit: string;\n\n public getValue(): string {\n return this.value ?? '';\n }\n\n public canShowUnit(): boolean {\n return this.unit !== null;\n }\n\n public getUnit(): string {\n return this.unit ?? '';\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {CommercialDimensionsCM} from '@domain/production-schedule/commercial-dimensions-cm';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingConfiguration} from '@domain/production-schedule/drawing-configuration';\nimport {DrawingConfigurationWithColorAndYarnSet} from '@domain/production-schedule/drawing-configuration-with-color-and-yarn-set';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {ObjectUtils} from '@vdw/angular-component-library';\nimport {cloneDeep, each, isEmpty, reduce} from 'lodash-es';\nimport {ListDrawing} from './list-drawing';\n\nexport class ListDrawingConfiguration implements ListDrawing {\n private _configurationIndex: number;\n private _configurationId: number;\n private _drawing: Drawing;\n private _amount: number;\n private _quality: string;\n private _colorSet: string;\n private _mainColor: OverviewListCreelPosition;\n private _borderColor: OverviewListCreelPosition;\n private _widthInCM: number;\n private _commercialDimensionsInMM: CommercialDimensions;\n private _commercialDimensionsInCM: CommercialDimensionsCM;\n private _technicalWidthInPx: number;\n private _rollLengthInMeter: number;\n\n public constructor(drawing: Drawing, configurationIndex: number, amount?: number, widthInPx?: number, drawingConfiguration?: DrawingConfiguration, rollLengthInMeter?: number) {\n this._drawing = drawing;\n this._configurationIndex = configurationIndex;\n this._amount = amount;\n this._technicalWidthInPx = widthInPx;\n\n drawingConfiguration ??= drawing?.configurations[0];\n this._configurationId = drawingConfiguration?.id;\n this._quality = ObjectUtils.tryGetValue(drawingConfiguration?.quality?.name, '');\n\n this._colorSet = drawingConfiguration instanceof DrawingConfigurationWithColorAndYarnSet ? ObjectUtils.tryGetValue(drawingConfiguration?.colorSet?.name, '') : '';\n\n this._mainColor = drawingConfiguration?.mainColorsCreelPosition;\n this._borderColor = drawingConfiguration?.borderColorsCreelPosition;\n this._commercialDimensionsInMM = drawingConfiguration?.commercialDimensionsInMm;\n this._commercialDimensionsInCM = drawingConfiguration?.commercialDimensionsInCm;\n this._rollLengthInMeter = rollLengthInMeter;\n }\n\n public get id(): string {\n return this._drawing.image.id;\n }\n\n public get configurationId(): number {\n return this._configurationId;\n }\n\n public set configurationId(configurationId: number) {\n this._configurationId = configurationId;\n }\n\n public get drawing(): Drawing {\n return this._drawing;\n }\n\n public set drawing(drawing: Drawing) {\n this._drawing = drawing;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public set amount(value: number) {\n this._amount = value;\n }\n\n public get configurationIndex(): number {\n return this._configurationIndex;\n }\n\n public get quality(): string {\n return this._quality;\n }\n\n public set quality(quality: string) {\n this._quality = quality;\n }\n\n public get colorSet(): string {\n return this._colorSet;\n }\n\n public set colorSet(colorSet: string) {\n this._colorSet = colorSet;\n }\n\n public get mainColor(): any {\n return this._mainColor;\n }\n\n public set mainColor(mainColor: any) {\n this._mainColor = mainColor;\n }\n\n public get borderColor(): any {\n return this._borderColor;\n }\n\n public set borderColor(borderColor: any) {\n this._borderColor = borderColor;\n }\n\n public get widthInCM(): number {\n return this._widthInCM;\n }\n\n public set widthInCM(widthInCM: number) {\n this._widthInCM = widthInCM;\n }\n\n public get commercialDimensionsInMM(): CommercialDimensions {\n return this._commercialDimensionsInMM;\n }\n\n public get rollLengthInMeter(): number {\n return this._rollLengthInMeter;\n }\n\n public set rollLengthInMeter(value: number) {\n this._rollLengthInMeter = value;\n }\n\n public set commercialDimensionsInMM(commercialDimensionsInMM: CommercialDimensions) {\n this._commercialDimensionsInMM = commercialDimensionsInMM;\n }\n\n public get commercialDimensionsInCm(): CommercialDimensionsCM {\n return this._commercialDimensionsInCM;\n }\n\n public set commercialDimensionsInCm(commercialDimensionsInCm: CommercialDimensionsCM) {\n this._commercialDimensionsInCM = commercialDimensionsInCm;\n }\n\n public set widthInPx(widthInPx: number) {\n this._technicalWidthInPx = widthInPx;\n }\n\n public get widthInPx(): number {\n return this._technicalWidthInPx;\n }\n\n public static getDrawingsForAllConfigurations(drawings: Drawing[]): ListDrawingConfiguration[] {\n return reduce(\n drawings,\n (result: ListDrawingConfiguration[], drawing: Drawing) => {\n if (!isEmpty(drawing.configurations)) {\n each(drawing.configurations, (configuration: DrawingConfigurationWithColorAndYarnSet, index: number) => {\n const drawingWithUpdatedImage = cloneDeep(drawing);\n drawingWithUpdatedImage.image.id = drawing.image.id;\n drawingWithUpdatedImage.configurations = [configuration];\n const item = new ListDrawingConfiguration(drawingWithUpdatedImage, index);\n result.push(item);\n });\n } else {\n const item = new ListDrawingConfiguration(drawing, 0);\n result.push(item);\n }\n\n return result;\n },\n []\n );\n }\n}\n","import {Drawing} from '@domain/production-schedule/drawing';\nimport {ListDrawing} from './list-drawing';\n\nexport class ListDrawingJute implements ListDrawing {\n private _drawing: Drawing;\n private _amount: number;\n\n public constructor(drawing: Drawing) {\n this._drawing = drawing;\n this._amount = 1;\n }\n\n public get id(): string {\n return '';\n }\n\n public get drawing(): Drawing {\n return this._drawing;\n }\n\n public set drawing(drawing: Drawing) {\n this._drawing = drawing;\n }\n\n public get amount(): number {\n return this._amount;\n }\n}\n","import {Drawing} from '@domain/production-schedule/drawing';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ListDrawing} from './list-drawing';\n\nexport class ListDrawingOrderLine implements ListDrawing {\n private _orderLine: ProductionScheduleOrderLine;\n private _amount: number;\n private _commercialLengthInMM: number;\n private _picksPerColorLine: number;\n private _rollLengthInMeter: number;\n\n public constructor(orderLine: ProductionScheduleOrderLine, amount?: number, commercialLengthInMM?: number, picksPerColorLine?: number, rollLengthInMeter?: number) {\n this._orderLine = orderLine;\n this._amount = amount ?? orderLine.amountLeft;\n this._commercialLengthInMM = commercialLengthInMM ?? orderLine.heightInProductionScheduleInMM;\n this._picksPerColorLine = picksPerColorLine;\n this._rollLengthInMeter = rollLengthInMeter;\n }\n\n public get id(): string {\n return `${this._orderLine.id}_${this.drawing.image.id}`;\n }\n\n public get drawing(): Drawing {\n return this._orderLine.article.design;\n }\n\n public set drawing(drawing: Drawing) {\n this._orderLine.article.design = drawing;\n }\n\n public get orderLine(): ProductionScheduleOrderLine {\n return this._orderLine;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public set amount(value: number) {\n this._amount = value;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public set commercialLengthInMM(value: number) {\n this._commercialLengthInMM = value;\n }\n\n public get picksPerColorLine(): number {\n return this._picksPerColorLine;\n }\n\n public set picksPerColorLine(value: number) {\n this._picksPerColorLine = value;\n }\n\n public get rollLengthInMeter(): number {\n return this._rollLengthInMeter;\n }\n\n public static fromProductionScheduleOrderLine(\n productionScheduleOrderLine: ProductionScheduleOrderLine,\n amount: number = null,\n commercialLengthInMM: number = null,\n picksPerColorLine: number = null,\n rollLengthInMeter?: number\n ): ListDrawingOrderLine {\n return new ListDrawingOrderLine(productionScheduleOrderLine, amount, commercialLengthInMM, picksPerColorLine, rollLengthInMeter);\n }\n}\n","export enum CarpetView {\n TOP_CARPET,\n BOTTOM_CARPET\n}\n","import {FinishingTemplateForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/finishing-template-for-machine-quality';\nimport {RowNode} from 'ag-grid-community';\nimport {isEqual, isNil} from 'lodash-es';\n\nexport function finishingTemplateDeficitLengthComparator(valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode): number {\n let result;\n\n const finishingTemplateFirstNode: FinishingTemplateForMachineQuality = nodeA.data;\n const finishingTemplateSecondNode: FinishingTemplateForMachineQuality = nodeB.data;\n\n if (!finishingTemplateFirstNode.hasCutbarsInformation() && !finishingTemplateSecondNode.hasCutbarsInformation()) {\n result = 0;\n } else if (isNil(finishingTemplateFirstNode.cutbarsInformation)) {\n result = -1;\n } else if (isNil(finishingTemplateSecondNode.cutbarsInformation)) {\n result = 1;\n } else if (isEqual(finishingTemplateFirstNode.cutbarsInformation.getGreatestDeficitLength(), finishingTemplateSecondNode.cutbarsInformation.getGreatestDeficitLength())) {\n result = 0;\n } else if (finishingTemplateFirstNode.cutbarsInformation.getGreatestDeficitLength() > finishingTemplateSecondNode.cutbarsInformation.getGreatestDeficitLength()) {\n result = 1;\n } else {\n result = -1;\n }\n\n return result;\n}\n","
\n \n
\n
\n","import {Component} from '@angular/core';\nimport {CutbarPropertiesForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/cutbar-properties-for-machine-quality';\nimport {FinishingTemplateForMachineQuality} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/finishing-template-for-machine-quality';\nimport {TranslationsForIncompatibility} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/grid-compatible-with-machine-quality/translations-for-incompatibility';\nimport {BaseComponent, TranslateService} from '@vdw/angular-component-library';\nimport {AgRendererComponent} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {isNil, lowerCase} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './grid-compatible-with-machine-quality.component.html',\n styleUrls: ['./grid-compatible-with-machine-quality.component.scss']\n})\nexport class GridCompatibleWithMachineQualityComponent extends BaseComponent implements AgRendererComponent {\n public reasonForIncompatibility: string;\n private finishingTemplate: FinishingTemplateForMachineQuality;\n private translate: TranslateService;\n private readonly labelForCutbarBefore = 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_BEFORE';\n private readonly labelForCutbarAfter = 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_AFTER';\n private readonly labelForCarpetTop = 'TEXTILE_DATA.FINISHING_TEMPLATE.LABEL.CARPET_TOP';\n private readonly labelForCarpetBottom = 'TEXTILE_DATA.FINISHING_TEMPLATE.LABEL.CARPET_BOTTOM';\n\n public constructor(translate: TranslateService) {\n super();\n\n this.translate = translate;\n }\n\n public agInit(params: ICellRendererParams): void {\n this.finishingTemplate = params.data;\n if (!this.isCompatibleWithMachineQuality()) {\n this.setReasonForIncompatibility();\n }\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public isCompatibleWithMachineQuality(): boolean {\n return isNil(this.finishingTemplate.cutbarsInformation) ? true : !isNil(this.finishingTemplate.cutbarsInformation) && !this.finishingTemplate.cutbarsInformation.hasDeficitLength();\n }\n\n public setReasonForIncompatibility(): void {\n this.reasonForIncompatibility = '';\n\n this.translate\n .get([this.labelForCutbarBefore, this.labelForCutbarAfter, this.labelForCarpetTop, this.labelForCarpetBottom])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((translations: TranslationsForIncompatibility) => {\n this.addReasonsForIncompatibility(translations);\n });\n }\n\n private addReasonsForIncompatibility(translations: TranslationsForIncompatibility): void {\n const cutbarBeforeProperties: CutbarPropertiesForMachineQuality = this.finishingTemplate.cutbarsInformation.cutbarBeforeProperties;\n\n const cutbarAfterProperties: CutbarPropertiesForMachineQuality = this.finishingTemplate.cutbarsInformation.cutbarAfterProperties;\n\n if (cutbarBeforeProperties.hasDeficitLength()) {\n if (!isNil(cutbarBeforeProperties.deficitLengthOfTopCarpetInPicks)) {\n this.addTranslatedReasonForIncompatibility(cutbarBeforeProperties.deficitLengthOfTopCarpetInPicks, translations[this.labelForCarpetTop], translations[this.labelForCutbarBefore]);\n }\n if (!isNil(cutbarBeforeProperties.deficitLengthOfBottomCarpetInPicks)) {\n this.addTranslatedReasonForIncompatibility(cutbarBeforeProperties.deficitLengthOfBottomCarpetInPicks, translations[this.labelForCarpetBottom], translations[this.labelForCutbarBefore]);\n }\n }\n if (cutbarAfterProperties.hasDeficitLength()) {\n if (!isNil(cutbarAfterProperties.deficitLengthOfTopCarpetInPicks)) {\n this.addTranslatedReasonForIncompatibility(cutbarAfterProperties.deficitLengthOfTopCarpetInPicks, translations[this.labelForCarpetTop], translations[this.labelForCutbarAfter]);\n }\n if (!isNil(cutbarAfterProperties.deficitLengthOfBottomCarpetInPicks)) {\n this.addTranslatedReasonForIncompatibility(cutbarAfterProperties.deficitLengthOfTopCarpetInPicks, translations[this.labelForCarpetBottom], translations[this.labelForCutbarAfter]);\n }\n }\n }\n\n private addTranslatedReasonForIncompatibility(deficitLength: number, carpetPlace: string, cutbarPlace: string): void {\n this.translate\n .get('TEXTILE_DATA.FINISHING.SELECTION_OF_FINISHING_TEMPLATE.DEFICIT_LENGTH_IN_POSITION', {\n length: deficitLength,\n carpetPlace: lowerCase(carpetPlace),\n cutbarPlace\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((translation: string) => {\n this.reasonForIncompatibility += `${translation} \\n`;\n });\n }\n}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {isNil} from 'lodash-es';\n\n@Component({\n selector: 'app-grid-cutting-line-component',\n templateUrl: './grid-cutting-line.component.html'\n})\nexport class GridCuttingLineComponent implements ICellRendererAngularComp {\n private params: ICellRendererParams;\n\n public agInit(params: ICellRendererParams): void {\n this.params = params;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public hasCuttingLine(): boolean {\n return !isNil(this.params.getValue());\n }\n}\n","{{ (hasCuttingLine() ? 'GENERAL.CONDITION.YES' : 'GENERAL.CONDITION.NO') | bmsTranslate }}\n","import {AfterViewChecked, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';\nimport {FinishingTemplateLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing-template/finishing-template-label';\nimport {FinishingLabelType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label-type.enum';\nimport {TranslateService} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {filter, isEmpty, isEqual, isNil, isUndefined, join, lowerCase, size} from 'lodash-es';\n\n@Component({\n styleUrls: ['./grid-labels.component.scss'],\n templateUrl: './grid-labels.component.html'\n})\nexport class GridLabelsComponent implements ICellRendererAngularComp, AfterViewChecked {\n @ViewChild('textElement') public text: ElementRef;\n public tooltipHideDelayMs = 250;\n public tooltipShowDelayMs = 500;\n public showTooltip = false;\n private params: ICellRendererParams;\n private readonly changeDetectorRef: ChangeDetectorRef;\n private readonly translate: TranslateService;\n\n public constructor(changeDetectorRef: ChangeDetectorRef, translate: TranslateService) {\n this.changeDetectorRef = changeDetectorRef;\n this.translate = translate;\n }\n\n public agInit(params: ICellRendererParams): void {\n this.params = params;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public ngAfterViewChecked(): void {\n this.showTooltip = this.canShowTooltip();\n this.changeDetectorRef.detectChanges();\n }\n\n public getText(): string {\n let hasLabels: string = this.translate.instant(this.hasLabels() ? 'GENERAL.CONDITION.YES' : 'GENERAL.CONDITION.NO');\n const numberOfLabels: string[] = [];\n if (this.canShowNumberOfImageLabels()) {\n numberOfLabels.push(`${this.getNumberOfImageLabels()} ${lowerCase(this.translate.instant('GENERAL.IMAGE', {count: this.getNumberOfImageLabels()}))}`);\n }\n if (this.canShowNumberOfTextLabels()) {\n numberOfLabels.push(`${this.getNumberOfTextLabels()} ${lowerCase(this.translate.instant('GENERAL.TEXT', {count: this.getNumberOfTextLabels()}))}`);\n }\n if (!isEmpty(numberOfLabels)) {\n hasLabels = `${hasLabels} (${join(numberOfLabels, ', ')})`;\n }\n return hasLabels;\n }\n\n public hasLabels(): boolean {\n return !isNil(this.getCurrentFinishingTemplateLabel()) && !isEmpty(this.getCurrentFinishingTemplateLabel());\n }\n\n public getNumberOfTextLabels(): number {\n return size(filter(this.getCurrentFinishingTemplateLabel(), ['finishingLabelType', FinishingLabelType.TEXT]));\n }\n\n public getNumberOfImageLabels(): number {\n return size(filter(this.getCurrentFinishingTemplateLabel(), ['finishingLabelType', FinishingLabelType.IMAGE]));\n }\n\n public canShowNumberOfImageLabels(): boolean {\n return !isEqual(this.getNumberOfImageLabels(), 0);\n }\n\n public canShowNumberOfTextLabels(): boolean {\n return !isEqual(this.getNumberOfTextLabels(), 0);\n }\n\n private getCurrentFinishingTemplateLabel(): FinishingTemplateLabel {\n return this.params.getValue();\n }\n\n private canShowTooltip(): boolean {\n return !isUndefined(this.text) && this.text.nativeElement.offsetWidth < this.text.nativeElement.scrollWidth;\n }\n}\n","
\n \n {{ getText() }}\n \n
\n","import {Injectable} from '@angular/core';\nimport {finishingTemplateDeficitLengthComparator} from '@application/helper/finishing-template-deficit-length-comparator';\nimport {GridCompatibleWithMachineQualityComponent} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/grid-compatible-with-machine-quality/grid-compatible-with-machine-quality.component';\nimport {GridCuttingLineComponent} from '@presentation/pages/textile-data/textile-data-overview/grid-cutting-line/grid-cutting-line.component';\nimport {GridLabelsComponent} from '@presentation/pages/textile-data/textile-data-overview/grid-labels/grid-labels.component';\nimport {ColDefBuilderFactoryService, LinkIconRendererComponent, StringUtils, TranslateService} from '@vdw/angular-component-library';\nimport {ColDef, ValueGetterParams} from 'ag-grid-community';\n\n@Injectable()\nexport class OverviewListFinishingAndFinishingTemplateService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(isTemplate: boolean, isSelection: boolean, nameCellRendererParams?: any): ColDef[] {\n const nameColDefBuilder = this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.NAME')\n .withField(isTemplate ? 'name' : 'nameWithVersion', true)\n .withComparator(StringUtils.stringComparator)\n .withLockVisible();\n\n if (nameCellRendererParams) {\n nameColDefBuilder.withCellRenderer(LinkIconRendererComponent, nameCellRendererParams);\n }\n\n const columnDefs = [\n nameColDefBuilder.build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.TYPE')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`TEXTILE_DATA.FINISHING_TEMPLATE.FINISHINGTYPE_OPTIONS.${params.data.finishingType}`), true)\n .withComparator(StringUtils.stringComparator)\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_BEFORE', 1, false, 'GENERAL.UNIT.MILLIMETER')\n .withField('cutbarsInformation.cutbarBeforeProperties.commercialLengthInMM', true)\n .withValueGetter((params: ValueGetterParams) => params.data.cutbarsInformation?.cutbarBeforeProperties?.commercialLengthInMM?.toFixed())\n .withNumericMultiFilter()\n .withRightAlignment()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_AFTER', 1, false, 'GENERAL.UNIT.MILLIMETER')\n .withField('cutbarsInformation.cutbarAfterProperties.commercialLengthInMM', true)\n .withValueGetter((params: ValueGetterParams) => params.data.cutbarsInformation?.cutbarAfterProperties?.commercialLengthInMM?.toFixed())\n .withNumericMultiFilter()\n .withRightAlignment()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTTING_LINE.CUTTING')\n .withField('cutbarsInformation.cuttingLineProperties')\n .withCellRenderer(GridCuttingLineComponent)\n .withFilterValueGetter((params: ValueGetterParams) => this.translate.instant(params.data.cutbarsInformation?.cuttingLineProperties ? 'GENERAL.CONDITION.YES' : 'GENERAL.CONDITION.NO'))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.FOLDING_CORRECTION')\n .withField('cutbarsInformation.foldingType.name', true)\n .withValueGetter((params: ValueGetterParams) => {\n return params.data.cutbarsInformation?.foldingType?.id > 0 ? 'Yes' : 'No';\n })\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.LABEL.LABEL').withField('labels').withCellRenderer(GridLabelsComponent).withoutFilter().build()\n ];\n\n if (isTemplate) {\n if (isSelection) {\n columnDefs.splice(5, 1);\n columnDefs.push(\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING.SELECTION_OF_FINISHING_TEMPLATE.COMPATIBLE_WITH_MACHINE_QUALITY')\n .withCellRenderer(GridCompatibleWithMachineQualityComponent)\n .withComparator(finishingTemplateDeficitLengthComparator)\n .withoutFilter()\n .build()\n );\n }\n } else {\n columnDefs.splice(\n 4,\n 0,\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_BEFORE', 1, false, 'GENERAL.UNIT.PICKS')\n .withField('cutbarsInformation.cutbarBeforeProperties.technicalLengthInPicks', true)\n .withNumericMultiFilter()\n .withRightAlignment()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_AFTER', 1, false, 'GENERAL.UNIT.PICKS')\n .withField('cutbarsInformation.cutbarAfterProperties.technicalLengthInPicks', true)\n .withNumericMultiFilter()\n .withRightAlignment()\n .build()\n );\n }\n\n return columnDefs;\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {DrawingPatternVisualisation} from '@domain/drawing-pattern-visualisation';\n\n@Component({\n templateUrl: './design-pattern-preview-dialog.component.html',\n styleUrls: ['./design-pattern-preview-dialog.component.scss']\n})\nexport class DesignPatternPreviewDialogComponent {\n public drawingPatternVisualisation: DrawingPatternVisualisation;\n\n public constructor(@Inject(MAT_DIALOG_DATA) public data: any) {\n if (data.design) {\n this.drawingPatternVisualisation = new DrawingPatternVisualisation(data.design);\n }\n }\n}\n","
\n
\n
\n \n
\n
\n
\n \n
\n
\n","import {Component, Inject} from '@angular/core';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {Drawings, DRAWINGS} from '@infrastructure/http/drawing/drawings';\nimport {DesignPatternPreviewDialogComponent} from '@presentation/pages/texedit/product-configuration/add/design-pattern-preview-dialog/design-pattern-preview-dialog.component';\nimport {AssertionUtils, BaseComponent, BlobUtils, DialogBuilderFactoryService} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './design-preview.component.html',\n styleUrls: ['./design-preview.component.scss']\n})\nexport class DesignPreviewComponent extends BaseComponent implements ICellRendererAngularComp {\n public drawing: Drawing;\n\n public constructor(\n @Inject(DRAWINGS) private readonly drawings: Drawings,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n }\n\n public agInit(params: ICellRendererParams): void {\n this.drawing = params.value;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public imageDownloaded(imageData: string): void {\n this.drawing.image.data = imageData === 'data:' ? null : imageData;\n }\n\n public openDesignPatternPreviewDialog(event: Event): void {\n event.stopPropagation();\n\n const dialogBuilder = this.dialogBuilderFactoryService\n .getBuilder()\n .withWidth('fit-content')\n .withHeight('fit-content')\n .withMaxWidth('100vw')\n .withMaxHeight('100vh')\n .withClass(['overflow-hidden-dialog', 'box-shadow-none-dialog'])\n .withCustomBackdrop('white-backdrop');\n\n if (this.hasMissingDesign()) {\n dialogBuilder.openDialog(DesignPatternPreviewDialogComponent, {design: 'assets/images/missing-design.svg'});\n } else if (this.hasDrawingImageData()) {\n dialogBuilder.openDialog(DesignPatternPreviewDialogComponent, {design: this.drawing.image.data});\n } else {\n this.drawings\n .getDrawing(this.drawing.image.id, this.drawing.image.signature)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((blob: Blob) => {\n if (blob.size > 0) {\n BlobUtils.blobToImageData(blob).then((imageData: string) => {\n if (!AssertionUtils.isNullOrUndefined(imageData) && imageData !== 'data:') {\n dialogBuilder.openDialog(DesignPatternPreviewDialogComponent, {design: imageData});\n }\n });\n }\n });\n }\n }\n\n public isDrawingTypeBmp(): boolean {\n return this.drawing.drawingType === DrawingType.BMP;\n }\n\n public canZoomInOnDesign(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.drawing.image?.data) || this.hasMissingDesign();\n }\n\n private hasMissingDesign(): boolean {\n return this.drawing.missingDesign;\n }\n\n private hasDrawingImageData(): boolean {\n return this.drawing.image.data !== null;\n }\n}\n","
\n
\n \n \n
\n
\n","import {Component, Input} from '@angular/core';\nimport {MaterialType} from '@domain/textile-data/creel/creel-position';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {defaultTo, flatMap, join, size, takeRight} from 'lodash-es';\n\n@Component({\n selector: 'app-more-items-available',\n templateUrl: './more-items-available.component.html',\n styleUrls: ['./more-items-available.component.scss']\n})\nexport class MoreItemsAvailableComponent {\n @Input() public items: OverviewListCreelPosition[] | MaterialType[];\n @Input() public maximumItemsToShow: number;\n\n public getNamesOfOtherItems(): string {\n let result = '';\n\n const firstItem: OverviewListCreelPosition | MaterialType = this.items[0];\n if (firstItem instanceof OverviewListCreelPosition) {\n result = join(\n flatMap(\n flatMap(takeRight(this.items as OverviewListCreelPosition[], this.getAmountOfMoreItemsAvailable()), (creelPosition: OverviewListCreelPosition) => creelPosition.getUniqueItems()),\n (materialType: MaterialType) => materialType.name\n ),\n ', '\n );\n } else if (firstItem instanceof OverviewListYarnType || firstItem instanceof Color) {\n result = join(\n flatMap(takeRight(this.items as MaterialType[], this.getAmountOfMoreItemsAvailable()), (materialType: MaterialType) => materialType.name),\n ', '\n );\n }\n\n return result;\n }\n\n public getAmountOfMoreItemsAvailable(): number {\n return size(this.items) - this.getAmountOfItemsToShow();\n }\n\n private getAmountOfItemsToShow(): number {\n return defaultTo(this.maximumItemsToShow, size(this.items));\n }\n}\n","
\n

+{{ getAmountOfMoreItemsAvailable() }}

\n
\n","import {ChangeDetectionStrategy, Component, input, InputSignal, OnInit} from '@angular/core';\r\nimport {FormControl, FormControlStatus} from '@angular/forms';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\r\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\r\nimport {AssertionUtils, BaseComponent, NavigationHelperPrototypeService, TranslateService} from '@vdw/angular-component-library';\r\nimport {startWith, takeUntil} from 'rxjs';\r\nimport {getPreviewText} from './name-generation-pattern-preview';\r\nimport {PatternBuilderInput} from './pattern-builder/pattern-builder-input';\r\nimport {PatternBuilderComponent} from './pattern-builder/pattern-builder.component';\r\n\r\n@Component({\r\n selector: 'app-name-generation-pattern-new',\r\n templateUrl: './name-generation-pattern-new.component.html',\r\n styleUrl: './name-generation-pattern-new.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NameGenerationPatternNewComponent extends BaseComponent implements OnInit {\r\n public nameGeneratorFormControl: InputSignal> = input.required();\r\n public nameGenerationProperties: InputSignal = input.required();\r\n\r\n protected patternPreview = new FormControl(null);\r\n\r\n public constructor(\r\n private readonly translate: TranslateService,\r\n private readonly navigationHelper: NavigationHelperPrototypeService\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.nameGeneratorFormControl()\r\n .valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(this.nameGeneratorFormControl()?.value))\r\n .subscribe((nameGenerator: NameGenerator) => {\r\n if (AssertionUtils.isNullOrUndefined(nameGenerator)) {\r\n this.patternPreview.disable();\r\n } else {\r\n this.patternPreview.enable();\r\n this.patternPreview.patchValue(getPreviewText(nameGenerator.parts, nameGenerator.separatorName, this.translate));\r\n }\r\n });\r\n\r\n this.nameGeneratorFormControl().statusChanges.subscribe((status: FormControlStatus) => {\r\n if (status === 'DISABLED') {\r\n this.patternPreview.disable();\r\n } else {\r\n this.patternPreview.enable();\r\n }\r\n });\r\n\r\n if (this.nameGeneratorFormControl().disabled) {\r\n this.patternPreview.disable();\r\n }\r\n }\r\n\r\n protected clearNameGeneratorParts(): void {\r\n this.nameGeneratorFormControl().patchValue(new NameGenerator(undefined, NameGeneratorSeparator[NameGeneratorSeparator.NO_SEPARATOR], undefined, []));\r\n }\r\n\r\n protected selectNameGenerationPattern(): void {\r\n const data: PatternBuilderInput = {nameGeneratorProperties: this.nameGenerationProperties(), nameGenerator: this.nameGeneratorFormControl().value};\r\n\r\n this.navigationHelper\r\n .navigateWithContentSwitcher({componentInfo: {component: PatternBuilderComponent}, data})\r\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\r\n .subscribe((nameGenerator: NameGenerator) => {\r\n if (!AssertionUtils.isNullOrUndefined(nameGenerator)) {\r\n this.nameGeneratorFormControl().patchValue(nameGenerator);\r\n }\r\n });\r\n }\r\n}\r\n","\r\n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.NAME_GENERATION' | bmsTranslate }}\r\n \r\n\r\n","import {getDisplayValueForPlaceholderSeparator} from '@application/helper/get-display-value-for-placeholder-separator';\r\nimport {NameGeneratorPart} from '@domain/custom-settings/name-generator-part';\r\nimport {NameGeneratorPartType} from '@domain/custom-settings/name-generator-part-type.enum';\r\nimport {CalculatedValuePart} from '@domain/custom-settings/name-generator-parts/calculated-value-part';\r\nimport {CustomTextPart} from '@domain/custom-settings/name-generator-parts/custom-text-part';\r\nimport {EntityPropertyPart} from '@domain/custom-settings/name-generator-parts/entity-property-part';\r\nimport {SerialNumberPart} from '@domain/custom-settings/name-generator-parts/serial-number-part';\r\nimport {NameGeneratorPropertyTranslate} from '@domain/custom-settings/name-generator-property-translate';\r\nimport {CutFrom} from '@domain/name-generator/enums/cut-from.enum';\r\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\r\nimport {TranslateService} from '@vdw/angular-component-library';\r\n\r\nexport function getPreviewText(nameGeneratorParts: NameGeneratorPart[], separator: NameGeneratorSeparator, translate: TranslateService): string {\r\n let nameGenerationPatternPreviewText: string[] = [];\r\n const separatorSymbol = getDisplayValueForPlaceholderSeparator(NameGeneratorSeparator[separator]);\r\n\r\n nameGeneratorParts?.forEach((part: NameGeneratorPart) => {\r\n let previewText = '';\r\n let previewTextsInBracket: (string | number)[];\r\n\r\n switch (part.type) {\r\n case NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER:\r\n case NameGeneratorPartType.NUMERIC_SERIAL_NUMBER:\r\n const serialNumberPart = part as SerialNumberPart;\r\n previewText = translate.instant(NameGeneratorPropertyTranslate.getKey(serialNumberPart.type, null)).split(' ')[0];\r\n previewTextsInBracket = [serialNumberPart.maxLength ?? ''];\r\n if (serialNumberPart.startValue) {\r\n previewTextsInBracket.push(serialNumberPart.startValue);\r\n }\r\n if (serialNumberPart.stepSize) {\r\n previewTextsInBracket.push(serialNumberPart.stepSize);\r\n }\r\n break;\r\n case NameGeneratorPartType.PROPERTY_VALUE:\r\n const entityPropertyPart = part as EntityPropertyPart;\r\n previewText = translate.instant(NameGeneratorPropertyTranslate.getKey(NameGeneratorPartType.PROPERTY_VALUE, entityPropertyPart.name), {count: 1}).replace(/\\s/g, '');\r\n previewTextsInBracket = [translate.instant(`GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.${entityPropertyPart.cutFromDirection}`)];\r\n if (entityPropertyPart.cutFromDirection !== CutFrom.NONE) {\r\n previewTextsInBracket.push(entityPropertyPart.cutStartCharacter ?? '', entityPropertyPart.cutLength ?? '');\r\n }\r\n break;\r\n case NameGeneratorPartType.CUSTOM_TEXT:\r\n const customTextPart = part as CustomTextPart;\r\n previewText = customTextPart.customText ?? '';\r\n break;\r\n case NameGeneratorPartType.CALCULATED_VALUE:\r\n const calculatedValuePart = part as CalculatedValuePart;\r\n previewText = translate.instant(NameGeneratorPropertyTranslate.getKey(NameGeneratorPartType.CALCULATED_VALUE, calculatedValuePart.name), {count: 1}).replace(/\\s/g, '');\r\n break;\r\n }\r\n\r\n nameGenerationPatternPreviewText.push(previewText + (previewTextsInBracket?.length ? `(${previewTextsInBracket.join(',')})` : ''));\r\n });\r\n\r\n return nameGenerationPatternPreviewText.join(separatorSymbol);\r\n}\r\n","@if (showNameSuggestion()) {\r\n \r\n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\r\n}\r\n","import {ChangeDetectionStrategy, Component, computed, Input, input, OnInit, output, signal} from '@angular/core';\nimport {toObservable} from '@angular/core/rxjs-interop';\nimport {CustomSettingsRepository} from '@infrastructure/http/custom-settings-repository.interface';\nimport {AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {debounce, interval, map, merge, Observable, of, switchMap, takeUntil} from 'rxjs';\n\n@Component({\n selector: 'app-name-suggestion-hint',\n templateUrl: './name-suggestion-hint.component.html',\n styleUrl: './name-suggestion-hint.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NameSuggestionHintComponent extends BaseComponent implements OnInit {\n public currentName = input();\n public nameGenerationEntity = input.required();\n public httpRepository = input.required>();\n\n @Input()\n public externalRefresh: Observable;\n\n public applySuggestion = output();\n\n protected nameSuggestion = signal(null);\n protected showNameSuggestion = computed(() => !AssertionUtils.isNullOrWhitespace(this.nameSuggestion()) && this.currentName() !== this.nameSuggestion());\n\n private getNameSuggestion: Observable;\n\n public constructor() {\n super();\n\n this.getNameSuggestion = toObservable(this.nameGenerationEntity);\n }\n\n public ngOnInit(): void {\n merge(this.getNameSuggestion, this.externalRefresh?.pipe(map(() => this.nameGenerationEntity() ?? of())))\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n debounce(() => interval(500)),\n switchMap((nameGenerationEntity: TNameGenerationEntity) => this.httpRepository().generateName(nameGenerationEntity))\n )\n .subscribe((suggestion: string) => this.nameSuggestion.update(() => suggestion));\n }\n}\n","import {AbstractControl, FormArray, FormGroup} from '@angular/forms';\n\nexport class ReactiveFormUtils {\n public static updateChildrenValueAndValidity(control: AbstractControl, options: {emitEvent: boolean} = {emitEvent: true}): void {\n if (control.enabled) {\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach((childControl: AbstractControl) => this.updateChildrenValueAndValidity(childControl));\n } else {\n control.updateValueAndValidity({onlySelf: true, emitEvent: options.emitEvent});\n }\n }\n }\n\n public static markAllEnabledAsTouched(control: AbstractControl): void {\n if (control.enabled) {\n control.markAsTouched({onlySelf: true});\n\n if (control instanceof FormGroup || control instanceof FormArray) {\n Object.values(control.controls).forEach((childControl: AbstractControl) => this.markAllEnabledAsTouched(childControl));\n }\n }\n }\n}\n","
\r\n @if (selectedPropertyType() === nameGeneratorPartTypeEnum.ALPHABETIC_SERIAL_NUMBER || selectedPropertyType() === nameGeneratorPartTypeEnum.NUMERIC_SERIAL_NUMBER) {\r\n
\r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.MAX_LENGTH' | bmsTranslate }}\r\n \r\n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\r\n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\r\n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: '5'} }}\r\n \r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.START_VALUE' | bmsTranslate }}\r\n \r\n \r\n {{ 'GENERAL.ERRORS.LENGTH_LIMIT' | bmsTranslate: {max: partForm.value.serialNumber.maxLength ?? '5'} }}\r\n \r\n \r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.STEP_SIZE' | bmsTranslate }}\r\n \r\n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\r\n \r\n
\r\n } @else if (selectedPropertyType() === nameGeneratorPartTypeEnum.PROPERTY_VALUE) {\r\n
\r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.LABEL' | bmsTranslate }}\r\n \r\n @for (cutFrom of cutFromEnum | keyvalue; track cutFrom) {\r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.' + cutFrom.value | bmsTranslate }}\r\n \r\n }\r\n \r\n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\r\n \r\n @if (selectedCutFrom() === cutFromEnum.LEFT || selectedCutFrom() === cutFromEnum.RIGHT) {\r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.START_CHARACTER' | bmsTranslate }}\r\n \r\n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\r\n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\r\n \r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.LENGTH' | bmsTranslate }}\r\n \r\n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\r\n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\r\n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: '20'} }}\r\n \r\n }\r\n
\r\n } @else if (selectedPropertyType() === nameGeneratorPartTypeEnum.CUSTOM_TEXT) {\r\n
\r\n \r\n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.VALUE' | bmsTranslate }}\r\n \r\n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\r\n {{ 'GENERAL.ERRORS.LENGTH_LIMIT' | bmsTranslate: {max: '20'} }}\r\n \r\n
\r\n }\r\n
\r\n","import {ChangeDetectionStrategy, Component, signal, WritableSignal} from '@angular/core';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {NameGeneratorPartType} from '@domain/custom-settings/name-generator-part-type.enum';\r\nimport {CutFrom} from '@domain/name-generator/enums/cut-from.enum';\r\nimport {BaseComponent} from '@vdw/angular-component-library';\r\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\r\nimport {ICellRendererParams} from 'ag-grid-community';\r\nimport {startWith, takeUntil} from 'rxjs';\r\nimport {NameGeneratorPartForm} from '../name-generation-form-type';\r\n\r\n@Component({\r\n templateUrl: './part-values-cell-renderer.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PartValuesCellRendererComponent extends BaseComponent implements ICellRendererAngularComp {\r\n protected partForm: NameGeneratorPartForm;\r\n\r\n protected nameGeneratorPartTypeEnum = NameGeneratorPartType;\r\n protected cutFromEnum = CutFrom;\r\n\r\n protected selectedPropertyType: WritableSignal = signal(null);\r\n protected selectedCutFrom: WritableSignal = signal(null);\r\n\r\n public agInit(params: ICellRendererParams): void {\r\n this.partForm = params.data;\r\n\r\n this.partForm.controls.property.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(this.partForm.controls.property.value)).subscribe((property: NameGeneratorProperty) => {\r\n this.selectedPropertyType.update(() => property.type);\r\n });\r\n this.partForm.controls.entityProperty.controls.cutFrom.valueChanges\r\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(this.partForm.controls.entityProperty.controls.cutFrom.value))\r\n .subscribe((cutFrom: CutFrom) => {\r\n this.selectedCutFrom.update(() => cutFrom);\r\n });\r\n }\r\n\r\n public refresh(_: ICellRendererParams): boolean {\r\n return false;\r\n }\r\n}\r\n","\r\n {{ 'GENERAL.PLACEHOLDER.PROPERTY' | bmsTranslate }}\r\n \r\n @for (property of nameGeneratorProperties; track property) {\r\n {{ getPropertyTranslation(property) }}\r\n }\r\n \r\n @if (selectedProperty.errors?.serialNumberInMiddle) {\r\n \r\n \r\n \r\n }\r\n\r\n","import {ChangeDetectionStrategy, Component} from '@angular/core';\r\nimport {FormControl} from '@angular/forms';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {NameGeneratorPropertyTranslate} from '@domain/custom-settings/name-generator-property-translate';\r\nimport {TranslateService} from '@vdw/angular-component-library';\r\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\r\nimport {PropertySelectCellRendererParams} from './property-select-cell-renderer-params';\r\n\r\n@Component({\r\n templateUrl: './property-select-cell-renderer.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class PropertySelectCellRendererComponent implements ICellRendererAngularComp {\r\n protected nameGeneratorProperties: NameGeneratorProperty[];\r\n protected selectedProperty: FormControl;\r\n\r\n public constructor(private readonly translate: TranslateService) {}\r\n\r\n public agInit(params: PropertySelectCellRendererParams): void {\r\n this.nameGeneratorProperties = params.nameGeneratorProperties;\r\n this.selectedProperty = params.data.controls.property;\r\n }\r\n\r\n public refresh(_: PropertySelectCellRendererParams): boolean {\r\n return false;\r\n }\r\n\r\n protected compareProperties(property1: NameGeneratorProperty, property2: NameGeneratorProperty): boolean {\r\n return property1.type === property2.type && property1.name === property2.name;\r\n }\r\n\r\n protected getPropertyTranslation(property: NameGeneratorProperty): string {\r\n let translationKey = NameGeneratorPropertyTranslate.getKeyForProperty(property);\r\n return translationKey ? this.translate.instant(translationKey, {count: 1}) : translationKey;\r\n }\r\n}\r\n","
\r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n
\r\n
\r\n \r\n {{ 'GENERAL.PLACEHOLDER.SEPARATOR.SEPARATOR' | bmsTranslate }}\r\n \r\n @for (separator of separatorValues; track separator) {\r\n {{ 'GENERAL.PLACEHOLDER.SEPARATOR.' + separator | bmsTranslate }}\r\n }\r\n \r\n \r\n @if (showPatternPreview()) {\r\n
\r\n {{ 'GENERAL.PREVIEW' | bmsTranslate }}\r\n \r\n
\r\n }\r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n","import {ChangeDetectionStrategy, Component, computed, OnInit, Signal, signal, WritableSignal} from '@angular/core';\nimport {FormArray, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {ReactiveFormUtils} from '@application/helper/reactive-form-utils';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {NameGeneratorPart} from '@domain/custom-settings/name-generator-part';\nimport {NameGeneratorPartType} from '@domain/custom-settings/name-generator-part-type.enum';\nimport {CalculatedValuePart} from '@domain/custom-settings/name-generator-parts/calculated-value-part';\nimport {CustomTextPart} from '@domain/custom-settings/name-generator-parts/custom-text-part';\nimport {EntityPropertyPart} from '@domain/custom-settings/name-generator-parts/entity-property-part';\nimport {SerialNumberPart} from '@domain/custom-settings/name-generator-parts/serial-number-part';\nimport {NameGeneratorPropertyTranslate} from '@domain/custom-settings/name-generator-property-translate';\nimport {CutFrom} from '@domain/name-generator/enums/cut-from.enum';\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n EnumUtils,\n GridButtonClickedEvent,\n GridOptionsBuilderFactoryService,\n NavigationHelperPrototypeService,\n OverlayActionsService,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef, GetRowIdParams, GridApi, GridOptions, GridReadyEvent, IRowDragItem, RowDragEvent} from 'ag-grid-community';\nimport {combineLatest, distinctUntilChanged, filter, pairwise, startWith, Subject, take, takeUntil} from 'rxjs';\nimport {getPreviewText} from '../name-generation-pattern-preview';\nimport {PartValuesCellRendererComponent} from './form-cell-renderers/part-values-cell-renderer.component';\nimport {PropertySelectCellRendererParams} from './form-cell-renderers/property-select-cell-renderer-params';\nimport {PropertySelectCellRendererComponent} from './form-cell-renderers/property-select-cell-renderer.component';\nimport {NameGeneratorForm, NameGeneratorPartForm} from './name-generation-form-type';\nimport {PatternBuilderInput} from './pattern-builder-input';\nimport {serialNumberNotInMiddleValidator} from './serial-not-in-middle-validator';\n\n@Component({\n selector: 'app-pattern-builder',\n templateUrl: './pattern-builder.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PatternBuilderComponent extends BaseComponent implements OnInit {\n protected nameGeneratorProperties: NameGeneratorProperty[];\n private nameGeneratorInput: NameGenerator;\n\n private currentSeparator: WritableSignal = signal(NameGeneratorSeparator.NO_SEPARATOR);\n private currentParts: WritableSignal = signal([]);\n protected patternPreview: Signal = computed(() => {\n return getPreviewText(this.currentParts(), this.currentSeparator(), this.translate);\n });\n\n protected showPatternPreview: Signal = computed(() => !AssertionUtils.isEmpty(this.patternPreview()));\n protected showNoRowsOverlay: Signal = computed(() => AssertionUtils.isEmpty(this.currentParts()));\n\n protected separatorValues = EnumUtils.getEnumNames(NameGeneratorSeparator);\n protected separatorEnum = NameGeneratorSeparator;\n\n private nextPartId = 0;\n protected nameGeneratorForm: NameGeneratorForm = new FormGroup({\n parts: new FormArray([]),\n separator: new FormControl(NameGeneratorSeparator.NO_SEPARATOR)\n });\n\n private gridApi: Subject = new Subject();\n protected patternGridOptions: GridOptions;\n protected generalMenuTab: TabsMenuItem = {\n value: 'general',\n translationKey: 'GENERAL.GENERAL'\n };\n\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly overlayActionsService: OverlayActionsService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const contentSwitcherData = this.navigationHelper.getCurrentEntryData();\n\n this.nameGeneratorProperties = contentSwitcherData?.nameGeneratorProperties;\n this.nameGeneratorInput = contentSwitcherData?.nameGenerator;\n\n this.setFormChangeListeners();\n this.patternGridOptions = this.getGridOptions();\n\n this.nameGeneratorForm.controls.separator.patchValue(this.nameGeneratorInput.separatorName);\n this.nameGeneratorInput.parts.forEach((part: NameGeneratorPart) => this.nameGeneratorForm.controls.parts.push(this.getPartForm(part), {emitEvent: false}));\n this.nameGeneratorForm.controls.parts.updateValueAndValidity();\n\n this.gridApi.pipe(takeUntil(this.unSubscribeOnViewDestroy), take(1)).subscribe((gridApi: GridApi) => gridApi.setGridOption('loading', false));\n\n this.overlayActionsService.actionTriggeredEmitter.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((_: string) => this.addEmptyPartForm());\n }\n\n public cancel(): void {\n this.navigationHelper.navigateBack();\n }\n\n private getGridOptions(): GridOptions {\n const columnDefs: ColDef[] = [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.PLACEHOLDER.PROPERTY')\n .withoutFilter()\n .withCellRenderer(PropertySelectCellRendererComponent, {nameGeneratorProperties: this.nameGeneratorProperties})\n .withFlex(1)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.PLACEHOLDER.VALUES')\n .withoutFilter()\n .withCellRenderer(PartValuesCellRendererComponent)\n .withFlex(3)\n .withResizable(false)\n .build()\n ];\n\n return this.gridOptionsBuilderFactoryService\n .getBuilder(columnDefs, GridIdentifier.PATTERN_BUILDER)\n .withOnGridReady((event: GridReadyEvent) => this.gridApi.next(event.api))\n .withGetRowId((params: GetRowIdParams) => params.data.controls.id.value.toString())\n .withoutColumnMenu()\n .withoutMovableColumns()\n .withoutSorting()\n .withSuppressRowClickSelection()\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('GENERAL.PLACEHOLDER.RULE', {count: 2}),\n hideDescription: true,\n actions: [\n {\n key: 'addRule',\n titleKey: this.translate.instant('GENERAL.ACTIONS.ADD_OBJECT', {object: this.translate.instant('GENERAL.PLACEHOLDER.RULE', {count: 1}).toLowerCase()}),\n isPrimary: true\n }\n ]\n })\n .withRowActions({\n buttons: [\n {\n title: 'GENERAL.ACTIONS.DELETE',\n icon: 'solid-delete',\n withTooltip: true,\n onlyEnabledOnSingleRowSelection: true,\n onClick: ({rowNode}: GridButtonClickedEvent): void => this.partRemoved(rowNode.rowIndex)\n }\n ]\n })\n .withRowDraggingInsideGrid((params: IRowDragItem) => {\n const rowData = params.rowNode?.data as NameGeneratorPartForm;\n return this.translate.instant(NameGeneratorPropertyTranslate.getKeyForProperty(rowData.controls.property.value), {count: 1});\n })\n .withOnRowDragEndOrLeave((params: RowDragEvent) => this.partMoved(params.node.data.controls.id.value, params.node.rowIndex))\n .build();\n }\n\n private setFormChangeListeners(): void {\n this.nameGeneratorForm.controls.separator.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((separator: NameGeneratorSeparator) => {\n this.currentSeparator.update(() => separator);\n });\n\n const partsChanged = this.nameGeneratorForm.controls.parts.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith([]), pairwise());\n partsChanged.subscribe((_: any) => {\n this.currentParts.update(() => this.getCurrentNameGeneratorParts());\n });\n\n combineLatest([partsChanged.pipe(filter(([oldParts, newParts]: [any[], any[]]) => oldParts.length !== newParts.length)), this.gridApi])\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n filter(([_, gridApi]: [any, GridApi]) => !AssertionUtils.isNullOrUndefined(gridApi))\n )\n .subscribe(([_, gridApi]: [any, GridApi]) => {\n gridApi.setGridOption('rowData', this.nameGeneratorForm.controls.parts.controls);\n });\n }\n\n protected confirmPattern(): void {\n ReactiveFormUtils.markAllEnabledAsTouched(this.nameGeneratorForm);\n ReactiveFormUtils.updateChildrenValueAndValidity(this.nameGeneratorForm, {emitEvent: false});\n\n if (this.nameGeneratorForm.valid) {\n const nameGenerator = new NameGenerator(undefined, this.currentSeparator(), undefined, this.currentParts());\n this.navigationHelper.navigateBack(nameGenerator);\n }\n }\n\n protected addEmptyPartForm(): void {\n const part = this.getEmptyPartForm();\n this.nameGeneratorForm.controls.parts.push(part);\n this.updatePropertyValidity();\n }\n\n private partMoved(id: number, toIndex: number): void {\n const fromIndex = this.nameGeneratorForm.controls.parts.controls.findIndex((part: NameGeneratorPartForm) => part.controls.id.value === id);\n if (fromIndex !== toIndex) {\n const partToMove = this.nameGeneratorForm.controls.parts.at(fromIndex);\n this.nameGeneratorForm.controls.parts.removeAt(fromIndex, {emitEvent: false});\n this.nameGeneratorForm.controls.parts.insert(toIndex, partToMove, {emitEvent: false});\n this.updatePropertyValidity();\n }\n }\n\n private partRemoved(rowIndex: number): void {\n this.nameGeneratorForm.controls.parts.removeAt(rowIndex);\n this.updatePropertyValidity();\n }\n\n private getPartForm(part: NameGeneratorPart): NameGeneratorPartForm {\n const partForm = this.getEmptyPartForm();\n\n switch (part.type) {\n case NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER:\n case NameGeneratorPartType.NUMERIC_SERIAL_NUMBER:\n const serialNumberPart = part as SerialNumberPart;\n partForm.patchValue({\n property: new NameGeneratorProperty(part.type, null),\n serialNumber: {\n maxLength: serialNumberPart.maxLength,\n startValue: serialNumberPart.startValue,\n stepSize: serialNumberPart.stepSize\n }\n });\n break;\n case NameGeneratorPartType.PROPERTY_VALUE:\n const entityPropertyPart = part as EntityPropertyPart;\n partForm.patchValue({\n property: new NameGeneratorProperty(part.type, entityPropertyPart.name),\n entityProperty: {\n cutFrom: entityPropertyPart.cutFromDirection,\n startCharacter: entityPropertyPart.cutStartCharacter,\n length: entityPropertyPart.cutLength\n }\n });\n break;\n case NameGeneratorPartType.CUSTOM_TEXT:\n const customTextPart = part as CustomTextPart;\n partForm.patchValue({\n property: new NameGeneratorProperty(part.type, null),\n customText: {\n customText: customTextPart.customText\n }\n });\n break;\n case NameGeneratorPartType.CALCULATED_VALUE:\n const calculatedValuePart = part as CalculatedValuePart;\n partForm.patchValue({\n property: new NameGeneratorProperty(part.type, calculatedValuePart.name)\n });\n break;\n }\n\n return partForm;\n }\n\n private getEmptyPartForm(): NameGeneratorPartForm {\n const partId = this.nextPartId++;\n const newPartForm: NameGeneratorPartForm = new FormGroup({\n id: new FormControl(partId),\n property: new FormControl(new NameGeneratorProperty(NameGeneratorPartType.CUSTOM_TEXT, null)),\n serialNumber: new FormGroup({\n maxLength: new FormControl(null, [Validators.required, Validators.min(1), Validators.max(5)]),\n startValue: new FormControl(null, Validators.maxLength(5)),\n stepSize: new FormControl(null, Validators.min(1))\n }),\n entityProperty: new FormGroup({\n cutFrom: new FormControl(CutFrom.NONE),\n startCharacter: new FormControl(null, [Validators.required, Validators.min(1)]),\n length: new FormControl(null, [Validators.required, Validators.min(1), Validators.max(20)])\n }),\n customText: new FormGroup({\n customText: new FormControl(null, [Validators.required, Validators.maxLength(20)])\n })\n });\n\n newPartForm.controls.property.addValidators(serialNumberNotInMiddleValidator(partId, this.nameGeneratorForm.controls.parts.controls));\n\n return this.setPartFormChangeListeners(newPartForm);\n }\n\n private setPartFormChangeListeners(partForm: NameGeneratorPartForm): NameGeneratorPartForm {\n partForm.controls.property.valueChanges\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(partForm.controls.property.value), distinctUntilChanged())\n .subscribe((property: NameGeneratorProperty) => {\n partForm.controls.serialNumber.disable({onlySelf: true, emitEvent: false});\n partForm.controls.entityProperty.disable({onlySelf: true, emitEvent: false});\n partForm.controls.customText.disable({onlySelf: true, emitEvent: false});\n\n switch (property.type) {\n case NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER:\n case NameGeneratorPartType.NUMERIC_SERIAL_NUMBER:\n partForm.controls.serialNumber.enable({onlySelf: true, emitEvent: false});\n partForm.controls.serialNumber.controls.startValue.patchValue('', {emitEvent: false});\n break;\n case NameGeneratorPartType.PROPERTY_VALUE:\n partForm.controls.entityProperty.enable({onlySelf: true, emitEvent: false});\n partForm.controls.entityProperty.controls.cutFrom.updateValueAndValidity({onlySelf: true});\n break;\n case NameGeneratorPartType.CUSTOM_TEXT:\n partForm.controls.customText.enable({onlySelf: true, emitEvent: false});\n break;\n }\n });\n\n partForm.controls.serialNumber.controls.maxLength.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((maxLenght: number) => {\n partForm.controls.serialNumber.controls.startValue.setValidators(Validators.maxLength(maxLenght ?? 5));\n partForm.controls.serialNumber.controls.startValue.updateValueAndValidity({onlySelf: false});\n });\n\n partForm.controls.serialNumber.controls.startValue.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((startValue: string) => {\n if (partForm.value.property.type === NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER) {\n partForm.controls.serialNumber.controls.startValue.patchValue(startValue?.replace(/[^A-Za-z]/g, '').toUpperCase() ?? null, {emitEvent: false});\n } else if (partForm.value.property.type === NameGeneratorPartType.NUMERIC_SERIAL_NUMBER) {\n partForm.controls.serialNumber.controls.startValue.patchValue(startValue?.replace(/\\D/g, '') ?? null, {emitEvent: false});\n }\n });\n\n partForm.controls.entityProperty.controls.cutFrom.valueChanges\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(partForm.controls.entityProperty.controls.cutFrom.value))\n .subscribe((cutFrom: CutFrom) => {\n if (cutFrom === CutFrom.NONE) {\n partForm.controls.entityProperty.controls.startCharacter.disable({emitEvent: false});\n partForm.controls.entityProperty.controls.startCharacter.clearValidators();\n partForm.controls.entityProperty.controls.startCharacter.updateValueAndValidity();\n partForm.controls.entityProperty.controls.length.disable({emitEvent: false});\n partForm.controls.entityProperty.controls.length.clearValidators();\n partForm.controls.entityProperty.controls.length.updateValueAndValidity();\n } else {\n partForm.controls.entityProperty.controls.startCharacter.enable({emitEvent: false});\n partForm.controls.entityProperty.controls.startCharacter.setValidators([Validators.required, Validators.min(1)]);\n partForm.controls.entityProperty.controls.startCharacter.updateValueAndValidity();\n partForm.controls.entityProperty.controls.length.enable({emitEvent: false});\n partForm.controls.entityProperty.controls.length.setValidators([Validators.required, Validators.min(1), Validators.max(20)]);\n partForm.controls.entityProperty.controls.length.updateValueAndValidity();\n }\n });\n\n return partForm;\n }\n\n private getCurrentNameGeneratorParts(): NameGeneratorPart[] {\n return this.nameGeneratorForm.controls.parts.controls.map((partForm: NameGeneratorPartForm) => {\n switch (partForm.value.property.type) {\n case NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER:\n case NameGeneratorPartType.NUMERIC_SERIAL_NUMBER:\n return new SerialNumberPart(partForm.value.property.type, partForm.value.serialNumber.maxLength, partForm.value.serialNumber.startValue, partForm.value.serialNumber.stepSize);\n case NameGeneratorPartType.CUSTOM_TEXT:\n return new CustomTextPart(partForm.value.customText.customText);\n case NameGeneratorPartType.PROPERTY_VALUE:\n const cutFromNone = partForm.value.entityProperty.cutFrom === CutFrom.NONE;\n return new EntityPropertyPart(\n partForm.value.property.name,\n partForm.value.entityProperty.cutFrom,\n cutFromNone ? null : partForm.value.entityProperty.startCharacter,\n cutFromNone ? null : partForm.value.entityProperty.length\n );\n case NameGeneratorPartType.CALCULATED_VALUE:\n return new CalculatedValuePart(partForm.value.property.name);\n }\n });\n }\n\n private updatePropertyValidity(): void {\n this.nameGeneratorForm.controls.parts.controls.forEach((part: NameGeneratorPartForm) => part.controls.property.updateValueAndValidity({onlySelf: true}));\n }\n}\n","import {FormControl, ValidationErrors, ValidatorFn} from '@angular/forms';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {NameGeneratorPartType} from '@domain/custom-settings/name-generator-part-type.enum';\r\nimport {NameGeneratorPartForm} from './name-generation-form-type';\r\n\r\nexport function serialNumberNotInMiddleValidator(partId: number, partsFormGroup: NameGeneratorPartForm[]): ValidatorFn {\r\n return (property: FormControl): ValidationErrors | null => {\r\n if (property.value.type !== NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER && property.value.type !== NameGeneratorPartType.NUMERIC_SERIAL_NUMBER) {\r\n return null;\r\n }\r\n const index = partsFormGroup.findIndex((part: NameGeneratorPartForm) => part.value.id === partId);\r\n return index !== 0 && index !== partsFormGroup.length - 1 ? {serialNumberInMiddle: true} : null;\r\n };\r\n}\r\n","import {NameGeneratorPartType} from './enums/name-generator-part-type.enum';\n\nexport namespace NameGenerationProperty {\n const MACHINE_NAME_TRANSLATION_KEY = 'MACHINE.MACHINE';\n const ENTITY_PROPERTY_TRANSLATION_KEY_MAP = new Map([\n ['WeaveStructureName', 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE'],\n ['ReedDensityInDentsPerMM', 'TEXTILE_DATA.MACHINE_QUALITY.REEDDENSITY'],\n ['WeftDensityInDentsPerMM', 'TEXTILE_DATA.MACHINE_QUALITY.WEFTDENSITY'],\n ['TechnicalCode', 'GENERAL.TECHNICAL_CODE'],\n ['Type', 'GENERAL.TYPE'],\n ['YarnSetName', 'TEXTILE_DATA.YARN_SET.YARN_SET'],\n ['Rgb.Red', 'TEXTILE_DATA.COLOR.RED'],\n ['Rgb.Green', 'TEXTILE_DATA.COLOR.GREEN'],\n ['Rgb.Blue', 'TEXTILE_DATA.COLOR.BLUE'],\n ['YarnCount', 'TEXTILE_DATA.YARN_TYPE.YARN_COUNT'],\n ['YarnCountUnit', 'GENERAL.UNIT.UNIT'],\n ['Threads.RawMaterial', 'TEXTILE_DATA.YARN_TYPE.RAW_MATERIAL'],\n ['AmountOfCreelPositions', 'TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS'],\n ['ColorSetsWithStartDents.Name', 'TEXTILE_DATA.COLOR_SET.COLOR_SET'],\n ['NrPositions', 'TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS'],\n ['Equipment.Name', MACHINE_NAME_TRANSLATION_KEY],\n ['Quality.Name', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\n ['FinishingType', 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHINGTYPE'],\n ['FinishingTemplateName', 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE'],\n ['CutbarsInformation.CutbarBeforeProperties.CommercialLengthInMM', 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_BEFORE'],\n ['CutbarsInformation.CutbarAfterProperties.CommercialLengthInMM', 'TEXTILE_DATA.FINISHING_TEMPLATE.CUTBAR.CUTBAR_AFTER'],\n ['LoomType', 'PATH_LAYOUT_TEMPLATE.LOOM_GROUP'],\n ['PathLayoutTemplatePaths.WidthInMM', 'TEXTILE_DATA.MACHINE_QUALITY.OPTIONAL_SETTINGS.PATH_WIDTHS'],\n ['TotalWidthInMM', 'PATH_LAYOUT_TEMPLATE.TOTAL_WIDTH'],\n ['Machine.Name', MACHINE_NAME_TRANSLATION_KEY],\n ['MachineQuality.TechnicalName', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY'],\n ['Creel.Name', 'TEXTILE_DATA.CREEL.CREEL'],\n ['Buggy.Name', 'PLANNING.BUGGY.BUGGY'],\n ['NumberOfYarns', 'TEXTILE_DATA.YARN_SET.NUMBER_OF_YARNS'],\n ['OrderId', 'MACHINE.DETAILS.ORDER_ID'],\n ['NumberOfCreelPositions', 'MACHINE.DETAILS.NR_CREEL_POSITIONS'],\n ['DentsForFabric', 'MACHINE.DETAILS.NR_DENTS'],\n ['MachineName', MACHINE_NAME_TRANSLATION_KEY],\n ['WeaveProductName', 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT'],\n ['TuftProduct.Name', 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT'],\n ['CreelName', 'TEXTILE_DATA.CREEL.ENTITY'],\n ['MachineQualityName', 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY']\n ]);\n\n export function getTranslationKey(property: string): string {\n return NameGeneratorPartType[property] ? `GENERAL.PLACEHOLDER.${NameGeneratorPartType[property]}` : ENTITY_PROPERTY_TRANSLATION_KEY_MAP.get(property);\n }\n}\n","export enum NameGeneratorPartType {\n ALPHABETIC_SERIAL_NUMBER = 'ALPHABETIC_SERIAL_NUMBER',\n NUMERIC_SERIAL_NUMBER = 'NUMERIC_SERIAL_NUMBER',\n CUSTOM_TEXT = 'CUSTOM_TEXT',\n ENTITY_PROPERTY = 'ENTITY_PROPERTY'\n}\n","import {NameGeneratorPartType} from './enums/name-generator-part-type.enum';\nimport {ParametersMap} from './parameters/parameters-map.interface';\n\nexport class NameGeneratorPart {\n private _type: NameGeneratorPartType;\n private _parameters: ParametersMap[T];\n\n public constructor(type: T, parameters: ParametersMap[T]) {\n this._type = type;\n this._parameters = parameters;\n }\n\n public get type(): NameGeneratorPartType {\n return this._type;\n }\n\n public get parameters(): ParametersMap[T] {\n return this._parameters;\n }\n\n public toJSON(): JSON {\n return {\n type: this._type,\n parameters: this._parameters\n } as any as JSON;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NameGeneratorPartType} from '@domain/name-generator/enums/name-generator-part-type.enum';\nimport {NameGenerationProperty} from '@domain/name-generator/name-generation-property';\nimport {NameGeneratorPart} from '@domain/name-generator/name-generator-part';\nimport {CustomTextParameters} from '@domain/name-generator/parameters/custom-text-parameters.interface';\nimport {EntityPropertyParameters} from '@domain/name-generator/parameters/entity-property-parameters.interface';\nimport {SerialNumberParameters} from '@domain/name-generator/parameters/serial-number-parameters.interface';\nimport {AssertionUtils, TranslateService} from '@vdw/angular-component-library';\nimport {getDisplayValueForPlaceholderSeparator} from '../get-display-value-for-placeholder-separator';\n\n@Injectable({providedIn: 'root'})\nexport class NameGeneratorPartService {\n public constructor(private readonly translate: TranslateService) {}\n\n public getPreviewText(nameGeneratorParts: NameGeneratorPart[], namePlaceholderSeparator: string): string {\n let nameGenerationPatternPreviewText: string[] = [];\n\n nameGeneratorParts?.forEach((nameGeneratorPart: NameGeneratorPart) => {\n let previewText = '';\n let previewTextsInBracket: (string | number)[];\n\n if (nameGeneratorPart.type === NameGeneratorPartType.CUSTOM_TEXT) {\n previewText = (nameGeneratorPart.parameters as CustomTextParameters).value ?? '';\n } else {\n if (nameGeneratorPart.type === NameGeneratorPartType.ENTITY_PROPERTY) {\n const parameters = nameGeneratorPart.parameters as EntityPropertyParameters;\n previewText = this.translate.instant(NameGenerationProperty.getTranslationKey(parameters.value), {count: 1}).replace(/\\s/g, '');\n previewTextsInBracket = [this.translate.instant(`GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.${parameters.cutFrom}`), parameters.startCharacter, parameters.length];\n } else {\n const parameters = nameGeneratorPart.parameters as SerialNumberParameters;\n previewText = this.translate.instant(NameGenerationProperty.getTranslationKey(nameGeneratorPart.type)).split(' ')[0];\n previewTextsInBracket = [parameters.length, parameters.startValue, parameters.stepSize];\n }\n previewTextsInBracket = previewTextsInBracket.filter((previewTextInBracket: string | number) => !AssertionUtils.isNullOrUndefined(previewTextInBracket) && previewTextInBracket !== '');\n }\n nameGenerationPatternPreviewText.push(previewText + (previewTextsInBracket?.length ? `(${previewTextsInBracket.join(',')})` : ''));\n });\n\n return nameGenerationPatternPreviewText.join(getDisplayValueForPlaceholderSeparator(namePlaceholderSeparator));\n }\n}\n","
\n \n \n \n
\n \n \n \n

{{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.NAME_GENERATION' | bmsTranslate }}

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

{{ 'GENERAL.PLACEHOLDER.PATTERN_NAME' | bmsTranslate }}

\n
\n \n \n
\n \n \n \n \n {{ getPatternName(nameGenerationProperty) }}\n \n \n \n \n \n \n
\n\n \n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.LABEL' | bmsTranslate }}\n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.CUT_FROM.' + cutFrom.value | bmsTranslate }}\n \n \n \n
\n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.START_CHARACTER' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }} \n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.LENGTH' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }} \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: '20'} }} \n \n
\n
\n\n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.VALUE' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }} \n {{ 'GENERAL.ERRORS.LENGTH_LIMIT' | bmsTranslate: {max: '20'} }}\n \n \n\n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.MAX_LENGTH' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }} \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: '5'} }} \n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.START_VALUE' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.LENGTH_LIMIT' | bmsTranslate: {max: pattern.value.serialNumber.maxLength ?? '5'} }}\n \n \n \n {{ 'GENERAL.PLACEHOLDER.PARAMETERS.STEP_SIZE' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }} \n \n \n
\n\n
\n \n
\n \n \n
\n \n \n \n
\n
\n
\n

{{ 'GENERAL.PREVIEW' | bmsTranslate }}

\n

{{ nameGenerationPatternPreviewText }}

\n
\n
\n \n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, ElementRef, Inject, OnInit, Renderer2, ViewChild} from '@angular/core';\nimport {FormArray, FormBuilder, FormControl, ValidationErrors, ValidatorFn, Validators} from '@angular/forms';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {NameGeneratorPartService} from '@application/helper/name-generator/name-generator-part.service';\nimport {NameGeneratorPartType} from '@domain/name-generator/enums/name-generator-part-type.enum';\nimport {NameGenerationProperty} from '@domain/name-generator/name-generation-property';\nimport {NameGeneratorPart} from '@domain/name-generator/name-generator-part';\nimport {CustomTextParameters} from '@domain/name-generator/parameters/custom-text-parameters.interface';\nimport {EntityPropertyParameters} from '@domain/name-generator/parameters/entity-property-parameters.interface';\nimport {SerialNumberParameters} from '@domain/name-generator/parameters/serial-number-parameters.interface';\nimport {SerialNumberType} from '@domain/name-generator/serial-number-type';\nimport {AssertionUtils, BaseComponent, FormValidationHelper, OverlayActionsService, OverlayComponentParamsAction, TranslateService} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {CutFrom} from '../../../../domain/name-generator/enums/cut-from.enum';\nimport {NameGenerationPatternForm} from './name-generation-pattern-form';\n\n@Component({\n templateUrl: './select-name-generation-pattern.component.html',\n styleUrls: ['./select-name-generation-pattern.component.scss']\n})\nexport class SelectNameGenerationPatternComponent extends BaseComponent implements OnInit {\n @ViewChild('container') public patternsContainer: ElementRef;\n\n public nameGenerationPatternForms: FormArray;\n public nameGenerationPatternPreviewText = '';\n public nameGenerationProperties: string[];\n public nameGeneratorPartType = NameGeneratorPartType;\n public cutFroms = CutFrom;\n public dragging = false;\n public readonly noDataOverlayActions: OverlayComponentParamsAction[];\n\n private nameGeneratorParts: NameGeneratorPart[];\n private namePlaceholderSeparator: string;\n private draggedIndex = -1;\n private dropIndicator: HTMLElement;\n private isOnBottomHalfOfRow = false;\n private dragPreviewElementDOMRect: DOMRect;\n private baseElementForDragPreview: HTMLElement;\n private dragPreviewElement: HTMLElement;\n private readonly CLASS_NAME_FOR_DROP_INDICATOR = 'drop-indicator';\n private readonly CLASS_NAME_FOR_PATTERN_ITEM = 'pattern-item';\n private readonly CLASS_NAME_FOR_DRAGGED_ELEMENT = 'dragging';\n private readonly ADD_NAME_PATTERN_ACTION_KEY = 'ADD_NAME_PATTERN';\n private readonly DRAG_PREVIEW_ELEMENT_WIDTH = 248;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly dialogRef: MatDialogRef,\n private readonly formBuilder: FormBuilder,\n private readonly nameGeneratorPartService: NameGeneratorPartService,\n private readonly overlayActionsService: OverlayActionsService,\n private readonly renderer: Renderer2,\n private readonly translate: TranslateService\n ) {\n super();\n\n this.nameGenerationProperties = data.nameGenerationProperties ? data.nameGenerationProperties.filter((property: string) => NameGenerationProperty.getTranslationKey(property)) : [];\n this.namePlaceholderSeparator = data.namePlaceholderSeparator;\n this.nameGeneratorParts = data.nameGeneratorParts ?? [];\n this.initialiseNameGenerationPatternForms();\n\n this.noDataOverlayActions = [\n {\n key: this.ADD_NAME_PATTERN_ACTION_KEY,\n titleKey: translate.instant('GENERAL.ACTIONS.ADD_OBJECT', {object: translate.instant('GENERAL.PLACEHOLDER.NAME_PATTERN', {count: 1})}),\n isPrimary: true\n }\n ];\n }\n\n public ngOnInit(): void {\n this.subscribeToOverlayActions();\n }\n\n public addPattern(): void {\n this.nameGenerationPatternForms.push(this.initialiseNameGenerationPatternForm());\n this.updatePropertyValueAndValidity();\n }\n\n public deletePattern(index: number): void {\n this.nameGenerationPatternForms.removeAt(index);\n this.updatePropertyValueAndValidity();\n }\n\n public getPatternName(nameGenerationProperty: string): string {\n const propertyTranslationKey = NameGenerationProperty.getTranslationKey(nameGenerationProperty);\n return propertyTranslationKey ? this.translate.instant(propertyTranslationKey, {count: 1}) : nameGenerationProperty;\n }\n\n public selectNameGenerationPattern(): void {\n const isValid = new FormValidationHelper().checkForms([...this.nameGenerationPatternForms.controls], this.document);\n\n if (isValid) {\n this.dialogRef.close(this.getCurrentNameGeneratorParts());\n }\n }\n\n public onDragOver(event: any, index: number): void {\n const target = event.target as HTMLElement;\n if (!target.classList.contains('pattern-item-container')) {\n return;\n }\n event.preventDefault();\n\n const draggedItemDifferentFromTargetItem = index !== this.draggedIndex;\n const isMouseOnBottomHalfOfTarget = this.isMouseOnBottomHalfOfRow(target.getBoundingClientRect(), event.y);\n const isMouseOnBottomHalfOfPreviousItem = isMouseOnBottomHalfOfTarget && index === this.draggedIndex - 1;\n const isMouseOnTopHalfOfNextItem = !isMouseOnBottomHalfOfTarget && index === this.draggedIndex + 1;\n\n if (draggedItemDifferentFromTargetItem && !isMouseOnBottomHalfOfPreviousItem && !isMouseOnTopHalfOfNextItem) {\n this.addDropIndicator(target, event.y);\n }\n }\n\n public onDraggedPatternLeavesPatternItem(event: any): void {\n event.preventDefault();\n\n if (AssertionUtils.isNullOrUndefined(event.relatedTarget) || !(event.relatedTarget as HTMLElement).classList.contains(this.CLASS_NAME_FOR_PATTERN_ITEM)) {\n this.removeDropIndicator();\n }\n }\n\n public onDraggedPatternDroppedOnPatternItem(event: any, index: number): void {\n event.preventDefault();\n\n const currentNameGenerationPatternForm = this.nameGenerationPatternForms.at(this.draggedIndex);\n this.nameGenerationPatternForms.removeAt(this.draggedIndex);\n\n if (this.draggedIndex < index && !this.isOnBottomHalfOfRow) {\n index -= 1;\n }\n\n this.nameGenerationPatternForms.insert(index, currentNameGenerationPatternForm);\n this.updatePropertyValueAndValidity();\n }\n\n public onDragStart(event: DragEvent, baseElementForDragPreview: HTMLElement, containerElement: HTMLElement, index: number): void {\n this.dragPreviewElementDOMRect = this.createDragPreviewElement(event, baseElementForDragPreview, containerElement, index);\n this.baseElementForDragPreview = baseElementForDragPreview;\n\n this.renderer.setStyle(document.body, 'overflow', 'hidden');\n this.renderer.removeStyle(this.dragPreviewElement, 'max-width');\n this.renderer.removeStyle(this.dragPreviewElement, 'min-width');\n this.renderer.setStyle(baseElementForDragPreview, 'opacity', 0.5);\n this.renderer.setStyle(this.dragPreviewElement, 'width', `${this.DRAG_PREVIEW_ELEMENT_WIDTH}px`);\n this.renderer.appendChild(document.body, this.dragPreviewElement);\n this.draggedIndex = index;\n\n event.stopPropagation();\n }\n\n public onDragEnd(): void {\n this.removeDragPreviewElement();\n this.removeDropIndicator();\n this.renderer.setStyle(this.baseElementForDragPreview, 'opacity', 1);\n this.renderer.setStyle(document.body, 'overflow', 'auto');\n this.dragging = false;\n }\n\n public onDrag(event: DragEvent): void {\n this.dragging = true;\n if (event.screenX !== 0 && event.screenY !== 0) {\n this.renderer.setStyle(this.dragPreviewElement, 'transform', `translate3d(${event.x + 5}px, ${event.y - this.dragPreviewElementDOMRect.height / 2}px, 0)`);\n }\n }\n\n private isMouseOnBottomHalfOfRow(patternItemElementBoundingDOMRect: DOMRect, mouseYPosition: number): boolean {\n return mouseYPosition > patternItemElementBoundingDOMRect.top + patternItemElementBoundingDOMRect.height / 2;\n }\n\n private addDropIndicator(element: HTMLElement, eventY: number): void {\n if (AssertionUtils.isNullOrUndefined(this.dropIndicator)) {\n this.dropIndicator = this.renderer.createElement('hr');\n this.renderer.addClass(this.dropIndicator, this.CLASS_NAME_FOR_DROP_INDICATOR);\n this.renderer.appendChild(this.patternsContainer.nativeElement, this.dropIndicator);\n }\n\n const elementBoundingDOMRect = element.getBoundingClientRect();\n this.isOnBottomHalfOfRow = this.isMouseOnBottomHalfOfRow(elementBoundingDOMRect, eventY);\n\n const width = elementBoundingDOMRect.width;\n const yPosition = this.isOnBottomHalfOfRow ? elementBoundingDOMRect.y + elementBoundingDOMRect.height : elementBoundingDOMRect.y;\n\n this.renderer.setStyle(this.dropIndicator, 'width', `${width}px`);\n this.renderer.setStyle(this.dropIndicator, 'transform', `translate3d(${elementBoundingDOMRect.x}px, ${yPosition}px, 0)`);\n }\n\n private removeDropIndicator(): void {\n if (this.dropIndicator != null) {\n this.renderer.removeChild(document.body, this.dropIndicator);\n this.dropIndicator = null;\n }\n }\n\n private createDragPreviewElement(event: any, baseElementForDragPreview: HTMLElement, containerElement: HTMLElement, index: number): DOMRect {\n const dragPreviewElementDOMRect = baseElementForDragPreview.getBoundingClientRect();\n this.dragPreviewElement = baseElementForDragPreview.cloneNode(true) as HTMLElement;\n\n const dragIcon = this.dragPreviewElement.querySelector('mat-icon');\n this.dragPreviewElement.replaceChildren(dragIcon);\n\n this.renderer.addClass(this.dragPreviewElement, 'pattern-drag-preview');\n this.renderer.addClass(containerElement, this.CLASS_NAME_FOR_DRAGGED_ELEMENT);\n this.renderer.setStyle(this.dragPreviewElement, 'transform', `translate3d(${dragPreviewElementDOMRect.left}px, -${dragPreviewElementDOMRect.height}px, 0)`);\n\n const dragPreviewTextElement = this.document.createElement('div');\n\n dragPreviewTextElement.style.paddingLeft = '12px';\n this.renderer.addClass(this.dragPreviewElement, 'b1');\n dragPreviewTextElement.textContent = this.getPatternName(this.nameGenerationPatternForms.controls[index].value.property);\n this.dragPreviewElement.appendChild(dragPreviewTextElement);\n\n const dummyPreview = document.createElement('div');\n this.renderer.setStyle(dummyPreview, 'display', `none`);\n event.dataTransfer.setDragImage(dummyPreview, 0, 0);\n\n return dragPreviewElementDOMRect;\n }\n\n private removeDragPreviewElement(): void {\n if (this.dragPreviewElement != null) {\n this.renderer.removeChild(this.dragPreviewElement.parentElement, this.dragPreviewElement);\n this.renderer.removeClass(document.querySelector(`.${this.CLASS_NAME_FOR_DRAGGED_ELEMENT}`), this.CLASS_NAME_FOR_DRAGGED_ELEMENT);\n this.dragPreviewElement = null;\n }\n }\n\n private initialiseNameGenerationPatternForms(): void {\n this.nameGenerationPatternPreviewText = this.nameGeneratorPartService.getPreviewText(this.nameGeneratorParts, this.namePlaceholderSeparator);\n this.nameGenerationPatternForms = this.formBuilder.array([\n ...this.nameGeneratorParts.map((nameGeneratorPart: NameGeneratorPart) => this.initialiseNameGenerationPatternForm(nameGeneratorPart))\n ]);\n this.nameGenerationPatternForms.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.nameGenerationPatternPreviewText = this.nameGeneratorPartService.getPreviewText(this.getCurrentNameGeneratorParts(), this.namePlaceholderSeparator);\n });\n }\n\n private subscribeToOverlayActions(): void {\n this.overlayActionsService.actionTriggeredEmitter.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((actionKey: string) => {\n if (actionKey === this.noDataOverlayActions[0].key) {\n this.addPattern();\n }\n });\n }\n\n private initialiseNameGenerationPatternForm(nameGeneratorPart?: NameGeneratorPart): NameGenerationPatternForm {\n const nameGenerationPatternForm = this.formBuilder.group({\n property: new FormControl(NameGeneratorPartType.CUSTOM_TEXT),\n entityProperty: this.formBuilder.group({\n cutFrom: new FormControl(CutFrom.NONE),\n startCharacter: new FormControl(null, Validators.min(1)),\n length: new FormControl(null, [Validators.min(1), Validators.max(20)])\n }),\n customText: this.formBuilder.group({\n value: new FormControl(null, [Validators.required, Validators.maxLength(20)])\n }),\n serialNumber: this.formBuilder.group({\n maxLength: new FormControl(null, [Validators.min(1), Validators.max(5)]),\n startValue: new FormControl(null, Validators.maxLength(5)),\n stepSize: new FormControl(null, Validators.min(1))\n })\n }) as NameGenerationPatternForm;\n\n if (nameGeneratorPart) {\n if (nameGeneratorPart.type === NameGeneratorPartType.ENTITY_PROPERTY) {\n const parameters = nameGeneratorPart.parameters as EntityPropertyParameters;\n nameGenerationPatternForm.patchValue({property: parameters.value, entityProperty: {cutFrom: parameters.cutFrom, startCharacter: parameters.startCharacter, length: parameters.length}});\n } else if (nameGeneratorPart.type === NameGeneratorPartType.CUSTOM_TEXT) {\n nameGenerationPatternForm.controls.customText.patchValue({value: (nameGeneratorPart.parameters as CustomTextParameters).value});\n } else {\n const parameters = nameGeneratorPart.parameters as SerialNumberParameters;\n nameGenerationPatternForm.patchValue({property: nameGeneratorPart.type, serialNumber: {maxLength: parameters.length, startValue: parameters.startValue, stepSize: parameters.stepSize}});\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.setValidators(Validators.maxLength(parameters.length ?? 5));\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.updateValueAndValidity({emitEvent: false});\n }\n }\n\n nameGenerationPatternForm.controls.property.addValidators(this.serialNumberNotInMiddleValidator(nameGenerationPatternForm));\n nameGenerationPatternForm.controls.property.updateValueAndValidity({emitEvent: false});\n\n this.subscribeToValueChanges(nameGenerationPatternForm);\n this.updateFormControlDisabledState(nameGenerationPatternForm, nameGenerationPatternForm.value.property);\n\n return nameGenerationPatternForm;\n }\n\n private subscribeToValueChanges(nameGenerationPatternForm: NameGenerationPatternForm): void {\n nameGenerationPatternForm.controls.property.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((property: string) => {\n nameGenerationPatternForm.reset({property: property, entityProperty: {cutFrom: CutFrom.NONE}}, {emitEvent: false});\n this.updateFormControlDisabledState(nameGenerationPatternForm, property);\n });\n\n nameGenerationPatternForm.controls.entityProperty.controls.cutFrom.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((cutFrom: CutFrom) => {\n if (cutFrom === CutFrom.NONE) {\n nameGenerationPatternForm.controls.entityProperty.controls.startCharacter.disable({emitEvent: false});\n nameGenerationPatternForm.controls.entityProperty.controls.length.disable({emitEvent: false});\n } else {\n nameGenerationPatternForm.controls.entityProperty.controls.startCharacter.enable({emitEvent: false});\n nameGenerationPatternForm.controls.entityProperty.controls.length.enable({emitEvent: false});\n }\n });\n\n nameGenerationPatternForm.controls.serialNumber.controls.maxLength.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((maxLength: number) => {\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.setValidators(Validators.maxLength(maxLength ?? 5));\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.updateValueAndValidity({emitEvent: false});\n });\n\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: string) => {\n const searchValue = nameGenerationPatternForm.value.property === NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER ? /[^A-Za-z]/g : /\\D/g;\n nameGenerationPatternForm.controls.serialNumber.controls.startValue.patchValue(value.replace(searchValue, '').toUpperCase(), {emitEvent: false});\n });\n }\n\n private updateFormControlDisabledState(nameGenerationPatternForm: NameGenerationPatternForm, property: string): void {\n if (NameGeneratorPartType[property] === undefined) {\n nameGenerationPatternForm.controls.entityProperty.enable({emitEvent: false});\n nameGenerationPatternForm.controls.customText.disable({emitEvent: false});\n nameGenerationPatternForm.controls.serialNumber.disable({emitEvent: false});\n } else if (NameGeneratorPartType[property] === NameGeneratorPartType.CUSTOM_TEXT) {\n nameGenerationPatternForm.controls.entityProperty.disable({emitEvent: false});\n nameGenerationPatternForm.controls.customText.enable({emitEvent: false});\n nameGenerationPatternForm.controls.serialNumber.disable({emitEvent: false});\n } else {\n nameGenerationPatternForm.controls.entityProperty.disable({emitEvent: false});\n nameGenerationPatternForm.controls.customText.disable({emitEvent: false});\n nameGenerationPatternForm.controls.serialNumber.enable({emitEvent: false});\n }\n }\n\n private serialNumberNotInMiddleValidator(nameGenerationPatternForm: NameGenerationPatternForm): ValidatorFn {\n return (property: FormControl): ValidationErrors | null => {\n if (property.value !== NameGeneratorPartType.ALPHABETIC_SERIAL_NUMBER && property.value !== NameGeneratorPartType.NUMERIC_SERIAL_NUMBER) {\n return null;\n }\n const index = this.nameGenerationPatternForms?.controls.findIndex((form: NameGenerationPatternForm) => form === nameGenerationPatternForm);\n return index !== 0 && index !== this.nameGenerationPatternForms?.length - 1 ? {serialNumberInMiddle: true} : null;\n };\n }\n\n private updatePropertyValueAndValidity(): void {\n this.nameGenerationPatternForms.controls.forEach((nameGenerationPatternForm: NameGenerationPatternForm) => {\n nameGenerationPatternForm.controls.property.updateValueAndValidity({emitEvent: false});\n });\n }\n\n private getCurrentNameGeneratorParts(): NameGeneratorPart[] {\n return this.nameGenerationPatternForms.controls.map((patternForm: NameGenerationPatternForm) => {\n if (NameGeneratorPartType[patternForm.value.property] === undefined) {\n return new NameGeneratorPart(NameGeneratorPartType.ENTITY_PROPERTY, {\n value: patternForm.value.property,\n cutFrom: patternForm.value.entityProperty.cutFrom,\n startCharacter: patternForm.value.entityProperty.startCharacter,\n length: patternForm.value.entityProperty.length\n });\n } else if (NameGeneratorPartType[patternForm.value.property] === NameGeneratorPartType.CUSTOM_TEXT) {\n return new NameGeneratorPart(NameGeneratorPartType.CUSTOM_TEXT, {value: patternForm.value.customText.value});\n } else {\n return new NameGeneratorPart(NameGeneratorPartType[patternForm.value.property], {\n length: patternForm.value.serialNumber.maxLength,\n startValue: patternForm.value.serialNumber.startValue,\n stepSize: patternForm.value.serialNumber.stepSize\n });\n }\n });\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {FormControl} from '@angular/forms';\nimport {NameGeneratorPartService} from '@application/helper/name-generator/name-generator-part.service';\nimport {NameGeneratorPartType} from '@domain/name-generator/enums/name-generator-part-type.enum';\nimport {NameGeneratorPart} from '@domain/name-generator/name-generator-part';\nimport {BaseComponent, DialogBuilderFactoryService} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {SelectNameGenerationPatternComponent} from './select-name-generation-pattern/select-name-generation-pattern.component';\n\n@Component({\n selector: 'app-name-generation-pattern',\n templateUrl: './name-generation-pattern.component.html'\n})\nexport class NameGenerationPatternComponent extends BaseComponent implements OnChanges {\n @Input() public nameGenerationProperties: string[];\n @Input() public namePlaceholderSeparator: string;\n @Input() public nameGeneratorParts: NameGeneratorPart[];\n @Output() public nameGeneratorPartsChange = new EventEmitter[]>();\n\n public nameGenerationPattern: FormControl;\n\n public constructor(\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly nameGeneratorPartService: NameGeneratorPartService\n ) {\n super();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('namePlaceholderSeparator' in changes || 'nameGeneratorParts' in changes) {\n if (this.nameGenerationPattern) {\n this.nameGenerationPattern.patchValue(this.nameGeneratorPartService.getPreviewText(this.nameGeneratorParts, this.namePlaceholderSeparator));\n } else {\n this.nameGenerationPattern = new FormControl(this.nameGeneratorPartService.getPreviewText(this.nameGeneratorParts, this.namePlaceholderSeparator));\n }\n }\n }\n\n public selectNameGenerationPattern(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('change-placeholder-parts')\n .withWidth('1200px')\n .withHeight('90vh')\n .withMaxHeight('688px')\n .openDialog(SelectNameGenerationPatternComponent, {\n nameGenerationProperties: this.nameGenerationProperties,\n namePlaceholderSeparator: this.namePlaceholderSeparator,\n nameGeneratorParts: this.nameGeneratorParts\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((nameGeneratorParts: NameGeneratorPart[]) => {\n if (nameGeneratorParts) {\n this.nameGenerationPattern.patchValue(this.nameGeneratorPartService.getPreviewText(nameGeneratorParts, this.namePlaceholderSeparator));\n this.nameGeneratorPartsChange.emit(nameGeneratorParts);\n }\n });\n }\n\n public clearNameGenerationPattern(): void {\n this.nameGenerationPattern.patchValue(null);\n this.nameGeneratorPartsChange.emit([]);\n }\n}\n","\n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.NAME_GENERATION' | bmsTranslate }}\n \n\n","export enum OnboardingPlanningStep {\n TOUR = 'TOUR',\n ADD_ITEM = 'ADD_ITEM',\n VIEW_DETAILS = 'VIEW_DETAILS',\n DRAG_AND_DROP = 'DRAG_AND_DROP'\n}\n","export enum OnboardingType {\n NAVIGATION = 'NAVIGATION',\n TEXSTATE = 'TEXSTATE',\n PLANNING = 'PLANNING'\n}\n","
\r\n \r\n\r\n @if (missingDesign) {\r\n \r\n } @else if (!canBePlanned) {\r\n \r\n }\r\n
\r\n","import {Component} from '@angular/core';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {TagColor} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n selector: 'app-grid-order-line-status',\n templateUrl: './grid-order-line-status.component.html',\n styleUrls: ['./grid-order-line-status.component.scss']\n})\nexport class GridOrderLineStatusComponent implements ICellRendererAngularComp {\n public statusLabel: string;\n public canBePlanned: boolean;\n public missingDesign: boolean;\n\n private readonly colorForStatus = {\n [OrderLineStatus.TO_PLAN]: TagColor.PRIMARY,\n [OrderLineStatus.PLANNED]: TagColor.SUCCESS,\n [OrderLineStatus.PRODUCED]: TagColor.SUCCESS,\n [OrderLineStatus.PARTIALLY_PLANNED]: TagColor.WARNING\n };\n\n public agInit(params: ICellRendererParams): void {\n this.statusLabel = OrderLineStatus[params.value];\n this.canBePlanned = params.data.canBePlanned;\n this.missingDesign = params.data.missingDesign;\n }\n\n public refresh(): boolean {\n return false;\n }\n\n public getColor(): TagColor {\n return this.colorForStatus[OrderLineStatus[this.statusLabel]];\n }\n}\n","import {AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, Input, OnDestroy, ViewChild} from '@angular/core';\nimport SvgPanZoom from 'svg-pan-zoom';\n\n@Component({\n selector: 'app-pannable-and-zoomable-pattern-preview',\n templateUrl: './pannable-and-zoomable-pattern-preview.component.html',\n styleUrls: ['./pannable-and-zoomable-pattern-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PannableAndZoomablePatternPreviewComponent implements AfterViewInit, OnDestroy {\n @Input() public svg: string;\n @ViewChild('pannableAndZoomableContainer') public pannableAndZoomableContainer: ElementRef;\n\n private svgPanZoomInstance: typeof SvgPanZoom;\n\n public ngAfterViewInit(): void {\n this.svgPanZoomInstance = SvgPanZoom(this.pannableAndZoomableContainer.nativeElement.firstElementChild as SVGElement, {\n minZoom: 0.25,\n maxZoom: 10,\n zoomScaleSensitivity: 0.6,\n beforePan: (previousPosition: {x: number; y: number}, {x, y}: {x: number; y: number}) => {\n this.svgPanZoomInstance.updateBBox();\n const sizes = this.svgPanZoomInstance.getSizes() as any;\n\n const width = sizes.viewBox.width * sizes.realZoom;\n const height = sizes.viewBox.height * sizes.realZoom;\n const offsetX = -sizes.viewBox.x * sizes.realZoom;\n const offsetY = -sizes.viewBox.y * sizes.realZoom;\n const viewportWidthBiggerThanViewBoxWidth = sizes.width > width;\n const viewportHeightBiggerThanViewBoxHeight = sizes.height > height;\n\n const minX = viewportWidthBiggerThanViewBoxWidth ? offsetX : sizes.width - width + offsetX;\n const maxX = viewportWidthBiggerThanViewBoxWidth ? sizes.width - width + offsetX : offsetX;\n\n const minY = viewportHeightBiggerThanViewBoxHeight ? offsetY : sizes.height - height + offsetY;\n const maxY = viewportHeightBiggerThanViewBoxHeight ? sizes.height - height + offsetY : offsetY;\n\n return {\n x: Math.max(minX, Math.min(x, maxX)),\n y: Math.max(minY, Math.min(y, maxY))\n };\n }\n });\n }\n\n public resetPanAndZoom(): void {\n this.svgPanZoomInstance.reset();\n }\n\n public ngOnDestroy(): void {\n this.svgPanZoomInstance.destroy();\n }\n}\n","
\n\n","import {DOCUMENT} from '@angular/common';\nimport {Directive, ElementRef, Inject, Input, OnChanges, Renderer2} from '@angular/core';\n\n@Directive({\n selector: '[appThumbnailSvgLoader]'\n})\nexport class ThumbnailSvgLoaderDirective implements OnChanges {\n @Input() public appThumbnailSvgLoader: string;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly element: ElementRef,\n private renderer: Renderer2\n ) {}\n\n public ngOnChanges(): void {\n if (this.appThumbnailSvgLoader) {\n const parser = new DOMParser();\n const svgDocument = parser.parseFromString(this.appThumbnailSvgLoader, 'image/svg+xml');\n\n if (svgDocument.documentElement.hasChildNodes()) {\n const svg = this.document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n\n let elementToAppend: Element = svgDocument.querySelector('text')?.previousElementSibling;\n\n while (elementToAppend) {\n const previousElementSibling = elementToAppend.previousElementSibling;\n\n svg.prepend(elementToAppend);\n\n elementToAppend = previousElementSibling;\n }\n\n this.renderer.setAttribute(svg, 'width', '100%');\n this.renderer.addClass(svg, svgDocument.firstElementChild.classList.value);\n this.renderer.appendChild(this.element.nativeElement, svg);\n\n const svgBBox = svg.getBBox();\n const size = Math.max(svgBBox.width, svgBBox.height);\n const minXPosition = svgBBox.x - (size - svgBBox.width) / 2;\n const minYPosition = svgBBox.y - (size - svgBBox.height) / 2;\n\n this.renderer.setAttribute(svg, 'viewBox', `${minXPosition} ${minYPosition} ${size} ${size}`);\n }\n }\n }\n}\n","\n
\n \n
\n
\n \n
\n
\n\n
\n
\n\n\n \n\n","import {ChangeDetectionStrategy, Component, Input} from '@angular/core';\nimport {PatternVisualisation} from '@domain/pattern-visualisation';\nimport {PatternVisualisationType} from '@domain/pattern-visualisation-type.enum';\n\n@Component({\n selector: 'app-pattern-preview',\n templateUrl: './pattern-preview.component.html',\n styleUrls: ['./pattern-preview.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class PatternPreviewComponent {\n public patternVisualisationType = PatternVisualisationType;\n\n @Input() public set patternVisualisation(patternVisualisation: PatternVisualisation) {\n if (patternVisualisation) {\n this._patternVisualisation = patternVisualisation;\n }\n }\n\n public get patternVisualisation(): PatternVisualisation {\n return this._patternVisualisation;\n }\n\n @Input() public viewMode: 'full' | 'thumbnail';\n\n private _patternVisualisation: PatternVisualisation;\n\n public getPatternVisualisationRepresentation(): string {\n if (this.patternVisualisation.type === PatternVisualisationType.COLOR) {\n return `rgb(${this.patternVisualisation['rgb'].red},${this.patternVisualisation['rgb'].green},${this.patternVisualisation['rgb'].blue})`;\n }\n\n return `url(${this.patternVisualisation['image']})`;\n }\n\n public isThumbnailViewMode(): boolean {\n return this.viewMode === 'thumbnail';\n }\n}\n","import {Directive, ElementRef, Input, OnChanges} from '@angular/core';\n\n@Directive({\n selector: '[appSvgLoader]'\n})\nexport class SvgLoaderDirective implements OnChanges {\n @Input() public appSvgLoader: string;\n private element: ElementRef;\n\n public constructor(element: ElementRef) {\n this.element = element;\n }\n\n public ngOnChanges(values: any): void {\n if (values.appSvgLoader.currentValue) {\n this.element.nativeElement.innerHTML = values.appSvgLoader.currentValue;\n }\n }\n}\n","
\n \n \n
\n","import {AfterViewInit, ChangeDetectorRef, Component, ComponentRef, ElementRef, HostListener, Inject, NgZone, OnDestroy, OnInit, ViewChild, ViewContainerRef} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {AssertionUtils, BaseComponent, WINDOW} from '@vdw/angular-component-library';\nimport {Subject} from 'rxjs';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\nimport {RepositionDialogData} from './reposition-dialog-data.interface';\n\n@Component({\n selector: 'app-reposition-dialog',\n templateUrl: './reposition-dialog.component.html',\n styleUrls: ['./reposition-dialog.component.scss']\n})\nexport class RepositionDialogComponent extends BaseComponent implements OnInit, AfterViewInit, OnDestroy {\n private static readonly ARROW_SIZE = 24;\n private static readonly ARROW_MARGIN = 16;\n private static readonly ARROW_PADDING = 4;\n private static readonly DEFAULT_ARROW_OFFSET = 22;\n private static readonly DEFAULT_LEFT_ARROW_OFFSET = 18;\n private static readonly DIALOG_MARGIN = 16;\n\n public arrowPositionTop: number;\n public arrowPositionLeft: number;\n public componentRef: ComponentRef;\n\n private startLeft: number;\n private startTop: number;\n\n @ViewChild('rootElement', {static: true}) private rootElement: ElementRef;\n @ViewChild('container', {read: ViewContainerRef, static: true}) private container: ViewContainerRef;\n\n private readonly component: any;\n private dialogElementRef: HTMLElement;\n private readonly sourceElement: Element;\n private positionOfDialog: PositionOfDialog = PositionOfDialog.LEFT;\n private readonly windowResizeSubject = new Subject();\n private windowDimensions: DimensionsInPx;\n private hasResizedDialog: boolean;\n private showArrow = true;\n private moveWithCursor = false;\n private readonly verticalOffset: number;\n private readonly horizontalOffset: number;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: RepositionDialogData,\n private readonly dialogRef: MatDialogRef,\n private readonly changeDetectorRef: ChangeDetectorRef,\n @Inject(WINDOW) private readonly window: Window,\n private readonly ngZone: NgZone\n ) {\n super();\n this.component = data.component;\n this.sourceElement = data.sourceElement;\n\n if (!AssertionUtils.isNullOrUndefined(data.positionOfDialog)) {\n this.positionOfDialog = data.positionOfDialog;\n }\n\n this.showArrow = data.showArrow ?? this.showArrow;\n this.moveWithCursor = data.moveWithCursor ?? this.moveWithCursor;\n\n if (this.moveWithCursor) {\n this.ngZone.runOutsideAngular(() => this.sourceElement?.addEventListener('mousemove', this.mouseMoved));\n this.ngZone.runOutsideAngular(() => this.sourceElement?.addEventListener('mouseleave', this.close));\n }\n\n const showArrow = !AssertionUtils.isNullOrUndefined(data?.showArrow) && !data.showArrow;\n\n this.verticalOffset = data.verticalOffset ?? RepositionDialogComponent.ARROW_MARGIN;\n this.horizontalOffset = showArrow ? 8 + (data?.horizontalOffset ?? 0) : RepositionDialogComponent.DEFAULT_LEFT_ARROW_OFFSET + (data?.horizontalOffset ?? 0);\n\n this.dialogRef = dialogRef;\n }\n\n private static isDialogOverflowingLeftEdgeOfWindow(dialogLeft: number): boolean {\n return dialogLeft < RepositionDialogComponent.getMinimumDialogPosition();\n }\n\n private static getMinimumDialogPosition(): number {\n return RepositionDialogComponent.DIALOG_MARGIN;\n }\n\n @HostListener('window:resize')\n public onResize(): void {\n this.windowDimensions = {widthInPx: this.window.innerWidth, heightInPx: this.window.innerHeight};\n this.windowResizeSubject.next();\n }\n\n public ngOnInit(): void {\n this.addComponent();\n\n if (!this.moveWithCursor) {\n this.initializeDialogPositioning();\n return;\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.data.event)) {\n this.dialogRef.updatePosition({left: `${this.data.event.x + this.horizontalOffset / 2}px`, top: `${this.data.event.y + this.verticalOffset / 2}px`});\n }\n }\n\n public ngAfterViewInit(): void {\n if (!this.moveWithCursor) {\n this.repositionDialog();\n return;\n }\n\n this.dialogElementRef = this.rootElement.nativeElement;\n\n const sourceRect = this.sourceElement.getBoundingClientRect();\n const dialogRect = this.dialogElementRef.getBoundingClientRect();\n\n this.dialogElementRef.style.position = 'absolute';\n this.dialogElementRef.style.pointerEvents = 'none';\n\n this.startLeft = sourceRect.left - dialogRect.left + this.horizontalOffset;\n this.startTop = sourceRect.top - dialogRect.top + this.verticalOffset;\n\n if (!AssertionUtils.isNullOrUndefined(this.data.event)) {\n this.dialogElementRef.style.top = `${this.startTop + this.data.event.offsetY}px`;\n this.dialogElementRef.style.left = `${this.startLeft + this.data.event.offsetX}px`;\n }\n }\n\n public ngOnDestroy(): void {\n if (!AssertionUtils.isEmpty(this.sourceElement.eventListeners('mousemove'))) {\n this.ngZone.runOutsideAngular(() => this.sourceElement?.removeEventListener('mousemove', this.mouseMoved));\n }\n\n if (!AssertionUtils.isEmpty(this.sourceElement.eventListeners('mouseleave'))) {\n this.ngZone.runOutsideAngular(() => this.sourceElement?.removeEventListener('mouseleave', this.close));\n }\n }\n\n public canShowArrow(): boolean {\n if (!this.showArrow) {\n return this.showArrow;\n }\n\n if (this.positionOfDialog === PositionOfDialog.LEFT || this.positionOfDialog === PositionOfDialog.RIGHT) {\n return this.arrowPositionTop + RepositionDialogComponent.ARROW_SIZE < this.rootElement.nativeElement.clientTop + this.rootElement.nativeElement.clientHeight;\n }\n if (this.positionOfDialog === PositionOfDialog.TOP || this.positionOfDialog === PositionOfDialog.BOTTOM) {\n return this.arrowPositionLeft + RepositionDialogComponent.ARROW_SIZE < this.rootElement.nativeElement.clientLeft + this.rootElement.nativeElement.clientWidth;\n }\n\n return true;\n }\n\n public isArrowPositionedAtTop(): boolean {\n return this.positionOfDialog === PositionOfDialog.BOTTOM;\n }\n\n public isArrowPositionedAtBottom(): boolean {\n return this.positionOfDialog === PositionOfDialog.TOP;\n }\n\n public isArrowPositionedAtRight(): boolean {\n return this.positionOfDialog === PositionOfDialog.LEFT;\n }\n\n public isArrowPositionedAtLeft(): boolean {\n return this.positionOfDialog === PositionOfDialog.RIGHT;\n }\n\n public emitRepositionDialogEvent(): void {\n this.windowResizeSubject.next();\n }\n\n public repositionDialog(): void {\n let dialogWidth = parseInt(this.rootElement.nativeElement.clientWidth, 10);\n let dialogHeight: number = this.rootElement.nativeElement.clientHeight;\n\n const sourceRect = this.sourceElement.getBoundingClientRect();\n let dialogLeft = this.calculateDialogPositionLeft(dialogWidth, sourceRect);\n let dialogTop = this.calculateDialogPositionTop(dialogHeight, sourceRect);\n\n if (this.isDialogOverflowing(dialogLeft, dialogTop, dialogWidth, dialogHeight)) {\n [dialogLeft, dialogWidth] = this.repositionDialogHorizontally(dialogLeft, dialogWidth);\n [dialogTop, dialogHeight] = this.repositionDialogVertically(dialogTop, dialogHeight);\n } else if (this.hasResizedDialog) {\n this.dialogRef.updateSize(`${dialogWidth}px`, `${dialogHeight}px`);\n }\n\n this.arrowPositionTop = this.calculateArrowPositionTop(dialogHeight, dialogTop, sourceRect);\n this.arrowPositionLeft = this.calculateArrowPositionLeft(dialogWidth, dialogLeft, sourceRect);\n\n this.dialogRef.updatePosition({left: `${dialogLeft}px`, top: `${dialogTop}px`});\n\n this.changeDetectorRef.detectChanges();\n }\n\n public mouseMoved = (event: MouseEvent): void => {\n event.stopPropagation();\n event.preventDefault();\n\n if (AssertionUtils.isNullOrUndefined(this.dialogElementRef) || AssertionUtils.isNullOrUndefined(this.rootElement)) {\n return;\n }\n\n this.positionOfDialog = event.clientX + this.horizontalOffset + parseInt(this.rootElement.nativeElement.clientWidth, 10) >= this.window.innerWidth ? PositionOfDialog.LEFT : PositionOfDialog.RIGHT;\n\n this.dialogElementRef.style.top = `${this.startTop + event.offsetY}px`;\n\n if (this.positionOfDialog === PositionOfDialog.RIGHT) {\n this.dialogElementRef.style.left = `${this.startLeft + event.offsetX}px`;\n } else {\n this.dialogElementRef.style.left = `${this.startLeft + event.offsetX - parseInt(this.rootElement.nativeElement.clientWidth, 10) - this.horizontalOffset}px`;\n }\n };\n\n private addComponent(): void {\n this.componentRef = this.container.createComponent(this.component);\n }\n\n private initializeDialogPositioning(): void {\n this.windowDimensions = {widthInPx: this.window.innerWidth, heightInPx: this.window.innerHeight};\n this.windowResizeSubject\n .asObservable()\n .pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.repositionDialog());\n\n this.repositionDialog();\n }\n\n private calculateDialogPositionLeft(dialogWidth: number, sourceRect: DOMRect): number {\n let dialogLeft: number;\n switch (this.positionOfDialog) {\n case PositionOfDialog.TOP:\n case PositionOfDialog.BOTTOM:\n const sourceElementHorizontalCenter = sourceRect.left + sourceRect.width / 2;\n const arrowPositionRight = sourceElementHorizontalCenter + RepositionDialogComponent.ARROW_SIZE / 2;\n dialogLeft = arrowPositionRight - dialogWidth + this.horizontalOffset;\n break;\n case PositionOfDialog.LEFT:\n dialogLeft = sourceRect.left - dialogWidth - this.horizontalOffset;\n if (RepositionDialogComponent.isDialogOverflowingLeftEdgeOfWindow(dialogLeft) || this.isDialogOverflowingRightEdgeOfWindow(dialogLeft, dialogWidth)) {\n this.positionOfDialog = PositionOfDialog.RIGHT;\n dialogLeft = sourceRect.right + this.verticalOffset;\n if (RepositionDialogComponent.isDialogOverflowingLeftEdgeOfWindow(dialogLeft) || this.isDialogOverflowingRightEdgeOfWindow(dialogLeft, dialogWidth)) {\n this.positionOfDialog = PositionOfDialog.LEFT;\n dialogLeft = sourceRect.left - dialogWidth - this.horizontalOffset;\n }\n }\n break;\n case PositionOfDialog.RIGHT:\n dialogLeft = sourceRect.right + this.horizontalOffset;\n if (RepositionDialogComponent.isDialogOverflowingLeftEdgeOfWindow(dialogLeft) || this.isDialogOverflowingRightEdgeOfWindow(dialogLeft, dialogWidth)) {\n this.positionOfDialog = PositionOfDialog.LEFT;\n dialogLeft = sourceRect.left - dialogWidth - this.horizontalOffset;\n }\n break;\n }\n return dialogLeft;\n }\n\n private canShiftDialogHorizontally(): boolean {\n return this.positionOfDialog === PositionOfDialog.TOP || this.positionOfDialog === PositionOfDialog.BOTTOM;\n }\n\n private canShiftDialogVertically(): boolean {\n return this.positionOfDialog === PositionOfDialog.LEFT || this.positionOfDialog === PositionOfDialog.RIGHT;\n }\n\n private isDialogOverflowingRightEdgeOfWindow(dialogLeft: number, dialogWidth: number): boolean {\n return dialogLeft + dialogWidth > this.getMaximumDialogPositionRight();\n }\n\n private getMaximumDialogPositionRight(): number {\n return this.windowDimensions.widthInPx - RepositionDialogComponent.DIALOG_MARGIN;\n }\n\n private calculateDialogPositionTop(dialogHeight: number, sourceRect: DOMRect): number {\n let dialogTop: number;\n switch (this.positionOfDialog) {\n case PositionOfDialog.TOP:\n dialogTop = sourceRect.top - dialogHeight - this.verticalOffset;\n if (this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight) || this.isDialogOverflowingTopEdgeOfWindow(dialogTop)) {\n this.positionOfDialog = PositionOfDialog.BOTTOM;\n dialogTop = sourceRect.bottom + this.verticalOffset;\n if (this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight) || this.isDialogOverflowingTopEdgeOfWindow(dialogTop)) {\n this.positionOfDialog = PositionOfDialog.TOP;\n dialogTop = sourceRect.top - dialogHeight - this.verticalOffset;\n }\n }\n break;\n case PositionOfDialog.BOTTOM:\n dialogTop = sourceRect.bottom + this.verticalOffset;\n if (this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight) || this.isDialogOverflowingTopEdgeOfWindow(dialogTop)) {\n this.positionOfDialog = PositionOfDialog.TOP;\n dialogTop = sourceRect.top - dialogHeight - this.verticalOffset;\n }\n break;\n case PositionOfDialog.LEFT:\n case PositionOfDialog.RIGHT:\n const sourceElementVerticalCenter = sourceRect.top + sourceRect.height / 2;\n const arrowPositionTop = sourceElementVerticalCenter - RepositionDialogComponent.ARROW_SIZE / 2;\n dialogTop = arrowPositionTop - RepositionDialogComponent.DEFAULT_ARROW_OFFSET;\n if (this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight)) {\n dialogTop = this.getMaximumDialogPositionBottom() - dialogHeight;\n }\n\n break;\n }\n\n return dialogTop;\n }\n\n private isDialogOverflowingBottomEdgeOfWindow(dialogTop: number, dialogHeight: number): boolean {\n return dialogTop + dialogHeight > this.getMaximumDialogPositionBottom();\n }\n\n private getMaximumDialogPositionBottom(): number {\n return this.windowDimensions.heightInPx - RepositionDialogComponent.DIALOG_MARGIN;\n }\n\n private calculateArrowPositionTop(dialogHeight: number, dialogTop: number, sourceRect: DOMRect): number {\n let arrowTop: number;\n switch (this.positionOfDialog) {\n case PositionOfDialog.TOP:\n arrowTop = dialogHeight - RepositionDialogComponent.ARROW_PADDING;\n break;\n case PositionOfDialog.BOTTOM:\n arrowTop = -this.verticalOffset + RepositionDialogComponent.ARROW_PADDING;\n break;\n case PositionOfDialog.LEFT:\n case PositionOfDialog.RIGHT:\n arrowTop = sourceRect.top + sourceRect.height / 2 - dialogTop - RepositionDialogComponent.ARROW_SIZE / 2;\n break;\n }\n return arrowTop;\n }\n\n private calculateArrowPositionLeft(dialogWidth: number, dialogLeft: number, sourceRect: DOMRect): number {\n let arrowLeft: number;\n switch (this.positionOfDialog) {\n case PositionOfDialog.TOP:\n case PositionOfDialog.BOTTOM:\n arrowLeft = sourceRect.left + sourceRect.width / 2 - dialogLeft - RepositionDialogComponent.ARROW_SIZE / 2;\n break;\n case PositionOfDialog.LEFT:\n arrowLeft = dialogWidth - RepositionDialogComponent.ARROW_PADDING;\n break;\n case PositionOfDialog.RIGHT:\n arrowLeft = -this.verticalOffset + RepositionDialogComponent.ARROW_PADDING;\n break;\n }\n return arrowLeft;\n }\n\n private isDialogOverflowingTopEdgeOfWindow(dialogTop: number): boolean {\n return dialogTop < RepositionDialogComponent.getMinimumDialogPosition();\n }\n\n private isDialogOverflowing(dialogLeft: number, dialogTop: number, dialogWidth: number, dialogHeight: number): boolean {\n return (\n RepositionDialogComponent.isDialogOverflowingLeftEdgeOfWindow(dialogLeft) ||\n this.isDialogOverflowingRightEdgeOfWindow(dialogLeft, dialogWidth) ||\n this.isDialogOverflowingTopEdgeOfWindow(dialogTop) ||\n this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight)\n );\n }\n\n private repositionDialogHorizontally(dialogLeft: number, dialogWidth: number): [number, number] {\n if (RepositionDialogComponent.isDialogOverflowingLeftEdgeOfWindow(dialogLeft)) {\n if (this.canShiftDialogHorizontally()) {\n dialogWidth = Math.min(dialogWidth, this.getMaximumDialogPositionRight() - dialogLeft);\n } else {\n dialogWidth -= RepositionDialogComponent.getMinimumDialogPosition() - dialogLeft;\n }\n dialogLeft = RepositionDialogComponent.getMinimumDialogPosition();\n this.hasResizedDialog = true;\n } else if (this.isDialogOverflowingRightEdgeOfWindow(dialogLeft, dialogWidth)) {\n if (this.canShiftDialogHorizontally()) {\n dialogLeft = Math.max(RepositionDialogComponent.getMinimumDialogPosition(), this.getMaximumDialogPositionRight() - dialogWidth);\n }\n dialogWidth = this.getMaximumDialogPositionRight() - dialogLeft;\n this.hasResizedDialog = true;\n }\n\n return [dialogLeft, dialogWidth];\n }\n\n private repositionDialogVertically(dialogTop: number, dialogHeight: number): [number, number] {\n if (this.isDialogOverflowingTopEdgeOfWindow(dialogTop)) {\n if (this.canShiftDialogVertically()) {\n dialogHeight = Math.min(dialogHeight, this.getMaximumDialogPositionBottom() - dialogTop);\n } else {\n dialogHeight -= RepositionDialogComponent.getMinimumDialogPosition() - dialogTop;\n }\n\n dialogTop = RepositionDialogComponent.getMinimumDialogPosition();\n this.hasResizedDialog = true;\n } else if (this.isDialogOverflowingBottomEdgeOfWindow(dialogTop, dialogHeight)) {\n if (this.canShiftDialogVertically()) {\n dialogTop = Math.max(RepositionDialogComponent.getMinimumDialogPosition(), this.getMaximumDialogPositionBottom() - dialogTop);\n }\n dialogHeight = this.getMaximumDialogPositionBottom() - dialogTop;\n this.hasResizedDialog = true;\n }\n\n return [dialogTop, dialogHeight];\n }\n\n private close = (): void => {\n this.dialogRef.close();\n };\n}\n","import {AfterViewInit, Component, ElementRef, Inject, OnInit, ViewChild, ViewContainerRef} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {MatIcon} from '@angular/material/icon';\nimport {WINDOW} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-reposition-tooltip',\n templateUrl: './reposition-tooltip.component.html',\n styleUrls: ['./reposition-tooltip.component.scss']\n})\nexport class RepositionTooltipComponent implements OnInit, AfterViewInit {\n public static readonly tooltipPaddingInPx = 19;\n public static readonly arrowHorizontalPositionInPx = 25;\n public static readonly classNameForTopPositionArrow = 'arrow-top';\n public static readonly classNameForBottomPositionArrow = 'arrow-bottom';\n public static readonly classNameForLeftPositionArrow = 'arrow-left';\n public static readonly classNameForRightPositionArrow = 'arrow-right';\n @ViewChild('container', {read: ViewContainerRef, static: true}) public container: ViewContainerRef;\n @ViewChild('arrow') public arrow: MatIcon;\n\n private readonly component: any;\n private readonly elementRef: ElementRef;\n private readonly dialogRef: MatDialogRef;\n\n private targetDOMRect: DOMRect;\n private forceArrowCentered: boolean;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: {targetDOMRect: DOMRect; component: any; forceArrowCentered: boolean},\n @Inject(WINDOW) private readonly window: Window,\n dialogRef: MatDialogRef,\n elementRef: ElementRef\n ) {\n this.dialogRef = dialogRef;\n this.elementRef = elementRef;\n this.component = data.component;\n\n this.targetDOMRect = data.targetDOMRect;\n this.forceArrowCentered = data.forceArrowCentered;\n }\n\n public ngOnInit(): void {\n this.addComponent();\n }\n\n public ngAfterViewInit(): void {\n this.setTooltipAndArrowPositioning();\n }\n\n private addComponent(): void {\n this.container.createComponent(this.component);\n }\n\n private setTooltipAndArrowPositioning(): void {\n let topPosition = this.targetDOMRect.top - this.elementRef.nativeElement.offsetHeight - RepositionTooltipComponent.tooltipPaddingInPx;\n let arrowVerticalPositioningClassName = RepositionTooltipComponent.classNameForBottomPositionArrow;\n\n if (topPosition < 0) {\n topPosition = this.targetDOMRect.bottom;\n arrowVerticalPositioningClassName = RepositionTooltipComponent.classNameForTopPositionArrow;\n }\n\n let leftPosition = this.targetDOMRect.left - RepositionTooltipComponent.arrowHorizontalPositionInPx;\n let arrowHorizontalPositioningClassName = RepositionTooltipComponent.classNameForLeftPositionArrow;\n\n if (leftPosition + this.elementRef.nativeElement.offsetWidth > this.window.innerWidth) {\n leftPosition = this.targetDOMRect.right + RepositionTooltipComponent.arrowHorizontalPositionInPx - this.elementRef.nativeElement.offsetWidth;\n arrowHorizontalPositioningClassName = RepositionTooltipComponent.classNameForRightPositionArrow;\n }\n\n this.dialogRef.updatePosition({left: `${leftPosition}px`, top: `${topPosition}px`});\n this.dialogRef.addPanelClass(arrowVerticalPositioningClassName);\n this.dialogRef.addPanelClass(arrowHorizontalPositioningClassName);\n\n if (this.forceArrowCentered) {\n const arrowElement = this.arrow._elementRef.nativeElement as HTMLElement;\n const arrowCenterOffset = arrowElement.offsetLeft - arrowElement.clientWidth / 2;\n\n if (arrowHorizontalPositioningClassName === RepositionTooltipComponent.classNameForLeftPositionArrow) {\n arrowElement.style.left = `${arrowCenterOffset + this.targetDOMRect.width / 2}px`;\n } else if (arrowHorizontalPositioningClassName === RepositionTooltipComponent.classNameForRightPositionArrow) {\n arrowElement.style.left = `${arrowCenterOffset - this.targetDOMRect.width / 2}px`;\n }\n }\n }\n}\n","
\n \n \n
\n","export enum AdvancedSearchBoolInput {\n MISSING_DESIGN = 'missingDesign',\n NOT_IN_GROUP = 'notInGroup'\n}\n","export enum AdvancedSearchDateInput {\n COMPLETION_DATE_START = 'completion_date_start',\n COMPLETION_DATE_END = 'completion_date_end'\n}\n","export enum AdvancedSearchEnumInput {\n DRAWING_TYPE = 'type',\n MACHINE_STATUS = 'status',\n MACHINE_EFFICIENCY = 'efficiency',\n PRIORITY = 'priority',\n PRODUCTION_SCHEDULE_STATUS = 'production_order_status'\n}\n","import {AdvancedSearchBoolInput} from './advanced-search-bool-input.enum';\nimport {AdvancedSearchDateInput} from './advanced-search-date-input.enum';\nimport {AdvancedSearchEnumInput} from './advanced-search-enum-input.enum';\nimport {AdvancedSearchNumberInput} from './advanced-search-number-input.enum';\nimport {AdvancedSearchObjectInput} from './advanced-search-object-input.enum';\nimport {AdvancedSearchStringInput} from './advanced-search-string-input.enum';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const AdvancedSearchInput = {\n ...AdvancedSearchEnumInput,\n ...AdvancedSearchNumberInput,\n ...AdvancedSearchObjectInput,\n ...AdvancedSearchStringInput,\n ...AdvancedSearchDateInput,\n ...AdvancedSearchBoolInput\n};\n\nexport type AdvancedSearchInput = typeof AdvancedSearchInput;\n","export enum AdvancedSearchNumberInput {\n LENGTH = 'height',\n WIDTH = 'width',\n PICK_DENSITY = 'pick_density',\n REED_DENSITY = 'reed_density',\n NR_COLUMNS_FOR_WEFT_SELECTION = 'nrColumnsForWeftSelection',\n SIZE_IN_KB = 'sizeInKB',\n WIDTH_IN_DENTS = 'widthInDents',\n HEIGHT_IN_PICKS = 'heightInPicks'\n}\n","export enum AdvancedSearchObjectInput {\n MACHINE_QUALITY = 'quality',\n COLORED_YARN_SET = 'colored_yarn_set',\n COLOR_SET = 'color_set',\n MAIN_COLOR = 'main_color',\n BORDER_COLOR = 'border_color',\n ARTICLE = 'article',\n CREEL = 'creel',\n MACHINE = 'machine',\n WEAVE_STRUCTURE = 'weave_structure',\n MAIN_DESIGN = 'main_design',\n WEFT_COLORED_YARN_SET = 'weft_colored_yarn_set',\n WEAVE_PRODUCT = 'weave_product',\n TUFT_PRODUCT = 'tuft_product',\n PLASTIC_PRODUCT = 'plastic_product',\n TOOL = 'tool'\n}\n","export enum AdvancedSearchStringInput {\n NAME = 'name',\n DRAWING_CODE = 'code',\n DRAWING_SHAPE = 'shape',\n DRAWING_NAME = 'drawing_name',\n MACHINE_PRODUCTION_ORDER = 'production',\n MACHINE_ORDER_ID = 'orderId',\n ORDER_REFERENCE = 'orderReference',\n CUSTOMER_REFERENCE = 'customerReference',\n DATE_MODIFIED = 'dateModified'\n}\n","
\n \n
\n
\n \n \n {{ getInputLabel(advancedSearchFilter.propertyName) }}\n \n \n\n \n {{ getInputLabel(advancedSearchFilter.propertyName) }}\n \n {{ getSuffixUnit(advancedSearchFilter) }}\n \n \n {{ 'GENERAL.ERRORS.INVALID_FORMAT.INVALID_FORMAT' | bmsTranslate }}\n \n \n \n\n \n {{ getInputLabel(advancedSearchFilter.propertyName) }}\n \n \n {{ getOptionText(option, advancedSearchFilter.propertyName) }}\n \n \n \n\n \n {{ getInputLabel(advancedSearchFilter.propertyName) }}\n \n \n\n \n\n
\n {{\n 'GENERAL.ADVANCED_SEARCH.NOT_IN_GROUP' | bmsTranslate\n }}\n
\n \n \n
\n \n \n
\n\n\n\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {UntypedFormBuilder} from '@angular/forms';\nimport {PropertyValue} from '@domain/property-value';\nimport {TranslateService, Unit} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {BaseAdvancedSearchComponent} from './base-advanced-search.component';\n\n@Component({\n selector: 'app-advanced-search',\n templateUrl: './base-advanced-search.component.html',\n styleUrls: ['./base-advanced-search.component.scss']\n})\nexport class AdvancedSearchComponent extends BaseAdvancedSearchComponent implements OnInit {\n @Input() public advancedSearchFilters: PropertyValue[] = [];\n @Input() public defaultUnit: Unit = Unit.CENTIMETER;\n @Output() public advancedSearchClose: EventEmitter = new EventEmitter();\n @Output() public update: EventEmitter = new EventEmitter();\n\n public constructor(formBuilder: UntypedFormBuilder, translate: TranslateService) {\n super(formBuilder, translate);\n }\n\n public ngOnInit(): void {\n if (isEqual(this.defaultUnit, Unit.CENTIMETER)) {\n this.allowDecimalCases = true;\n this.maximumFractionDigits = 2;\n }\n\n super.ngOnInit();\n }\n\n public clearAdvancedSearchFilters(): void {\n this.clearAdvancedSearchFilterValues();\n\n this.update.emit(this.advancedSearchFilters);\n }\n\n public applyAdvancedSearchFilters(): void {\n this.updateAdvancedSearchFilterValues();\n\n this.update.emit(this.advancedSearchFilters);\n }\n\n public closeAdvancedSearch(): void {\n this.advancedSearchClose.emit();\n }\n}\n","import {Directive, OnInit} from '@angular/core';\nimport {UntypedFormBuilder, UntypedFormGroup} from '@angular/forms';\nimport {AdvancedSearchInputType, AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {PropertyValue} from '@domain/property-value';\nimport {AssertionUtils, BaseComponent, convertCommercialUnit, EnumUtils, StringUtils, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {AdvancedSearchInput} from './advanced-search-input.enum';\nimport {AdvancedSearchObjectInput} from './advanced-search-object-input.enum';\nimport {SelectObjectType} from './advanced-search-select-object/select-object-type';\n\n@Directive()\nexport abstract class BaseAdvancedSearchComponent extends BaseComponent implements OnInit {\n public advancedSearchFilters: PropertyValue[];\n public advancedSearchForm: UntypedFormGroup;\n public allowDecimalCases = false;\n public maximumFractionDigits: number;\n public selectObjectInput: AdvancedSearchObjectInput = null;\n public defaultUnit: Unit = Unit.CENTIMETER;\n\n protected pickDensityUnit: Unit;\n protected reedDensityUnit: Unit;\n\n protected constructor(\n private readonly formBuilder: UntypedFormBuilder,\n protected readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n }\n\n public isBigWidth(propertyValue: PropertyValue): boolean {\n return propertyValue.propertyName === AdvancedSearchInput.NAME || this.isInputOfTypeObject(propertyValue) || this.isInputOfTypeDate(propertyValue);\n }\n\n public isSmallWidth(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.NUMBER;\n }\n\n public canShowTextField(propertyValue: PropertyValue): boolean {\n const inputType: AdvancedSearchInputType = AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName);\n return inputType === AdvancedSearchInputType.STRING && !this.canShowSelectField(propertyValue);\n }\n\n public canShowNumberField(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.NUMBER && !this.canShowSelectField(propertyValue);\n }\n\n public canShowDateField(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.DATE && !this.canShowSelectField(propertyValue);\n }\n\n public canShowInputFieldSuffix(propertyValue: PropertyValue): boolean {\n return (\n propertyValue.propertyName === AdvancedSearchInput.LENGTH ||\n propertyValue.propertyName === AdvancedSearchInput.WIDTH ||\n propertyValue.propertyName === AdvancedSearchInput.PICK_DENSITY ||\n propertyValue.propertyName === AdvancedSearchInput.REED_DENSITY ||\n propertyValue.propertyName === AdvancedSearchInput.WIDTH_IN_DENTS ||\n propertyValue.propertyName === AdvancedSearchInput.HEIGHT_IN_PICKS\n );\n }\n\n public canShowSelectField(propertyValue: PropertyValue): boolean {\n return !AssertionUtils.isEmpty(propertyValue.possiblePropertyValues);\n }\n\n public canShowCheckboxField(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.BOOL;\n }\n\n public getOptionText(option: any, propertyName: string): string {\n return AdvancedSearchUtils.getDisplayValueForAdvancedSearchFilter(propertyName, option, this.translate, this.defaultUnit);\n }\n\n public canShowObjectPreview(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.hasValue(propertyValue) && this.isInputOfTypeObject(propertyValue);\n }\n\n public getPreviewObjectName(propertyValue: PropertyValue): string {\n return AdvancedSearchUtils.getDisplayValueForAdvancedSearchFilter(propertyValue.propertyName, propertyValue.propertyValue, this.translate, this.defaultUnit);\n }\n\n public clearValue(propertyValue: PropertyValue): void {\n propertyValue.propertyValue = null;\n this.advancedSearchForm?.get(propertyValue.propertyName).setValue(null);\n }\n\n public isInputOfTypeObject(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.OBJECT;\n }\n\n public isInputOfTypeDate(propertyValue: PropertyValue): boolean {\n return AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(propertyValue.propertyName) === AdvancedSearchInputType.DATE;\n }\n\n public canShowSelectObject(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.selectObjectInput);\n }\n\n public selectObject(propertyValue: PropertyValue): void {\n if (this.isInputOfTypeObject(propertyValue)) {\n this.selectObjectInput = propertyValue.propertyName as AdvancedSearchObjectInput;\n }\n }\n\n public getInputLabel(propertyName: string): string {\n return this.translate.instant(`GENERAL.ADVANCED_SEARCH.${EnumUtils.getKeyFromValue(AdvancedSearchInput, propertyName)}`, {count: 1});\n }\n\n public cancelSelectObject(): void {\n this.selectObjectInput = null;\n }\n\n public onObjectSelected(object: SelectObjectType): void {\n this.getAdvancedSearchFilter(this.selectObjectInput).propertyValue = object;\n this.advancedSearchForm?.get(this.getAdvancedSearchFilter(this.selectObjectInput).propertyName).setValue(object);\n this.cancelSelectObject();\n }\n\n public getSelectedObject(): SelectObjectType {\n return this.canShowSelectObject() ? this.getAdvancedSearchFilter(this.selectObjectInput).propertyValue : null;\n }\n\n public getSuffixUnit(propertyValue: PropertyValue): string {\n let unit = this.defaultUnit;\n if (propertyValue.propertyName === AdvancedSearchInput.PICK_DENSITY) {\n unit = this.pickDensityUnit;\n } else if (propertyValue.propertyName === AdvancedSearchInput.REED_DENSITY) {\n unit = this.reedDensityUnit;\n }\n\n return unit;\n }\n\n public getPropertyClass(propertyName: string): string {\n return StringUtils.kebabCase(propertyName);\n }\n\n public getDateInputLabel(propertyName: string): string {\n let dateInputLabel: string;\n\n if (propertyName === AdvancedSearchInput.COMPLETION_DATE_START) {\n dateInputLabel = this.translate.instant(`GENERAL.ADVANCED_SEARCH.COMPLETION_DATE`);\n } else if (propertyName === AdvancedSearchInput.COMPLETION_DATE_END) {\n dateInputLabel = '';\n } else {\n dateInputLabel = this.getInputLabel(propertyName);\n }\n return dateInputLabel;\n }\n\n public getMinDate(propertyName: string): string {\n let minDate = null;\n if (propertyName === AdvancedSearchInput.COMPLETION_DATE_END && !AssertionUtils.isNullOrUndefined(this.advancedSearchForm.get(AdvancedSearchInput.COMPLETION_DATE_START).value)) {\n minDate = this.advancedSearchForm.get(AdvancedSearchInput.COMPLETION_DATE_START).value;\n }\n\n return minDate;\n }\n\n public getMaxDate(propertyName: string): string {\n let maxDate = null;\n if (propertyName === AdvancedSearchInput.COMPLETION_DATE_START && !AssertionUtils.isNullOrUndefined(this.advancedSearchForm.get(AdvancedSearchInput.COMPLETION_DATE_END).value)) {\n maxDate = this.advancedSearchForm.get(AdvancedSearchInput.COMPLETION_DATE_END).value;\n }\n\n return maxDate;\n }\n\n public getPlaceholderForAdvancedSearchFilter(propertyName: string): string {\n return this.translate.instant(`GENERAL.ADVANCED_SEARCH.${propertyName.toUpperCase()}_PLACEHOLDER`);\n }\n\n protected getAdvancedSearchFilter(propertyName: string): PropertyValue {\n return this.advancedSearchFilters?.find((filter: PropertyValue) => filter.propertyName === propertyName);\n }\n\n protected updateAdvancedSearchFilterValues(): void {\n for (const key in this.advancedSearchForm.controls) {\n if ((key === AdvancedSearchInput.LENGTH || key === AdvancedSearchInput.WIDTH) && this.advancedSearchForm.get(key).value !== null) {\n this.getAdvancedSearchFilter(key).propertyValue = convertCommercialUnit({\n from: {\n unit: this.defaultUnit,\n value: this.advancedSearchForm.get(key).value\n },\n to: Unit.MILLIMETER\n });\n } else if (AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(key) === AdvancedSearchInputType.BOOL) {\n this.getAdvancedSearchFilter(key).propertyValue = this.advancedSearchForm.get(key).value === true ? true : null;\n } else if (AdvancedSearchUtils.getInputTypeForAdvancedSearchFilter(key) !== AdvancedSearchInputType.OBJECT) {\n this.getAdvancedSearchFilter(key).propertyValue = this.advancedSearchForm.get(key).value;\n }\n }\n }\n\n protected clearAdvancedSearchFilterValues(): void {\n for (const propertyValue of this.advancedSearchFilters) {\n AdvancedSearchUtils.clearValue(propertyValue);\n }\n }\n\n private setFormFields(): void {\n const controlConfigs = {};\n for (const advancedSearchFilter of this.advancedSearchFilters) {\n controlConfigs[advancedSearchFilter.propertyName] = advancedSearchFilter.propertyValue;\n }\n\n this.advancedSearchForm = this.formBuilder.group(controlConfigs);\n }\n\n public getChipValueKey(propertyName: string): string {\n return propertyName === AdvancedSearchInput.MACHINE_QUALITY ? '%(technicalNameWithVersion)' : null;\n }\n\n public getBaseRouterLink(propertyName: string): string {\n switch (propertyName) {\n case AdvancedSearchInput.MACHINE_QUALITY:\n return RouteUtils.paths.texStyle.machineQuality.editMachineQuality.absolutePath;\n case AdvancedSearchInput.COLORED_YARN_SET:\n return RouteUtils.paths.texStyle.coloredYarnSet.editColoredYarnSet.absolutePath;\n case AdvancedSearchInput.MACHINE:\n return RouteUtils.paths.texState.editMachine.absolutePath;\n case AdvancedSearchInput.COLOR_SET:\n return RouteUtils.paths.texStyle.colorSet.editColorSet.absolutePath;\n case AdvancedSearchInput.MAIN_COLOR:\n return RouteUtils.paths.texStyle.color.editColor.absolutePath;\n case AdvancedSearchInput.BORDER_COLOR:\n return RouteUtils.paths.texStyle.color.editColor.absolutePath;\n case AdvancedSearchInput.ARTICLE:\n return NavigationUtils.getAbsolutePath(NavigationId.EDIT_ARTICLE);\n case AdvancedSearchInput.CREEL:\n return RouteUtils.paths.texStyle.creel.editCreel.absolutePath;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n return RouteUtils.paths.texStyle.weaveStructure.editWeaveStructure.absolutePath;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n return RouteUtils.paths.texStyle.weftColoredYarnSet.editWeftColoredYarnSet.absolutePath;\n case AdvancedSearchObjectInput.WEAVE_PRODUCT:\n return RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct.absolutePath;\n case AdvancedSearchObjectInput.PLASTIC_PRODUCT:\n return RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.absolutePath;\n case AdvancedSearchObjectInput.TOOL:\n return RouteUtils.paths.utilities.tool.editTool.absolutePath;\n }\n }\n\n public abstract clearAdvancedSearchFilters(): void;\n\n public abstract applyAdvancedSearchFilters(): void;\n\n public abstract closeAdvancedSearch(): void;\n}\n","import {Component, Inject} from '@angular/core';\nimport {UntypedFormBuilder} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {PropertyValue} from '@domain/property-value';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {AssertionUtils, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {BaseAdvancedSearchComponent} from '../base-advanced-search.component';\n\n@Component({\n templateUrl: '../base-advanced-search.component.html',\n styleUrls: ['./advanced-search-dialog.component.scss', '../base-advanced-search.component.scss']\n})\nexport class AdvancedSearchDialogComponent extends BaseAdvancedSearchComponent {\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private readonly dialogRef: MatDialogRef,\n formBuilder: UntypedFormBuilder,\n translate: TranslateService,\n private readonly navigationHelperService: NavigationHelperService<{advancedSearchFilters: PropertyValue[]}>\n ) {\n super(formBuilder, translate);\n\n this.advancedSearchFilters = data.advancedSearchFilters;\n if (!AssertionUtils.isNullOrUndefined(data.pickDensityUnit) && !AssertionUtils.isNullOrUndefined(data.reedDensityUnit)) {\n this.pickDensityUnit = data.pickDensityUnit;\n this.reedDensityUnit = data.reedDensityUnit;\n }\n\n if (!AssertionUtils.isNullOrUndefined(data.defaultUnit)) {\n this.defaultUnit = data.defaultUnit;\n if (data.defaultUnit === Unit.CENTIMETER) {\n this.maximumFractionDigits = 2;\n this.allowDecimalCases = true;\n }\n }\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState<{advancedSearchFilters: PropertyValue[]}>({advancedSearchFilters: this.advancedSearchFilters});\n }\n\n public clearAdvancedSearchFilters(): void {\n this.clearAdvancedSearchFilterValues();\n this.dialogRef.close(this.advancedSearchFilters);\n }\n\n public applyAdvancedSearchFilters(): void {\n this.updateAdvancedSearchFilterValues();\n this.dialogRef.close(this.advancedSearchFilters);\n }\n\n public closeAdvancedSearch(): void {\n this.dialogRef.close();\n }\n}\n","
\n ...\n
\n\n
\n
\n
\n \n {{ getFilterDisplayText(searchFilter) }}\n \n \n
\n
\n
\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, EventEmitter, HostBinding, HostListener, Input, OnInit, Output, Renderer2, ViewChild} from '@angular/core';\nimport {AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {PropertyValue} from '@domain/property-value';\nimport {BaseComponent, DOMUtils, EnumUtils, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {forEach, isEmpty, isEqual, isNil} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, takeUntil} from 'rxjs/operators';\nimport {AdvancedSearchInput} from './advanced-search/advanced-search-input.enum';\n\n@Component({\n selector: 'app-search-filters',\n templateUrl: './search-filters.component.html',\n styleUrls: ['./search-filters.component.scss']\n})\nexport class SearchFiltersComponent extends BaseComponent implements OnInit, AfterViewInit {\n public static OVERFLOW_BUTTON_WIDTH_IN_PX = 44;\n public static OVERFLOW_BUTTON_PADDING_IN_PX = 16;\n\n @Input() public searchFilters: PropertyValue[] = [];\n @Input() public commercialUnit: Unit;\n @Input() public pickDensityUnit: Unit;\n @Input() public reedDensityUnit: Unit;\n\n @HostBinding('class.right-to-left') @Input() public showFiltersFromRightToLeft = false;\n @HostBinding('class.has-filters') public get hasFilters(): boolean {\n return this.showOverflowChip || this.searchFilters?.some((propertyValue: PropertyValue, index: number) => this.canShowFilter(propertyValue, index));\n }\n\n @Output() public searchFiltersChanged: EventEmitter = new EventEmitter();\n @Output() public showAdvancedSearch: EventEmitter = new EventEmitter();\n\n @ViewChild('filterContainer') public filterContainer: ElementRef;\n public filterOverflowPositionLeft: number;\n\n public showOverflowChip = false;\n\n private readonly filterContainerContentChangedSubject = new Subject();\n private lastNonOverflowFilterIndex: number;\n\n public constructor(\n private readonly translate: TranslateService,\n private readonly renderer: Renderer2,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {\n super();\n }\n\n @HostListener('window:resize')\n public onResize(): void {\n this.checkIfFiltersAreTooBigForContainer();\n }\n\n public ngOnInit(): void {\n this.showOverflowChip = false;\n this.filterContainerContentChangedSubject\n .asObservable()\n .pipe(debounceTime(100), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.checkIfFiltersAreTooBigForContainer());\n }\n\n public ngAfterViewInit(): void {\n DOMUtils.observeResize(this.filterContainer.nativeElement)\n .pipe(debounceTime(100), takeUntil(this.unSubscribeOnViewDestroy), distinctUntilChanged())\n .subscribe(() => this.checkIfFiltersAreTooBigForContainer());\n }\n\n public onFilterOverflowClicked(): void {\n this.showAdvancedSearch.emit();\n }\n\n public canShowFilter(propertyValue: PropertyValue, index: number): boolean {\n return AdvancedSearchUtils.hasValue(propertyValue) && (isNil(this.lastNonOverflowFilterIndex) || index < this.lastNonOverflowFilterIndex);\n }\n\n public getFilterDisplayText(propertyValue: PropertyValue): string {\n const propertyName: string = this.translate.instant(`GENERAL.ADVANCED_SEARCH.${EnumUtils.getKeyFromValue(AdvancedSearchInput, propertyValue.propertyName)}`, {count: 1});\n\n const value: string = this.getDisplayValueForAdvancedSearchFilter(propertyValue);\n let text: string;\n if (\n propertyValue.propertyName === AdvancedSearchInput.LENGTH ||\n propertyValue.propertyName === AdvancedSearchInput.WIDTH ||\n propertyValue.propertyName === AdvancedSearchInput.WIDTH_IN_DENTS ||\n propertyValue.propertyName === AdvancedSearchInput.HEIGHT_IN_PICKS\n ) {\n const unitKey = `GENERAL.UNIT.${Unit.getKeyFromValue(this.commercialUnit)}`;\n text = `${propertyName} (${value} ${this.translate.instant(unitKey)})`;\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.PICK_DENSITY)) {\n const unitKey = this.pickDensityUnit;\n text = `${propertyName} (${value} ${this.translate.instant(unitKey)})`;\n } else if (isEqual(propertyValue.propertyName, AdvancedSearchInput.REED_DENSITY)) {\n const unitKey = this.reedDensityUnit;\n text = `${propertyName} (${value} ${this.translate.instant(unitKey)})`;\n } else if (value.length > 10 && isEmpty(propertyValue.possiblePropertyValues)) {\n text = `${propertyName} (${value.substring(0, 10)}...)`;\n } else if (propertyValue.propertyName === AdvancedSearchInput.NOT_IN_GROUP) {\n text = `${propertyName}`;\n } else {\n text = `${propertyName} (${value})`;\n }\n\n return text;\n }\n\n public canShowFilterTooltip(propertyValue: PropertyValue): boolean {\n return (\n propertyValue.propertyName !== AdvancedSearchInput.LENGTH && propertyValue.propertyName !== AdvancedSearchInput.WIDTH && this.getDisplayValueForAdvancedSearchFilter(propertyValue).length > 10\n );\n }\n\n public getFilterTooltip(propertyValue: PropertyValue): string {\n return this.getDisplayValueForAdvancedSearchFilter(propertyValue);\n }\n\n public clearValue(propertyValue: PropertyValue): void {\n this.showOverflowChip = false;\n this.lastNonOverflowFilterIndex = undefined;\n AdvancedSearchUtils.clearValue(propertyValue);\n this.filterContainerContentChangedSubject.next();\n this.searchFiltersChanged.emit();\n }\n\n public getFilterOverflowTooltip(): string {\n return this.searchFilters\n ? this.searchFilters\n .slice(this.lastNonOverflowFilterIndex)\n .filter((propertyValue: PropertyValue, index: number) => this.canShowFilter(propertyValue, index))\n .map((propertyValue: PropertyValue) => this.getFilterDisplayText(propertyValue))\n .join(', ')\n : null;\n }\n\n public emitCheckIfFiltersAreTooBigForContainerEvent(): void {\n this.filterContainerContentChangedSubject.next();\n }\n\n private checkIfFiltersAreTooBigForContainer(): void {\n this.setFiltersOpacity(0);\n this.showOverflowChip = false;\n this.lastNonOverflowFilterIndex = undefined;\n\n this.renderer.removeClass(this.filterContainer.nativeElement, 'overflow');\n const maxWidth = this.filterContainer.nativeElement.clientWidth;\n\n let widthCount = 0;\n\n this.changeDetectorRef.detectChanges();\n\n forEach(this.filterContainer.nativeElement.children, (children: HTMLElement, index: number) => {\n widthCount += children.clientWidth;\n\n if (widthCount > maxWidth) {\n if (this.showFiltersFromRightToLeft) {\n this.renderer.addClass(this.filterContainer.nativeElement, 'overflow');\n } else {\n widthCount -= children.clientWidth;\n this.setFilterOverflowLeftPosition(maxWidth, widthCount, index);\n }\n\n this.showOverflowChip = true;\n this.changeDetectorRef.detectChanges();\n\n this.lastNonOverflowFilterIndex =\n widthCount - children.clientWidth + SearchFiltersComponent.OVERFLOW_BUTTON_WIDTH_IN_PX + SearchFiltersComponent.OVERFLOW_BUTTON_PADDING_IN_PX > maxWidth ? index - 1 : index;\n\n return false;\n }\n });\n\n this.setFiltersOpacity(1);\n }\n\n private setFiltersOpacity(opacity: number): void {\n forEach(this.filterContainer.nativeElement.children, (children: HTMLElement, index: number) => {\n if (index > 0 && isEqual(opacity, 0)) {\n this.renderer.setStyle(children, 'opacity', 0);\n } else {\n this.renderer.setStyle(children, 'opacity', 1);\n }\n });\n }\n\n private getDisplayValueForAdvancedSearchFilter(propertyValue: PropertyValue): string {\n return AdvancedSearchUtils.getDisplayValueForAdvancedSearchFilter(propertyValue.propertyName, propertyValue.propertyValue, this.translate, this.commercialUnit);\n }\n\n private setFilterOverflowLeftPosition(maxWidth: number, widthCount: number, currentChildElementIndex: number): void {\n if (widthCount + SearchFiltersComponent.OVERFLOW_BUTTON_WIDTH_IN_PX >= maxWidth) {\n for (let i = currentChildElementIndex - 1; i > 0; i--) {\n if (this.filterContainer.nativeElement.children[i].clientWidth > 0) {\n widthCount -= this.filterContainer.nativeElement.children[i].clientWidth;\n break;\n }\n }\n this.filterOverflowPositionLeft = widthCount;\n this.renderer.addClass(this.filterContainer.nativeElement, 'overflow');\n } else {\n this.filterOverflowPositionLeft = widthCount;\n }\n }\n}\n","import {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\n\nexport function getRowHeightForCreelPreview(coloredYarnSets: OverviewListColoredYarnSetWithStartDent[]): number {\n let rowHeight = 32;\n\n if (coloredYarnSets.length > 0) {\n const amountOfColoredYarnSets = coloredYarnSets.length;\n const heightOfSingleColoredYarnSetPreview = 16;\n const marginBetweenColoredYarnSetPreviewsInPx = 4;\n const totalVerticalPaddingInPx = 32;\n\n rowHeight = heightOfSingleColoredYarnSetPreview * amountOfColoredYarnSets + totalVerticalPaddingInPx + (amountOfColoredYarnSets - 1) * marginBetweenColoredYarnSetPreviewsInPx;\n }\n\n return rowHeight;\n}\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {FINISHINGS, Finishings, GetAllFinishingsParameters} from '@infrastructure/http/finishing/finishings';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {AssertionUtils, BaseComponent, GridOptionsBuilderFactoryService, NoDataOverlayComponentParams, OverlayComponentParams, SelectGridDialog} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\nimport {OverviewListFinishingAndFinishingTemplateService} from '../finishing-and-finishing-template/overview/overview-list-finishing-and-finishing-template.service';\n\n@Component({\n templateUrl: './select-finishing.component.html'\n})\nexport class SelectFinishingComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('finishingsGrid') public finishingsGrid: AgGridAngular;\n public finishingsForMachineQuality: OverviewListFinishing[];\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n\n private readonly machineQualityId: number;\n\n public constructor(\n @Inject(FINISHINGS) private readonly finishings: Finishings,\n private readonly dialogRef: MatDialogRef,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly overviewListFinishingAndFinishingTemplateService: OverviewListFinishingAndFinishingTemplateService,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n\n this.machineQualityId = data?.machineQualityId ?? null;\n }\n\n public get gridOptionsForListOfFinishings(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.setGridOptionsForListOfFinishings();\n this.getFinishings();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.finishingsGrid?.api];\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({dialogComponent: SelectFinishingComponent});\n }\n\n public canSelectFinishing(): boolean {\n return !AssertionUtils.isEmpty(this.finishingsGrid?.api?.getSelectedRows());\n }\n\n public selectFinishing(): void {\n this.dialogRef.close(this.getSelectedFinishing());\n }\n\n public showOnlyLatestVersionChanged(change: boolean): void {\n this.getFinishings(change);\n }\n\n private setGridOptionsForListOfFinishings(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfFinishings(), GridIdentifier.SELECT_FINISHING)\n .withOnCellDoubleClicked(() => this.selectFinishing())\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: 'TEXTILE_DATA.FINISHING.FINISHING',\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withRememberStateForNavigationHelper()\n .build()\n ];\n }\n\n private getColumnDefsForListOfFinishings(): ColDef[] {\n return this.overviewListFinishingAndFinishingTemplateService.getColumnDefs(false, true);\n }\n\n private getSelectedFinishing(): OverviewListFinishing {\n return this.finishingsGrid.api.getSelectedRows()[0];\n }\n\n private getFinishings(showOnlyLatestVersion: boolean = true): void {\n if (!AssertionUtils.isNullOrUndefined(this.machineQualityId)) {\n const parameters: Partial = {machineQualityId: this.machineQualityId, showOnlyLatestVersion};\n\n this.finishings\n .getFinishingsForMachineQualityId(parameters)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfFinishings: OverviewListFinishing[]) => {\n this.finishingsForMachineQuality = listOfFinishings;\n });\n } else {\n const parameters: Partial = {showOnlyLatestVersion};\n\n this.finishings\n .getAll(parameters)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfFinishings: OverviewListFinishing[]) => {\n this.finishingsForMachineQuality = listOfFinishings;\n });\n }\n }\n}\n\ninterface NavigationSelectFinishingData {\n dialogComponent: typeof SelectFinishingComponent;\n}\n","
\n \n \n \n
\n \n
\n \n
\n","import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationSearchService {\n public navigationOpenSearchEmitter = new Subject();\n public navigationCloseSearchEmitter = new Subject();\n\n public notifySearchOpened(): void {\n this.navigationOpenSearchEmitter.next();\n }\n\n public notifySearchClosed(): void {\n this.navigationCloseSearchEmitter.next();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NavigationState} from '@domain/navigation/navigation-state.enum';\nimport {AssertionUtils, LocalStorageService} from '@vdw/angular-component-library';\nimport {Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SideNavigationStateService {\n public onNavigationStateChanged: Subject = new Subject();\n private sideNavState: NavigationState;\n private localStorageService: LocalStorageService;\n private sideNavStateStorageKey = 'sideNavState';\n\n public constructor(localStorageService: LocalStorageService) {\n this.localStorageService = localStorageService;\n\n this.initializeSideNavState();\n }\n\n public changeNavigationStateToOpen(): void {\n this.changeSideNavState(NavigationState.OPEN);\n }\n\n public changeNavigationStateToClosed(): void {\n this.changeSideNavState(NavigationState.CLOSED);\n }\n\n public getCurrentNavigationState(): NavigationState {\n return this.sideNavState;\n }\n\n private changeSideNavState(navigationState: NavigationState): void {\n this.sideNavState = navigationState;\n this.localStorageService.set(this.sideNavStateStorageKey, NavigationState[navigationState]);\n this.onNavigationStateChanged.next(navigationState);\n }\n\n private initializeSideNavState(): void {\n const storedSideNavState = this.localStorageService.get(this.sideNavStateStorageKey);\n if (AssertionUtils.isNullOrUndefined(storedSideNavState) || AssertionUtils.isNullOrUndefined(NavigationState[storedSideNavState])) {\n this.changeNavigationStateToOpen();\n } else {\n this.sideNavState = NavigationState[storedSideNavState];\n }\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {NotFoundPageComponent} from '../status-codes/404/not-found-page.component';\n\nexport const calendarRoutes: Routes = [\n {path: '', component: NotFoundPageComponent},\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'shift',\n parentId: NavigationId.CALENDAR,\n id: NavigationId.SHIFT_MODULE,\n navigationKey: 'CALENDAR.SHIFT.SHIFT',\n requiredPermission: Permission.SHIFT_VIEW\n },\n import('@presentation/pages/calendar/shift/shift.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'pattern',\n parentId: NavigationId.CALENDAR,\n id: NavigationId.PATTERN_MODULE,\n navigationKey: 'GENERAL.PATTERN.PATTERN',\n requiredPermission: Permission.SHIFT_PATTERN_VIEW\n },\n import('@presentation/pages/calendar/pattern/pattern.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'schedule',\n parentId: NavigationId.CALENDAR,\n id: NavigationId.SCHEDULE_MODULE,\n navigationKey: 'GENERAL.SCHEDULE.SCHEDULE',\n requiredPermission: Permission.SHIFT_SCHEDULE_VIEW\n },\n import('@presentation/pages/calendar/schedule/schedule.module')\n )\n];\n\nexport const calendarRouting: ModuleWithProviders = RouterModule.forChild(calendarRoutes);\n","import {Injectable} from '@angular/core';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {\n ColDefBuilderFactoryService,\n GridOptionsBuilder,\n LinkIconRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef, ICellRendererParams, RowNode, ValueGetterParams} from 'ag-grid-community';\n\n@Injectable()\nexport class PatternOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.NAME')\n .withColIdAndField('name', true)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: NavigationUtils.getAbsolutePath(NavigationId.EDIT_PATTERN)\n };\n })\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.DATETIME.DURATION')\n .withColId('numDays')\n .withValueGetter((params: ValueGetterParams) => `${params.data.numDays} ${this.translate.instant('MACHINE.SETTINGS.DAYS', {count: params.data.numDays}).toLowerCase()}`, true)\n .withComparator((valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode) => intComparator(nodeA?.data?.numDays, nodeB?.data?.numDays))\n .withCellClass('right')\n .build()\n ];\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant(NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey, {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {TimeUtils} from '@vdw/angular-component-library';\nimport {Duration} from 'luxon';\nimport {Shift} from '../shift/shift';\n\nexport class PatternShift {\n private _id: number | string;\n private _dayIndex: number;\n private _sequence: number;\n private _occurrenceOfShift: number;\n private _shift: Shift;\n private _startTime: Duration;\n private _endTime: Duration;\n\n public constructor(id: number | string, dayIndex: number, shift: Shift, startTime: Duration, endTime: Duration, sequence?: number, occurrenceOfShift?: number) {\n this._id = id;\n this._dayIndex = dayIndex;\n this._sequence = sequence;\n this._occurrenceOfShift = occurrenceOfShift;\n this._shift = shift;\n this._startTime = startTime;\n this._endTime = endTime;\n }\n\n public get id(): number | string {\n return this._id;\n }\n\n public set id(value: number | string) {\n this._id = value;\n }\n\n public get dayIndex(): number {\n return this._dayIndex;\n }\n\n public set dayIndex(value: number) {\n this._dayIndex = value;\n }\n\n public get sequence(): number {\n return this._sequence;\n }\n\n public set sequence(value: number) {\n this._sequence = value;\n }\n\n public get occurrenceOfShift(): number {\n return this._occurrenceOfShift;\n }\n\n public set occurrenceOfShift(value: number) {\n this._occurrenceOfShift = value;\n }\n\n public get shift(): Shift {\n return this._shift;\n }\n\n public set shift(value: Shift) {\n this._shift = value;\n }\n\n public get startTime(): Duration {\n return this._startTime;\n }\n\n public set startTime(value: Duration) {\n this._startTime = value;\n }\n\n public get endTime(): Duration {\n return this._endTime;\n }\n\n public set endTime(value: Duration) {\n this._endTime = value;\n }\n\n public static getHoursAndMinutesFromDuration(value: Duration): string {\n return `${value.hours.toString().padStart(2, '0')}:${value.minutes.toString().padStart(2, '0')}`;\n }\n\n public static getStartAndEndTimeFromMidnight(patternStartTime: string, startTime: string, endTime: string): Duration[] {\n let start = Duration.fromISOTime(startTime);\n let end = Duration.fromISOTime(endTime);\n end = end <= start ? end.plus({days: 1}) : end;\n start = start < Duration.fromISOTime(patternStartTime) ? start.plus({days: 1}) : start;\n end = end <= start ? end.plus({days: 1}) : end;\n\n return [start, end];\n }\n\n public static fromJSON(patternShiftJSON: any): PatternShift {\n return new PatternShift(\n patternShiftJSON.id,\n patternShiftJSON.dayIndex,\n Shift.fromJSON(patternShiftJSON.shift),\n TimeUtils.convertTimeSpanToDuration(patternShiftJSON.startTimeFromMidnight).minus({seconds: 1}),\n TimeUtils.convertTimeSpanToDuration(patternShiftJSON.endTimeFromMidnight),\n patternShiftJSON.sequence,\n patternShiftJSON.occurrenceOfShift\n );\n }\n\n public toJSON(): JSON {\n return {\n id: typeof this._id === 'number' ? this._id : undefined,\n dayIndex: this._dayIndex,\n shiftId: this._shift.id,\n startTimeFromMidnight: this._startTime.plus({seconds: 1}).toFormat('d:hh:mm:ss'),\n endTimeFromMidnight: this._endTime.toFormat('d:hh:mm:ss'),\n sequence: this._sequence,\n occurrenceOfShift: this._occurrenceOfShift,\n breakTimes: []\n } as any as JSON;\n }\n}\n","import {TimeUtils} from '@vdw/angular-component-library';\nimport {Duration} from 'luxon';\nimport {PatternShift} from './pattern-shift';\n\nexport class Pattern {\n private _id: number;\n private _name: string;\n private _numDays: number;\n private _startTime: Duration;\n private _patternShifts: PatternShift[];\n\n public constructor(id: number, name: string, numDays: number, startTime?: Duration, patternShifts?: PatternShift[]) {\n this._id = id;\n this._name = name;\n this._numDays = numDays;\n this._startTime = startTime;\n this._patternShifts = patternShifts;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(value: string) {\n this._name = value;\n }\n\n public get numDays(): number {\n return this._numDays;\n }\n\n public set numDays(value: number) {\n this._numDays = value;\n }\n\n public get startTime(): Duration {\n return this._startTime;\n }\n\n public set startTime(value: Duration) {\n this._startTime = value;\n }\n\n public get patternShifts(): PatternShift[] {\n return this._patternShifts;\n }\n\n public set patternShifts(value: PatternShift[]) {\n this._patternShifts = value;\n }\n\n public static fromJSON(patternJSON: any): Pattern {\n return new Pattern(\n patternJSON.id,\n patternJSON.name,\n patternJSON.numDays,\n patternJSON.startTimeFromMidnight ? TimeUtils.convertTimeSpanToDuration(patternJSON.startTimeFromMidnight) : null,\n patternJSON.patternShifts?.map((patternShiftJSON: any) => PatternShift.fromJSON(patternShiftJSON))\n );\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n numDays: this._numDays,\n startTimeFromMidnight: this._startTime.toFormat('hh:mm:ss'),\n patternShifts: this._patternShifts.map((patternShift: PatternShift) => patternShift.toJSON())\n } as any as JSON;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {HttpShiftsService} from '@infrastructure/http/calendar/shift/http-shifts.service';\nimport {\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridOptionsBuilder,\n NavigationHelperPrototypeService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {ShiftOverviewService} from './overview/shift-overview.service';\n\n@Injectable({providedIn: 'root'})\nexport class ShiftSelectionService {\n private config: CrudOverviewDataConfig;\n private readonly TRANSLATION_KEY = 'CALENDAR.SHIFT.SHIFT';\n\n public constructor(\n private readonly shifts: HttpShiftsService,\n private readonly overview: ShiftOverviewService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService\n ) {\n this.init();\n }\n\n public init(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName(this.TRANSLATION_KEY)\n .withRowData(this.shifts.getAll())\n .withCrudGridOptions(this.overview.getColumnDefs(false), GridIdentifier.SHIFT_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: Shift, data: any): Observable {\n this.config.selectedObjects = [inputValue];\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","
\n
\n

{{ 'GENERAL.ACTIONS.ADD_OBJECT' | bmsTranslate: {object: 'CALENDAR.SHIFT.SHIFT' | bmsTranslate: {count: 1} | lowercase} }}

\n
\n \n {{ 'CALENDAR.SHIFT.SHIFT' | bmsTranslate: {count: 1} }}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n
\n
\n
\n \n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {AbstractControl, FormControl, FormGroup, ValidationErrors, ValidatorFn, Validators} from '@angular/forms';\nimport {PatternShift} from '@domain/calendar/pattern/pattern-shift';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {PatternShiftRowData} from '@presentation/pages/calendar/pattern/add/pattern-shift-row-data.interface';\nimport {ShiftSelectionService} from '@presentation/pages/calendar/shift/shift-selection.service';\nimport {AssertionUtils, BaseComponent, FormValidationHelper, NavigationHelperPrototypeService, ScheduleItem, UuidUtils} from '@vdw/angular-component-library';\nimport {Duration} from 'luxon';\nimport {takeUntil} from 'rxjs';\nimport {AddPatternShiftNavigationData} from './add-pattern-shift-navigation-data.interface';\n\n@Component({\n templateUrl: 'add-pattern-shift-dialog.component.html',\n styleUrl: 'add-pattern-shift-dialog.component.scss'\n})\nexport class AddPatternShiftDialogComponent extends BaseComponent implements OnInit {\n public addPatternShiftForm = new FormGroup({\n shift: new FormControl(null, Validators.required),\n startTime: new FormControl('00:00', Validators.required),\n endTime: new FormControl('00:00', Validators.required)\n });\n\n private startTime: string;\n private rowData: PatternShiftRowData;\n private previousDayEndTime: Duration;\n private nextDayStartTime: Duration;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly shiftSelectionService: ShiftSelectionService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const addPatternShiftNavigationData = this.navigationHelper.getCurrentEntryData();\n this.startTime = addPatternShiftNavigationData.startTime;\n this.rowData = addPatternShiftNavigationData.rowData;\n this.previousDayEndTime = addPatternShiftNavigationData.previousDayEndTime;\n this.nextDayStartTime = addPatternShiftNavigationData.nextDayStartTime;\n this.setFormFields();\n }\n\n public selectShift(): void {\n const field = this.addPatternShiftForm.controls.shift;\n this.shiftSelectionService\n .openContentSwitcherDialog(field.value, {\n startTime: this.startTime,\n rowData: this.rowData,\n previousDayEndTime: this.previousDayEndTime,\n nextDayStartTime: this.nextDayStartTime,\n patternShift: this.getCurrentPatternShift(false)\n } as AddPatternShiftNavigationData)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((shift: Shift[]) => {\n if (!AssertionUtils.isNullOrUndefined(shift)) {\n field.setValue(shift[0]);\n }\n });\n }\n\n public addPatternShift(): void {\n const isValid = new FormValidationHelper().checkForms([this.addPatternShiftForm], this.document);\n if (isValid) {\n this.navigationHelper.navigateBack([this.getCurrentPatternShift(true)]);\n }\n }\n\n public cancel(): void {\n this.navigationHelper.navigateBack();\n }\n\n private setFormFields(): void {\n const patternShift = this.navigationHelper.getCurrentEntryData()?.patternShift;\n if (!AssertionUtils.isNullOrUndefined(patternShift)) {\n this.addPatternShiftForm.patchValue({\n shift: patternShift.shift,\n startTime: patternShift.startTime.toFormat('hh:mm'),\n endTime: patternShift.endTime.toFormat('hh:mm')\n });\n }\n\n this.addPatternShiftForm.controls.startTime.addValidators(this.overlappingShiftsValidator('start'));\n this.addPatternShiftForm.controls.endTime.addValidators(this.overlappingShiftsValidator('end'));\n }\n\n private overlappingShiftsValidator(formControlName: 'start' | 'end'): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const [newStart, newEnd] = PatternShift.getStartAndEndTimeFromMidnight(\n this.startTime,\n formControlName === 'start' ? control.value : this.addPatternShiftForm.value.startTime,\n formControlName === 'end' ? control.value : this.addPatternShiftForm.value.endTime\n );\n\n const overlappingShifts =\n this.rowData.scheduleItems.some((scheduleItem: ScheduleItem) => newStart < scheduleItem.endTime && newEnd > scheduleItem.startTime) ||\n newStart < this.previousDayEndTime ||\n newEnd > this.nextDayStartTime;\n\n const errors: ValidationErrors = overlappingShifts ? {overlappingShifts: true} : null;\n this.addPatternShiftForm.controls[`${formControlName === 'start' ? 'end' : 'start'}Time`].setErrors(errors);\n return errors;\n };\n }\n\n private getCurrentPatternShift(getTimeFromMidnight: boolean): PatternShift {\n let startTime = Duration.fromISOTime(this.addPatternShiftForm.value.startTime);\n let endTime = Duration.fromISOTime(this.addPatternShiftForm.value.endTime);\n\n if (getTimeFromMidnight) {\n [startTime, endTime] = PatternShift.getStartAndEndTimeFromMidnight(this.startTime, this.addPatternShiftForm.value.startTime, this.addPatternShiftForm.value.endTime);\n }\n\n return new PatternShift(UuidUtils.generateV4Uuid(), this.rowData.day - 1, this.addPatternShiftForm.value.shift, startTime, endTime);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PatternShift} from '@domain/calendar/pattern/pattern-shift';\nimport {NavigationHelperPrototypeService} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {AddPatternShiftDialogComponent} from './add-pattern-shift-dialog.component';\nimport {AddPatternShiftNavigationData} from './add-pattern-shift-navigation-data.interface';\n\n@Injectable({providedIn: 'root'})\nexport class AddPatternShiftDialogService {\n public constructor(private readonly navigationHelper: NavigationHelperPrototypeService) {}\n\n public openContentSwitcherDialog(data: AddPatternShiftNavigationData): Observable {\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: AddPatternShiftDialogComponent\n },\n data\n });\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Pattern} from '@domain/calendar/pattern/pattern';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {Repository} from '@infrastructure/http/repository';\nimport {UniqueIdentifierObjectRepository} from '@infrastructure/http/unique-identifier-object-repository';\nimport {CheckName} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPatternsService implements Repository, UniqueIdentifierObjectRepository {\n private baseUrl: string;\n\n public constructor(\n private readonly httpClient: HttpClient,\n backendConfiguration: BackendConfiguration\n ) {\n this.baseUrl = `${backendConfiguration.getCalendarEndpoint()}patterns`;\n }\n\n public getAll(): Observable {\n return this.httpClient.get(this.baseUrl).pipe(map((patternsJSON: any) => patternsJSON.map((patternJSON: any) => Pattern.fromJSON(patternJSON))));\n }\n\n public delete(id: number | string): Observable {\n return this.httpClient.delete(`${this.baseUrl}/${id}`);\n }\n\n public getById(id: number | string): Observable {\n return this.httpClient.get(`${this.baseUrl}/${id}`).pipe(map((response: any) => Pattern.fromJSON(response)));\n }\n\n public save(item: Pattern): Observable {\n return this.httpClient.post(this.baseUrl, item.toJSON()).pipe(map((response: {id: number}) => response.id));\n }\n\n public update(item: Pattern): Observable {\n return this.httpClient.put(`${this.baseUrl}/${item.id}`, item.toJSON());\n }\n\n public deleteMulti(ids: number[]): Observable {\n throw new Error('Method not implemented.');\n }\n\n public isIdentifierAvailable(identifier: string): Observable {\n return this.httpClient.get(`${this.baseUrl}/check-name?name=${identifier}`).pipe(map((response: any) => CheckName.fromJSON(response)));\n }\n}\n","
\n \n
\n
\n
\n

{{ 'GENERAL.NAME' | bmsTranslate }}*

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

{{ 'MACHINE.SETTINGS.DAYS' | bmsTranslate: {count: 2} }}

\n \n \n @if (addPatternForm.value.numDays) {\n \n }\n \n
\n
\n

{{ 'GENERAL.DATETIME.START_TIME' | bmsTranslate }}

\n \n
\n
\n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteData} from '@application/helper/routing/route-data.interface';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {Pattern} from '@domain/calendar/pattern/pattern';\nimport {PatternShift} from '@domain/calendar/pattern/pattern-shift';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {HttpPatternsService} from '@infrastructure/http/calendar/pattern/http-patterns.service';\nimport {AddPatternShiftDialogService} from '@presentation/components/calendar/add-pattern-shift-dialog/add-pattern-shift-dialog.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ColDefBuilderFactoryService,\n ContentSwitcherEntry,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n GridOptionsBuilder,\n noSpaceValidator,\n SaveType,\n ScheduleItem,\n TabsMenuItem,\n TimelineHeaderComponent,\n TimelineHeaderParams,\n TimelineRowCellRendererParams,\n TimelineRowComponent,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef, GetRowIdParams, GridApi, GridReadyEvent, RowDataUpdatedEvent} from 'ag-grid-community';\nimport {Duration} from 'luxon';\nimport {finalize, Observable, takeUntil} from 'rxjs';\nimport {PatternShiftRowData} from './pattern-shift-row-data.interface';\n\n@Component({\n templateUrl: 'add-pattern-page.component.html',\n styleUrl: 'add-pattern-page.component.scss'\n})\nexport class AddPatternPageComponent extends BaseComponent implements OnInit {\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_SHIFT_PATTERN;\n public readonly PATTERN_TRANSLATION_KEY = NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey;\n public readonly SAVE_TYPE = SaveType;\n public readonly DEFAULT_START_TIME = '06:00';\n private readonly DEFAULT_NUM_DAYS = 1;\n private readonly DAY_COLUMN_WIDTH = 32;\n private readonly TIMELINE_COLUMN_WIDTH = 1152;\n\n public addPatternForm = new FormGroup({\n name: new FormControl(null, [Validators.required, noSpaceValidator], AsyncUniqueValidator.createValidator(this.patterns, null)),\n numDays: new FormControl(this.DEFAULT_NUM_DAYS),\n startTime: new FormControl(this.DEFAULT_START_TIME)\n });\n\n public generalTab: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL', form: this.addPatternForm};\n public config: CrudOverviewDataConfig;\n private gridApi: GridApi;\n private patternToSave = new Pattern(null, null, null, null, []);\n private totalHours = 24;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly activatedRoute: ActivatedRoute,\n private readonly addPatternShiftDialogService: AddPatternShiftDialogService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly patterns: HttpPatternsService,\n private readonly router: Router,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withGridOptions(this.getColumnDefs(), GridIdentifier.PATTERN_SHIFT, [{day: 1, scheduleItems: []}], (builder: GridOptionsBuilder) =>\n builder\n .withGetRowId((params: GetRowIdParams) => params.data.day)\n .withoutRowSelection()\n .withOnGridReady((event: GridReadyEvent) => (this.gridApi = event.api))\n .withOnRowDataUpdated((event: RowDataUpdatedEvent) => {\n const startTime = Duration.fromISOTime(this.addPatternForm.value.startTime);\n const maxEndTime = this.patternToSave.patternShifts.reduce((max: PatternShift, current: PatternShift) => (max?.endTime > current.endTime ? max : current), null)?.endTime;\n const minEndTime = startTime.plus({days: 1});\n this.totalHours = (maxEndTime > minEndTime ? maxEndTime : minEndTime).minus(startTime).as('hours');\n\n event.api.refreshHeader();\n event.api.redrawRows();\n })\n .build()\n )\n .build();\n\n const id = this.activatedRoute.snapshot.params.id;\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.patterns\n .getById(parseInt(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((pattern: Pattern) => {\n this.patternToSave = pattern;\n this.setFormValues();\n this.setPatternShiftRowData();\n });\n }\n }\n\n public savePattern(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.addPatternForm], this.document);\n if (isValid) {\n const patternToSave = this.getCurrentPattern();\n this.saving = true;\n\n const request: Observable = this.isEditingPattern() ? this.patterns.update(patternToSave) : this.patterns.save(patternToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n this.textileService.navigateAndShowToast(saveType, TextileDataType.SHIFT_PATTERN, this.PATTERN_TRANSLATION_KEY, this.isEditingPattern(), patternToSave.name, id);\n },\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingPattern() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public duplicatePattern(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.DUPLICATE_PATTERN).replace(':id', this.patternToSave.id.toString()));\n }\n\n public deletePattern(): void {\n this.textileService.removeConfirmation(this.getCurrentPattern(), TextileDataType.SHIFT_PATTERN, false, null, this.patterns);\n }\n\n public navigateBack(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.PATTERN));\n }\n\n public onNumDaysBlurred(): void {\n if (this.addPatternForm.value.numDays === null) {\n this.addPatternForm.controls.numDays.reset(this.DEFAULT_NUM_DAYS);\n }\n this.setPatternShiftRowData();\n }\n\n public onStartTimeBlurred(): void {\n if (AssertionUtils.isEmpty(this.addPatternForm.value.startTime)) {\n this.addPatternForm.controls.startTime.reset(this.DEFAULT_START_TIME);\n }\n this.setPatternShiftRowData();\n }\n\n public getLoadLink(): string {\n return ErrorHandlers.getLoadLink(NavigationUtils.getAbsolutePath(NavigationId.EDIT_PATTERN), this.addPatternForm.controls.name);\n }\n\n public getLoadEntry(): ContentSwitcherEntry {\n const editRoute = NavigationUtils.getNavigationRoute(NavigationId.EDIT_PATTERN);\n return {\n key: NavigationUtils.getAbsolutePath(NavigationId.EDIT_PATTERN),\n component: editRoute.component,\n routeData: editRoute.data as RouteData,\n data: {routeId: this.addPatternForm.controls.name?.errors?.entityId},\n entityName: this.translate.instant(this.PATTERN_TRANSLATION_KEY, {count: 1}).toLowerCase()\n };\n }\n\n public isEditingPattern(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === NavigationUtils.getRoute(NavigationId.EDIT_PATTERN);\n }\n\n private setFormValues(): void {\n const name = this.isEditingPattern() ? this.patternToSave.name : null;\n\n this.addPatternForm.reset({\n name,\n numDays: this.patternToSave.numDays,\n startTime: this.patternToSave.startTime.toFormat('hh:mm')\n });\n\n this.addPatternForm.controls.name.setAsyncValidators(AsyncUniqueValidator.createValidator(this.patterns, name));\n }\n\n private setPatternShiftRowData(): void {\n const patternShiftRowData: PatternShiftRowData[] = [];\n\n for (let i = 1; i <= this.addPatternForm.value.numDays; i++) {\n patternShiftRowData.push({day: i, scheduleItems: []});\n }\n\n this.patternToSave.patternShifts.sort((patternShiftA: PatternShift, patternShiftB: PatternShift) => patternShiftA.sequence - patternShiftB.sequence);\n this.patternToSave.patternShifts.forEach((patternShift: PatternShift) => {\n const patternStartTime = Duration.fromISOTime(this.addPatternForm.value.startTime);\n if (patternShift.dayIndex < this.addPatternForm.value.numDays && patternShift.startTime >= patternStartTime && patternShift.endTime <= patternStartTime.plus({days: 1, hours: 23, minutes: 59})) {\n patternShiftRowData[patternShift.dayIndex].scheduleItems.push(this.getScheduleItemFromPatternShift(patternShift));\n }\n });\n\n if (AssertionUtils.isNullOrUndefined(this.gridApi)) {\n this.config.rowData = patternShiftRowData;\n } else {\n this.gridApi.setGridOption('rowData', patternShiftRowData);\n }\n }\n\n private getCurrentPattern(): Pattern {\n const patternShifts: PatternShift[] = [];\n this.gridApi?.getGridOption('rowData').forEach((data: PatternShiftRowData) => {\n const selectedShiftNames: string[] = [];\n data.scheduleItems.forEach((scheduleItem: ScheduleItem, index: number) => {\n selectedShiftNames.push(scheduleItem.name);\n patternShifts.push(\n new PatternShift(\n scheduleItem.id,\n data.day - 1,\n this.patternToSave.patternShifts.flatMap((patternShift: PatternShift) => patternShift.shift).find((shift: Shift) => shift.name === scheduleItem.name),\n scheduleItem.startTime,\n scheduleItem.endTime,\n index + 1,\n selectedShiftNames.filter((name: string) => name === scheduleItem.name).length\n )\n );\n });\n });\n return new Pattern(\n this.isEditingPattern() ? this.patternToSave.id : null,\n this.addPatternForm.value.name,\n this.addPatternForm.value.numDays,\n Duration.fromISOTime(this.addPatternForm.value.startTime),\n patternShifts\n );\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(this.PATTERN_TRANSLATION_KEY, {count: 1})\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private getColumnDefs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('day', true)\n .withHeaderName('')\n .withMaxWidth(this.DAY_COLUMN_WIDTH)\n .withResizable(false)\n .withoutFilter()\n .withSuppressMovable('left')\n .withSuppressHeaderMenuButton()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('scheduleItems')\n .withHeaderComponent(TimelineHeaderComponent, () => ({startTime: Duration.fromISOTime(this.addPatternForm.value.startTime), totalHours: this.totalHours}) as TimelineHeaderParams)\n .withHeaderClass('no-padding')\n .withCellRenderer(\n TimelineRowComponent,\n () =>\n ({\n startTime: Duration.fromISOTime(this.addPatternForm.value.startTime),\n onRowButtonClicked: (data: PatternShiftRowData) => this.addPatternShift(data),\n onScheduleItemDeleted: (id: number | string) => this.deletePatternShift(id)\n }) as TimelineRowCellRendererParams\n )\n .withCellClass(['no-padding', 'border-none'])\n .withMinWidth(this.TIMELINE_COLUMN_WIDTH)\n .withResizable(false)\n .withoutFilter()\n .withSuppressMovable()\n .build()\n ];\n }\n\n private addPatternShift(data: PatternShiftRowData): void {\n const previousDayEndTime = this.gridApi\n .getDisplayedRowAtIndex(data.day - 2)\n ?.data?.scheduleItems?.at(-1)\n ?.endTime?.minus({days: 1});\n const nextDayStartTime = this.gridApi.getDisplayedRowAtIndex(data.day)?.data?.scheduleItems?.[0]?.startTime?.plus({days: 1});\n\n this.addPatternShiftDialogService\n .openContentSwitcherDialog({startTime: this.addPatternForm.value.startTime, rowData: data, previousDayEndTime, nextDayStartTime})\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((patternShifts: PatternShift[]) => {\n if (!AssertionUtils.isNullOrUndefined(patternShifts)) {\n this.patternToSave.patternShifts.push(patternShifts[0]);\n\n const filteredPatternShifts = this.patternToSave.patternShifts.filter((patternShift: PatternShift) => patternShift.dayIndex === data.day - 1);\n filteredPatternShifts.sort((patternShiftA: PatternShift, patternShiftB: PatternShift) => patternShiftA.startTime.as('minutes') - patternShiftB.startTime.as('minutes'));\n filteredPatternShifts.forEach((patternShift: PatternShift, index: number) => (patternShift.sequence = index + 1));\n\n const insertIndex = data.scheduleItems.filter((scheduleItem: ScheduleItem) => scheduleItem.startTime < patternShifts[0].startTime).length;\n data.scheduleItems.splice(insertIndex, 0, this.getScheduleItemFromPatternShift(patternShifts[0]));\n\n this.gridApi.applyTransaction({update: [data]});\n }\n });\n }\n\n private deletePatternShift(id: number | string): void {\n this.patternToSave.patternShifts = this.patternToSave.patternShifts.filter((patternShift: PatternShift) => patternShift.id !== id);\n }\n\n private getScheduleItemFromPatternShift(patternShift: PatternShift): ScheduleItem {\n return {\n id: patternShift.id,\n name: patternShift.shift.name,\n color: patternShift.shift.color,\n startTime: patternShift.startTime,\n endTime: patternShift.endTime\n };\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddPatternPageComponent} from './add/add-pattern-page.component';\nimport {PatternOverviewPageComponent} from './overview/pattern-overview-page.component';\n\nconst shared = {parentId: NavigationId.PATTERN_MODULE};\n\nexport const patternRoutes = [\n AuthorizedRouteFactory.createPrototypeComponentRoute(PatternOverviewPageComponent, {route: '', requiredPermission: Permission.SHIFT_PATTERN_VIEW, reuse: true, id: NavigationId.PATTERN, ...shared}),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPatternPageComponent, {\n route: 'add',\n requiredPermission: Permission.SHIFT_PATTERN_EDIT,\n reuse: true,\n id: NavigationId.ADD_PATTERN,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPatternPageComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.SHIFT_PATTERN_VIEW,\n reuse: true,\n id: NavigationId.EDIT_PATTERN,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPatternPageComponent, {\n route: 'add/:id',\n requiredPermission: Permission.SHIFT_PATTERN_EDIT,\n id: NavigationId.DUPLICATE_PATTERN,\n ...shared\n })\n];\n\nexport const patternRouting: ModuleWithProviders = RouterModule.forChild(patternRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {Pattern} from '@domain/calendar/pattern/pattern';\nimport {HttpPatternsService} from '@infrastructure/http/calendar/pattern/http-patterns.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {AssertionUtils, CrudOverviewDataBuilderFactoryService, CrudOverviewDataConfig, GridButtonClickedEvent, GridOptionsBuilder} from '@vdw/angular-component-library';\nimport {PatternOverviewService} from './pattern-overview.service';\n\n@Component({\n templateUrl: './pattern-overview-page.component.html'\n})\nexport class PatternOverviewPageComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls(TextileDataType.SHIFT_PATTERN);\n\n public constructor(\n private readonly crudOverviewDataBuilderFactory: CrudOverviewDataBuilderFactoryService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly patterns: HttpPatternsService,\n private readonly patternOverviewService: PatternOverviewService,\n private readonly router: Router,\n private readonly textileService: TextileService\n ) {}\n\n public ngOnInit(): void {\n const colDefs = this.patternOverviewService.getColumnDefs();\n\n this.config = this.crudOverviewDataBuilderFactory\n .getBuilder()\n .withRowData(this.patterns.getAll())\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: NavigationUtils.getNavigationData(NavigationId.ADD_PATTERN).requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: true\n } as CrudActions)\n })\n .withGridOptions(colDefs, GridIdentifier.SHIFT_PATTERN_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.patternOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false, true).build()\n )\n .withEntityName(NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey)\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n this.router.navigateByUrl(this.pageUrls[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id));\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.textileService.removeConfirmation(AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows() : rowNode.data, TextileDataType.SHIFT_PATTERN, false, null, this.patterns);\n }\n}\n","\n","export enum AddScheduleViewMode {\n MATCHING_CRITERIA\n}\n","
\n \n
\n @if (canShowFormBasedOnViewMode(VIEW_MODE.MATCHING_CRITERIA)) {\n \n }\n
\n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {MatchingCriteria} from '@domain/utilities/tool/matching-criteria';\nimport {MACHINE_OVERVIEW, MachineOverview} from '@infrastructure/http/machine-overview/machine-overview';\nimport {MACHINES, Machines} from '@infrastructure/http/machine/machines.interface';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {MatchingCriteriaData} from '@presentation/pages/utilities/tool/add/matching-criteria/matching-criteria-data.interface';\nimport {BaseComponent, ContentSwitcherNavigationInput, NavigationHelperPrototypeService, TabsMenuItem} from '@vdw/angular-component-library';\nimport {forkJoin, map, takeUntil} from 'rxjs';\nimport {ScheduleCustomSettingsComponent} from '../settings/schedule-custom-settings.component';\nimport {AddScheduleViewMode} from './add-schedule-view-mode.enum';\n\n@Component({\n selector: 'app-add-schedule-page',\n templateUrl: './add-schedule-page.component.html'\n})\nexport class AddSchedulePageComponent extends BaseComponent implements OnInit {\n public selectedMenuItem: TabsMenuItem = {value: AddScheduleViewMode.MATCHING_CRITERIA, translationKey: 'UTILITIES.TOOL.MATCHING_CRITERIA.MATCHING_CRITERIA'};\n public menuItems: TabsMenuItem[] = [this.selectedMenuItem];\n public matchingCriteria: MatchingCriteria[] = [];\n public matchingCriteriaData: MatchingCriteriaData = {machines: [], machineGroups: []};\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_SHIFT_SCHEDULE;\n public readonly VIEW_MODE = AddScheduleViewMode;\n\n public constructor(\n @Inject(MACHINES) private readonly machines: Machines,\n @Inject(MACHINE_OVERVIEW) private readonly machineOverview: MachineOverview,\n private readonly router: Router,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n forkJoin([this.machines.getAll(), this.machineOverview.getRootGroup()])\n .pipe(\n map(([machines, machineGroups]: [MachineOverviewList[], OverviewMachineGroup]) => [machines, machineGroups.groups]),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(([machines, machineGroups]: [MachineOverviewList[], OverviewMachineGroup[]]) => (this.matchingCriteriaData = {machines, machineGroups}));\n }\n\n public canShowFormBasedOnViewMode(viewMode: AddScheduleViewMode): boolean {\n return this.selectedMenuItem.value === viewMode;\n }\n\n public getSchedulePermission(): Permission {\n return NavigationUtils.getNavigationData(NavigationId.ADD_SCHEDULE).requiredPermission;\n }\n\n public cancel(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.SCHEDULE));\n }\n\n protected openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: ScheduleCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelper.navigateWithContentSwitcher(componentInfo);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {\n ColDefBuilderFactoryService,\n GridOptionsBuilder,\n InputChipCellRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef} from 'ag-grid-community';\n\n@Injectable()\nexport class ScheduleOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withHeaderName('GENERAL.NAME').withColIdAndField('name', true).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withHeaderName('GENERAL.PATTERN.PATTERN').withColIdAndField('patterns').withCellRenderer(InputChipCellRendererComponent).build()\n ];\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant(NavigationUtils.getNavigationData(NavigationId.PATTERN_MODULE).navigationKey, {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddSchedulePageComponent} from './add/add-schedule-page.component';\nimport {ScheduleOverviewPageComponent} from './overview/schedule-overview-page.component';\n\nconst shared = {parentId: NavigationId.SCHEDULE_MODULE};\n\nexport const scheduleRoutes = [\n AuthorizedRouteFactory.createPrototypeComponentRoute(ScheduleOverviewPageComponent, {\n route: '',\n requiredPermission: Permission.SHIFT_SCHEDULE_VIEW,\n reuse: true,\n id: NavigationId.SCHEDULE,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddSchedulePageComponent, {\n route: 'add',\n requiredPermission: Permission.SHIFT_SCHEDULE_EDIT,\n reuse: true,\n id: NavigationId.ADD_SCHEDULE,\n ...shared\n })\n];\n\nexport const scheduleRouting: ModuleWithProviders = RouterModule.forChild(scheduleRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {Schedule} from '@domain/calendar/schedule/schedule';\nimport {HttpScheduleService} from '@infrastructure/http/calendar/schedule/http-schedules.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {ContentSwitcherNavigationInput, CrudOverviewDataBuilderFactoryService, CrudOverviewDataConfig, GridOptionsBuilder, NavigationHelperPrototypeService} from '@vdw/angular-component-library';\nimport {ScheduleCustomSettingsComponent} from '../settings/schedule-custom-settings.component';\nimport {ScheduleOverviewService} from './schedule-overview.service';\n\n@Component({\n templateUrl: './schedule-overview-page.component.html'\n})\nexport class ScheduleOverviewPageComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls(TextileDataType.SHIFT_SCHEDULE);\n\n public constructor(\n private readonly crudOverviewDataBuilderFactory: CrudOverviewDataBuilderFactoryService,\n private readonly schedule: HttpScheduleService,\n private readonly scheduleOverviewService: ScheduleOverviewService,\n private readonly router: Router,\n private readonly navigationHelperService: NavigationHelperPrototypeService\n ) {}\n\n public ngOnInit(): void {\n const colDefs = this.scheduleOverviewService.getColumnDefs();\n\n this.config = this.crudOverviewDataBuilderFactory\n .getBuilder()\n .withRowData(this.schedule.getAll())\n .withGridOptions(colDefs, GridIdentifier.SCHEDULE_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.scheduleOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .withEntityName(NavigationUtils.getNavigationData(NavigationId.SCHEDULE_MODULE).navigationKey)\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .withCustomSettingsClicked(() => this.openCustomSettings())\n .build();\n }\n\n private openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: ScheduleCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelperService.navigateWithContentSwitcher(componentInfo);\n }\n}\n","\n","export enum CalendarFormat {\n STANDARD_GREGORIAN = 'STANDARD_GREGORIAN',\n ISO_8601 = 'ISO_8601'\n}\n","export enum StartOfDay {\n FIRST_SHIFT_START = 'FIRST_SHIFT_START',\n LAST_SHIFT_END = 'LAST_SHIFT_END'\n}\n","export enum StartOfWeek {\n MONDAY = 'MONDAY',\n TUESDAY = 'TUESDAY',\n WEDNESDAY = 'WEDNESDAY',\n THURSDAY = 'THURSDAY',\n FRIDAY = 'FRIDAY',\n SATURDAY = 'SATURDAY',\n SUNDAY = 'SUNDAY'\n}\n","
\n \n
\n
\n
\n
\n
{{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.START_OF_THE_YEAR' | bmsTranslate }}
\n
\n \n @for (item of calenderFormats; track $index) {\n \n {{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.' + item | bmsTranslate }}\n \n }\n \n
\n
\n
\n \n {{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.START_OF_THE_WEEK' | bmsTranslate }}\n \n @for (item of startOfWeekFormats; track $index) {\n {{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.WEEK_DAYS.' + item | bmsTranslate }} \n }\n \n \n
\n
\n
{{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.START_OF_THE_DAY' | bmsTranslate }}
\n
\n \n @for (item of startOfDayFormats; track $index) {\n \n {{ 'CALENDAR.SCHEDULE.CUSTOM_SETTINGS.' + item | bmsTranslate }}\n \n }\n \n
\n
\n
\n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {CalendarFormat} from '@domain/calendar/schedule/custom-settings/calendar-format.enum';\nimport {StartOfDay} from '@domain/calendar/schedule/custom-settings/start-of-day.enum';\nimport {StartOfWeek} from '@domain/calendar/schedule/custom-settings/start-of-week.enum';\nimport {EnumUtils, NavigationHelperPrototypeService, TabsMenuItem} from '@vdw/angular-component-library';\nimport {ScheduleCustomSettingsForm} from './schedule-custom-settings.form';\n\n@Component({\n selector: 'app-schedule-custom-settings',\n templateUrl: './schedule-custom-settings.component.html',\n styleUrls: ['./schedule-custom-settings.component.scss']\n})\nexport class ScheduleCustomSettingsComponent implements OnInit {\n public scheduleForm: ScheduleCustomSettingsForm;\n public readonly calenderFormats = EnumUtils.getEnumValues(CalendarFormat);\n public readonly startOfWeekFormats = EnumUtils.getEnumValues(StartOfWeek);\n public readonly startOfDayFormats = EnumUtils.getEnumValues(StartOfDay);\n\n protected SCHEDULE_TRANSLATION_KEY = 'CALENDAR.SCHEDULE.SCHEDULE';\n protected generalTab: TabsMenuItem = {\n value: 'generalTab',\n translationKey: 'GENERAL.GENERAL'\n };\n\n public constructor(\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly formBuilder: FormBuilder\n ) {}\n\n public ngOnInit(): void {\n this.setFormFields();\n }\n\n protected navigateBack(): void {\n this.navigationHelper.navigateBack();\n }\n\n private setFormFields(): void {\n this.scheduleForm = this.formBuilder.group({\n calendarFormat: [CalendarFormat.STANDARD_GREGORIAN],\n startOfWeek: [StartOfWeek.MONDAY],\n startOfDay: [StartOfDay.FIRST_SHIFT_START]\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {GridColorPreviewCellRendererParams} from '@presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview-cell-renderer-params';\nimport {GridColorPreviewComponent} from '@presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview.component';\nimport {\n ColDefBuilderFactoryService,\n Color,\n ColorConstants,\n convertHexadecimalColorCodeToRGB,\n CrudColdef,\n GridOptionsBuilder,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Injectable({providedIn: 'root'})\nexport class ShiftOverviewService {\n private readonly PAGE_URLS = LastModifiedCardUtils.getPageUrls('shift');\n\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(enableClickableName: boolean = true): CrudColdef {\n return {\n colDefs: [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.NAME')\n .withColIdAndField('name', true)\n .withCellRenderer(\n GridColorPreviewComponent,\n (params: ICellRendererParams) =>\n ({\n color: new Color(null, params.data.name, convertHexadecimalColorCodeToRGB(ColorConstants[`${params.data.color}_500`]), false),\n editPageUrl: this.PAGE_URLS.edit,\n enableClickableName\n }) as GridColorPreviewCellRendererParams\n )\n .withComparator(StringUtils.stringComparator)\n .build()\n ],\n rowActionsComplete: null\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('CALENDAR.SHIFT.SHIFT', {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","
\n \n
\n
\n \n \n \n \n \n \n \n \n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {HttpShiftsService} from '@infrastructure/http/calendar/shift/http-shifts.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ColorConstants,\n ColorPickerMode,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n FormValidationHelper,\n noSpaceValidator,\n PresetColors,\n SaveType,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {finalize, Observable, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './add-shift-page.component.html'\n})\nexport class AddShiftPageComponent extends BaseComponent implements OnInit {\n public selectedMenuItem: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL'};\n public addShiftForm: FormGroup<{name: FormControl; color: FormControl}>;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_SHIFT;\n public readonly SAVE_TYPE = SaveType;\n public readonly SHIFT_TRANSLATION_KEY = 'CALENDAR.SHIFT.SHIFT';\n public readonly LIMITED = ColorPickerMode.LIMITED;\n\n private shiftToSave: Shift;\n\n public constructor(\n @Inject(DOCUMENT) private document: Document,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly formBuilder: FormBuilder,\n private readonly removeConfirmation: RemoveConfirmationService,\n private readonly router: Router,\n private readonly shifts: HttpShiftsService,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n\n const id = this.activatedRoute.snapshot.params.id;\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.shifts\n .getById(parseInt(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((shift: Shift) => {\n this.shiftToSave = shift;\n this.setFormValues();\n });\n }\n }\n\n public saveShift(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.addShiftForm], this.document);\n if (isValid) {\n const shiftToSave = this.getCurrentShift();\n this.saving = true;\n\n const request: Observable = this.isEditingShift() ? this.shifts.update(shiftToSave) : this.shifts.save(shiftToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => this.textileService.navigateAndShowToast(saveType, TextileDataType.SHIFT, this.SHIFT_TRANSLATION_KEY, this.isEditingShift(), shiftToSave.name, id),\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingShift() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public duplicateShift(): void {\n this.router.navigateByUrl(RouteUtils.paths.calendar.shift.duplicateShift.absolutePath.replace(':id', this.shiftToSave.id.toString()));\n }\n\n public deleteShift(): void {\n const data = this.getCurrentShift();\n this.removeConfirmation.open(data, this.shifts.delete(data.id), this.SHIFT_TRANSLATION_KEY, null, this.shifts.getConflicts(data.id));\n }\n\n public navigateBack(): void {\n this.router.navigateByUrl(RouteUtils.paths.calendar.shift.absolutePath);\n }\n\n public getLoadLink(): string {\n return ErrorHandlers.getLoadLink(RouteUtils.paths.calendar.shift.editShift.absolutePath, this.addShiftForm.controls.name);\n }\n\n public isEditingShift(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.calendar.shift.editShift.path;\n }\n\n private setFormFields(): void {\n this.addShiftForm = this.formBuilder.group({\n name: this.formBuilder.control(null, [Validators.required, noSpaceValidator]),\n color: this.formBuilder.control(ColorConstants[`${PresetColors.VIOLET}_500`])\n });\n\n this.setNameAsyncValidator();\n\n this.selectedMenuItem.form = this.addShiftForm;\n }\n\n private setFormValues(): void {\n const name = this.isEditingShift() ? this.shiftToSave.name : null;\n\n this.addShiftForm.reset({\n name: name,\n color: ColorConstants[`${this.shiftToSave.color}_500`]\n });\n\n this.setNameAsyncValidator(name);\n }\n\n private setNameAsyncValidator(name: string = null): void {\n this.addShiftForm.controls.name.setAsyncValidators([AsyncUniqueValidator.createValidator(this.shifts, name)]);\n }\n\n private getCurrentShift(): Shift {\n return new Shift(\n this.isEditingShift() ? this.shiftToSave.id : null,\n this.addShiftForm.value.name,\n EnumUtils.getKeyFromValue(ColorConstants, this.addShiftForm.controls.color.value).slice(0, -4) as PresetColors\n );\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(this.SHIFT_TRANSLATION_KEY, {count: 1})\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddShiftPageComponent} from './add/add-shift-page.component';\nimport {ShiftOverviewPageComponent} from './overview/shift-overview-page.component';\n\nconst shared = {parentId: NavigationId.SHIFT_MODULE};\n\nexport const shiftRoutes: Routes = [\n AuthorizedRouteFactory.createPrototypeComponentRoute(ShiftOverviewPageComponent, {route: '', requiredPermission: Permission.SHIFT_VIEW, reuse: true, id: NavigationId.SHIFT, ...shared}),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddShiftPageComponent, {\n route: 'add',\n requiredPermission: Permission.SHIFT_EDIT,\n reuse: true,\n id: NavigationId.ADD_SHIFT,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddShiftPageComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.SHIFT_VIEW,\n reuse: true,\n id: NavigationId.EDIT_SHIFT,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddShiftPageComponent, {\n route: 'add/:id',\n requiredPermission: Permission.SHIFT_EDIT,\n id: NavigationId.DUPLICATE_SHIFT,\n ...shared\n })\n];\n\nexport const shiftRouting: ModuleWithProviders = RouterModule.forChild(shiftRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Shift} from '@domain/calendar/shift/shift';\nimport {HttpShiftsService} from '@infrastructure/http/calendar/shift/http-shifts.service';\nimport {AssertionUtils, CrudOverviewDataBuilderFactoryService, CrudOverviewDataConfig, GridButtonClickedEvent, GridOptionsBuilder} from '@vdw/angular-component-library';\nimport {ShiftOverviewService} from './shift-overview.service';\n\n@Component({\n templateUrl: './shift-overview-page.component.html'\n})\nexport class ShiftOverviewPageComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n\n private readonly GRID_IDENTIFIER = GridIdentifier.SHIFT_OVERVIEW;\n private readonly PAGE_URLS = LastModifiedCardUtils.getPageUrls('shift');\n private readonly SHIFT_TRANSLATION_KEY = 'CALENDAR.SHIFT.SHIFT';\n\n public constructor(\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly removeConfirmation: RemoveConfirmationService,\n private readonly router: Router,\n private readonly shifts: HttpShiftsService,\n private readonly shiftOverviewService: ShiftOverviewService\n ) {}\n\n public ngOnInit(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withNewClicked(() => this.router.navigateByUrl(this.PAGE_URLS.add))\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: RouteUtils.paths.calendar.shift.editShift.requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: true\n } as CrudActions)\n })\n .withCrudGridOptions(this.shiftOverviewService.getColumnDefs(), this.GRID_IDENTIFIER, null, (builder: GridOptionsBuilder) =>\n this.shiftOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false, true).build()\n )\n .withEntityName(this.SHIFT_TRANSLATION_KEY)\n .withRowData(this.shifts.getAll())\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n this.router.navigateByUrl(this.PAGE_URLS[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id));\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n const data: Shift = AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0] : rowNode.data;\n this.removeConfirmation.open(data, this.shifts.delete(data.id), this.SHIFT_TRANSLATION_KEY, gridApi, this.shifts.getConflicts(data.id));\n }\n}\n","\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {DyeingMachineType} from '@domain/machine/dyeing-machine-type';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {TuftingMachineType} from '@domain/machine/tufting-machine-type';\nimport {WeavingMachineType} from '@domain/machine/weaving-machine-type';\nimport {HttpMachineTypesService} from '@infrastructure/http/machine-type/http-machine-types.service';\nimport {MachineTypeDetail} from '@presentation/pages/machine-overview/add-equipment-kind/generic-equipment-kind-form/select-machine-type/machine-type-detail.interface';\nimport {ColDefBuilderFactoryService, StringUtils, TranslateService} from '@vdw/angular-component-library';\nimport {ColDef, ValueFormatterParams, ValueGetterParams} from 'ag-grid-community';\nimport {Observable} from 'rxjs';\nimport {GenericMachineType} from '../machine-form';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SelectMachineTypeService {\n private readonly translationKeyMap = new Map([\n ['centimeter', 'GENERAL.UNIT.CENTIMETER'],\n ['inch', 'GENERAL.UNIT.INCH'],\n ['gauge', 'GENERAL.DIMENSIONS.GAUGE'],\n ['manufacturer', 'MACHINE.MANUFACTURER'],\n ['model', 'MACHINE.MODEL'],\n ['technology', 'MACHINE.TECHNOLOGY'],\n ['technologies', 'MACHINE.TECHNOLOGIES'],\n ['width', 'GENERAL.DIMENSIONS.WIDTH'],\n ['controllerType', 'MACHINE.CONTROLLER_TYPE'],\n ['kg', 'GENERAL.UNIT.KILOGRAM'],\n ['minimumLoad', 'MACHINE.MINIMUM_LOAD'],\n ['maximumLoad', 'MACHINE.MAXIMUM_LOAD'],\n ['celsius', 'GENERAL.UNIT.CELSIUS'],\n ['maximumTemperature', 'MACHINE.MAXIMUM_TEMPERATURE'],\n ['standardSpeed', 'MACHINE.DETAILS.STANDARD_SPEED'],\n ['standardSpeeds', 'MACHINE.DETAILS.STANDARD_SPEEDS']\n ]);\n\n public constructor(\n private readonly machineTypes: HttpMachineTypesService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translateService: TranslateService\n ) {}\n\n public getColumnDefsForMachineType(equipmentType: MachineType): ColDef[] {\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return this.getColumnDefsForWeavingMachine();\n case MachineType.TUFT:\n return this.getColumnDefsForTuftingMachine();\n case MachineType.WINDER:\n return this.getColumnDefsForWinderMachine();\n case MachineType.DYEING:\n return this.getColumnDefsForDyeingMachine();\n case MachineType.PLASTIC_MACHINE:\n return this.getColumnDefsForPlasticsMachine();\n }\n }\n\n public getAvailableTypes(equipmentType: MachineType): Observable {\n return this.machineTypes.getAll(equipmentType);\n }\n\n public canSelectMachineType(machineType: MachineType): boolean {\n return [\n MachineType[MachineType.TUFT],\n MachineType[MachineType.WEAVING_MACHINE],\n MachineType[MachineType.WINDER],\n MachineType[MachineType.DYEING],\n MachineType[MachineType.PLASTIC_MACHINE]\n ].includes(MachineType[machineType]);\n }\n\n public getBackendRoute(equipmentType: MachineType): string {\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return 'weaving';\n case MachineType.TUFT:\n return 'tufting';\n case MachineType.WINDER:\n return 'winder';\n case MachineType.DYEING:\n return 'dyeing';\n }\n }\n\n public getTranslationKey(equipmentType: MachineType): string {\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return 'MACHINE.DETAILS.MACHINE_TYPES.WEAVING';\n case MachineType.TUFT:\n return 'MACHINE.DETAILS.MACHINE_TYPES.TUFTING';\n case MachineType.WINDER:\n return 'MACHINE.DETAILS.MACHINE_TYPES.WINDER';\n case MachineType.DYEING:\n return 'MACHINE.DETAILS.MACHINE_TYPES.DYEING';\n case MachineType.PLASTIC_MACHINE:\n return 'MACHINE.DETAILS.MACHINE_TYPES.PLASTIC';\n }\n }\n\n public getMachineTypeDetails(equipmentType: MachineType, machineType: GenericMachineType): MachineTypeDetail[] {\n const basicMachineTypeDetails: MachineTypeDetail[] = [\n {position: 1, label: this.translationKeyMap.get('manufacturer'), value: machineType.manufacturer?.name},\n {position: 2, label: this.translationKeyMap.get('model'), value: machineType.model}\n ];\n const technology: MachineTypeDetail = {\n position: 3,\n label: this.translationKeyMap.get('technology'),\n value: (machineType as WeavingMachineType).technology?.name\n ? this.translateService.instant(`${this.translationKeyMap.get('technologies')}.${(machineType as WeavingMachineType).technology.name}`)\n : null\n };\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return [\n ...basicMachineTypeDetails,\n technology,\n {position: 4, label: this.translationKeyMap.get('width'), value: (machineType as WeavingMachineType).width.toString(10), labelForUnit: this.translationKeyMap.get('centimeter')}\n ];\n case MachineType.TUFT:\n return [\n ...basicMachineTypeDetails,\n {position: 3, label: this.translationKeyMap.get('width'), value: (machineType as TuftingMachineType).width.toString(10), labelForUnit: this.translationKeyMap.get('centimeter')},\n {position: 4, label: this.translationKeyMap.get('gauge'), value: (machineType as TuftingMachineType).gauge.fractionalValueAsString, labelForUnit: this.translationKeyMap.get('inch')}\n ];\n case MachineType.WINDER:\n return basicMachineTypeDetails;\n case MachineType.DYEING:\n return [\n ...basicMachineTypeDetails,\n technology,\n {\n position: 4,\n label: this.translationKeyMap.get('controllerType'),\n value: (machineType as DyeingMachineType).controllerType?.name\n },\n {position: 5, label: this.translationKeyMap.get('minimumLoad'), value: (machineType as DyeingMachineType).minimumLoadInKg?.toString(), labelForUnit: this.translationKeyMap.get('kg')},\n {position: 6, label: this.translationKeyMap.get('maximumLoad'), value: (machineType as DyeingMachineType).maximumLoadInKg?.toString(), labelForUnit: this.translationKeyMap.get('kg')},\n {\n position: 7,\n label: this.translationKeyMap.get('maximumTemperature'),\n value: (machineType as DyeingMachineType).maximumTemperatureInCelsius?.toString(),\n labelForUnit: this.translationKeyMap.get('celsius')\n }\n ];\n case MachineType.PLASTIC_MACHINE:\n return [\n basicMachineTypeDetails[0],\n technology,\n {\n position: 4,\n label: this.translationKeyMap.get('standardSpeed'),\n value: this.translateService.instant(`${this.translationKeyMap.get('standardSpeeds')}.${(machineType as PlasticsMachineType).standardSpeed}`)\n }\n ];\n }\n }\n\n public getMachineTypeGridIdentifier(equipmentType: MachineType): GridIdentifier {\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return GridIdentifier.SELECT_WEAVING_MACHINE_TYPE;\n case MachineType.TUFT:\n return GridIdentifier.SELECT_TUFT_MACHINE_TYPE;\n case MachineType.WINDER:\n return GridIdentifier.SELECT_WINDER_MACHINE_TYPE;\n case MachineType.DYEING:\n return GridIdentifier.SELECT_DYEING_MACHINE_TYPE;\n case MachineType.PLASTIC_MACHINE:\n return GridIdentifier.SELECT_PLASTICS_MACHINE_TYPE;\n }\n }\n\n public getUrlToAddPage(equipmentType: MachineType): string {\n switch (equipmentType) {\n case MachineType.WEAVING_MACHINE:\n return RouteUtils.paths.texState.addWeavingMachineType.absolutePath;\n case MachineType.TUFT:\n return RouteUtils.paths.texState.addTuftingMachineType.absolutePath;\n case MachineType.WINDER:\n return RouteUtils.paths.texState.addWinderMachineType.absolutePath;\n case MachineType.DYEING:\n return RouteUtils.paths.texState.addDyeingMachineType.absolutePath;\n case MachineType.PLASTIC_MACHINE:\n return RouteUtils.paths.texState.addPlasticMachineType.absolutePath;\n }\n }\n\n private getColumnDefsForWeavingMachine(): ColDef[] {\n return [\n ...this.getGenericColumns(),\n this.getTechnologyColDef(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('width')\n .withColId('width')\n .withHeaderName(this.translationKeyMap.get('width'))\n .withHeaderClass('right')\n .withCellClass('right')\n .withTooltipField('width')\n .withValueFormatter((params: ValueFormatterParams) => this.addUnitToString(params.value, this.translationKeyMap.get('centimeter')))\n .build()\n ];\n }\n\n private getColumnDefsForTuftingMachine(): ColDef[] {\n return [\n ...this.getGenericColumns(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('width')\n .withColId('width')\n .withHeaderName(this.translationKeyMap.get('width'))\n .withHeaderClass('right')\n .withCellClass('right')\n .withTooltipField('width')\n .withValueFormatter((params: ValueFormatterParams) => this.addUnitToString(params.value, this.translationKeyMap.get('centimeter')))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('gauge')\n .withColId('gauge')\n .withHeaderName(this.translationKeyMap.get('gauge'))\n .withHeaderClass('right')\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('gauge.name')\n .withValueGetter((params: ValueGetterParams) => params.data.gauge.name)\n .build()\n ];\n }\n\n private getColumnDefsForWinderMachine(): ColDef[] {\n return [\n ...this.getGenericColumns(),\n this.colDefBuilderFactoryService.getBuilder().withField('model').withColId('model').withHeaderName(this.translationKeyMap.get('model')).withTooltipField('model').build()\n ];\n }\n\n private getColumnDefsForDyeingMachine(): ColDef[] {\n return [\n ...this.getGenericColumns(),\n this.getTechnologyColDef(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('controllerType.name')\n .withColId('controllerType')\n .withHeaderName(this.translationKeyMap.get('controllerType'))\n .withComparator(StringUtils.stringComparator)\n .build()\n ];\n }\n\n private getColumnDefsForPlasticsMachine(): ColDef[] {\n return [...this.getGenericColumns(), this.getTechnologyColDef()];\n }\n\n private getGenericColumns(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('name').withColId('name').withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).withTooltipField('name').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('manufacturer.name')\n .withColId('manufacturer')\n .withHeaderName(this.translationKeyMap.get('manufacturer'))\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('manufacturer.name')\n .build()\n ];\n }\n\n private getTechnologyColDef(): ColDef {\n return this.colDefBuilderFactoryService\n .getBuilder()\n .withField('technology.name')\n .withColId('technology')\n .withHeaderName(this.translationKeyMap.get('technology'))\n .withComparator(StringUtils.stringComparator)\n .withValueFormatter((params: ValueFormatterParams) => (params.value ? this.translateService.instant(`${this.translationKeyMap.get('technologies')}.${params.value}`) : null))\n .build();\n }\n\n private addUnitToString(value: string | number, unitTranslationKey: string): string {\n return value + ' ' + this.translateService.instant(unitTranslationKey);\n }\n}\n","import {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {MachineOverviewList} from './machine-overview-list';\n\nexport class PlasticMachineOverviewList extends MachineOverviewList {\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _plasticsMachineType: PlasticsMachineType;\n\n public constructor(id: number, name: string, machineGroup: MachineGroup, standardSpeed: number, standardEfficiency: number, plasticsMachineType: PlasticsMachineType) {\n super(id, name, null, null, machineGroup, MachineType.PLASTIC_MACHINE);\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._plasticsMachineType = plasticsMachineType;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public get plasticsMachineType(): PlasticsMachineType {\n return this._plasticsMachineType;\n }\n}\n","import {Gauge} from '@domain/machine/gauge';\nimport {JacquardMachineManufacturerType} from '@domain/machine/jacquard-machine-manufacturer-type.enum';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineOverviewList} from './machine-overview-list';\n\nexport class TuftingMachineOverviewList extends MachineOverviewList {\n private _widthInCm: number;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _gauge: Gauge;\n\n public constructor(\n id: number,\n name: string,\n manufacturer: MachineManufacturer,\n type: JacquardMachineManufacturerType,\n machineGroup: MachineGroup,\n machineType: MachineType,\n widthInCm: number,\n standardSpeed: number,\n standardEfficiency: number,\n gauge: Gauge\n ) {\n super(id, name, manufacturer, type, machineGroup, machineType);\n this._widthInCm = widthInCm;\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._gauge = gauge;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public get gauge(): Gauge {\n return this._gauge;\n }\n}\n","import {JacquardMachineManufacturerType} from '@domain/machine/jacquard-machine-manufacturer-type.enum';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineOverviewList} from './machine-overview-list';\n\nexport class WeavingMachineOverviewList extends MachineOverviewList {\n private _widthInCm: number;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _numberOfFeeders: number;\n private _numberOfShafts: number;\n\n public constructor(\n id: number,\n name: string,\n manufacturer: MachineManufacturer,\n type: JacquardMachineManufacturerType,\n machineGroup: MachineGroup,\n machineType: MachineType,\n widthInCm: number,\n standardSpeed: number,\n numberOfShafts: number,\n numberOfFeeders: number,\n standardEfficiency: number\n ) {\n super(id, name, manufacturer, type, machineGroup, machineType);\n\n this._widthInCm = widthInCm;\n this._standardSpeed = standardSpeed;\n this._numberOfShafts = numberOfShafts;\n this._numberOfFeeders = numberOfFeeders;\n this._standardEfficiency = standardEfficiency;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public get numberOfShafts(): number {\n return this._numberOfShafts;\n }\n\n public get numberOfFeeders(): number {\n return this._numberOfFeeders;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n}\n","import {Gauge} from '@domain/machine/gauge';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {MachineOverviewList} from './machine-overview-list';\nimport {PlasticMachineOverviewList} from './plastic-machine-overview-list';\nimport {TuftingMachineOverviewList} from './tufting-machine-overview-list';\nimport {WeavingMachineOverviewList} from './weaving-machine-overview-lists';\n\nexport class MachineOverviewListHelper {\n public static fromJSON(machineJSON: any): MachineOverviewList {\n let machineManufacturer: MachineManufacturer = null;\n let machineGroup: MachineGroup = null;\n\n if (!isNil(machineJSON.manufacturer)) {\n machineManufacturer = new MachineManufacturer(machineJSON.manufacturer.id, machineJSON.manufacturer.name);\n }\n\n if (!isNil(machineJSON.machineGroup)) {\n machineGroup = new MachineGroup(machineJSON.machineGroup.id, machineJSON.machineGroup.name);\n }\n\n const machineType: MachineType = MachineType[`${machineJSON.machineType}`] ?? MachineType.UNDEFINED;\n const numberOfCreelPositions = machineJSON?.numberOfCreelPositions;\n const orderId = machineJSON?.orderId;\n const dentsForFabric = machineJSON?.dentsForFabric;\n\n if (machineType === MachineType.WEAVING_MACHINE) {\n const widthInCm = machineJSON.widthInCm;\n const standardSpeed = machineJSON.standardSpeed;\n const numberOfShafts = machineJSON.numberOfShafts;\n const numberOfFeeders = machineJSON.numberOfFeeders;\n const standardEfficiency = machineJSON.standardEfficiency;\n\n return new WeavingMachineOverviewList(\n machineJSON.id,\n machineJSON.name,\n machineManufacturer,\n machineJSON.type,\n machineGroup,\n machineType,\n widthInCm,\n standardSpeed,\n numberOfShafts,\n numberOfFeeders,\n standardEfficiency\n );\n }\n\n if (machineType === MachineType.TUFT) {\n return new TuftingMachineOverviewList(\n machineJSON.id,\n machineJSON.name,\n machineManufacturer,\n machineJSON.type,\n machineGroup,\n machineType,\n machineJSON.widthInCm,\n machineJSON.standardSpeed,\n machineJSON.standardEfficiency,\n AssertionUtils.isNullOrUndefined(machineJSON.gauge) ? null : Gauge.fromJSON(machineJSON.gauge)\n );\n }\n\n if (machineType === MachineType.PLASTIC_MACHINE) {\n return new PlasticMachineOverviewList(\n machineJSON.id,\n machineJSON.name,\n machineGroup,\n machineJSON.standardSpeedInCycleTime,\n machineJSON.standardEfficiency,\n AssertionUtils.isNullOrUndefined(machineJSON.plasticMachineType) ? null : PlasticsMachineType.fromJSON(machineJSON.plasticMachineType)\n );\n }\n\n return new MachineOverviewList(machineJSON.id, machineJSON.name, machineManufacturer, machineJSON.type, machineGroup, machineType, numberOfCreelPositions, orderId, dentsForFabric);\n }\n}\n","export enum JacquardMachineManufacturerType {\n PTR_PTX_SINGLE_WIDTH = 'PTR/PTX - single width',\n PTR_PTX_DOUBLE_WIDTH = 'PTR/PTX - double width (sisal)',\n HMI_SINGLE_WIDTH = 'HMI - single width',\n HMI_DOUBLE_WIDTH = 'HMI - double width (sisal)',\n HMI_AXMINSTER = 'HMI Axminster',\n S500 = 'S500',\n S600_NO_EXF = 'S600 (no EXF)',\n S600 = 'S600',\n S800 = 'S800',\n S200_S250 = 'S200_S250',\n CI = 'Ci',\n SPLIT_14 = 'Split: 1.4Mb',\n SPLIT = 'Split: none',\n FLAT_SPLIT_14 = 'Flat Split: 1.4Mb',\n FLAT_SPLIT = 'Flat Split: none',\n CARPET = 'Carpet',\n FLAT_WEAVE = 'Flat weave',\n CARPET_ALPHA = 'Carpet (Alpha 400+)',\n OLD_SPLIT_14 = 'Old -Split: 1.4Mb',\n OLD_SPLIT = 'Old -Split: none',\n NEW_SPLIT_14 = 'New -Split: 1.4Mb',\n NEW_SPLIT = 'New -Split: none',\n FLAT_OLD_SPLIT_14 = 'Flat Old-Split: 1.4Mb',\n FLAT_OLD_SPLIT = 'Flat Old-Split: none',\n FLAT_NEW_SPLIT_14 = 'Flat New-Split: 1.4Mb',\n FLAT_NEW_SPLIT = 'Flat New-Split: none',\n HMI_PLUS_SINGLE_WIDTH = 'HMI+ - single width',\n HMI_PLUS_DOUBLE_WIDTH = 'HMI+ - double width (sisal)',\n HMI_PLUS_AXMINSTER = 'HMI+ Axminster'\n}\n","import {JacquardMachineManufacturerType} from '@domain/machine/jacquard-machine-manufacturer-type.enum';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineManufacturer} from '@domain/machine/machine-manufacturer';\nimport {MachineType} from '@domain/machine/machine-type.enum';\n\nexport class MachineOverviewList {\n private _id: number;\n private _name: string;\n private _manufacturer: MachineManufacturer;\n private _type: JacquardMachineManufacturerType;\n private _machineGroup: MachineGroup;\n private _machineType: MachineType;\n private _numberOfCreelPositions: number;\n private _orderId: string;\n private _dentsForFabric: number;\n\n public constructor(\n id: number,\n name: string,\n manufacturer: MachineManufacturer,\n type: JacquardMachineManufacturerType,\n machineGroup: MachineGroup,\n machineType: MachineType,\n numberOfCreelPositions?: number,\n orderId?: string,\n dentsForFabric?: number\n ) {\n this._id = id;\n this._name = name;\n this._manufacturer = manufacturer;\n this._type = type;\n this._machineGroup = machineGroup;\n this._machineType = machineType;\n this._numberOfCreelPositions = numberOfCreelPositions;\n this._orderId = orderId;\n this._dentsForFabric = dentsForFabric;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get manufacturer(): MachineManufacturer {\n return this._manufacturer;\n }\n\n public get type(): JacquardMachineManufacturerType {\n return this._type;\n }\n\n public get machineGroup(): MachineGroup {\n return this._machineGroup;\n }\n\n public get machineType(): MachineType {\n return this._machineType;\n }\n\n public get numberOfCreelPositions(): number {\n return this._numberOfCreelPositions;\n }\n\n public get orderId(): string {\n return this._orderId;\n }\n\n public get dentsForFabric(): number {\n return this._dentsForFabric;\n }\n\n public static getRandomMachineWithIdAndMachineGroup(id: number, machineGroup: MachineGroup, machineType: MachineType = MachineType.CARPET_LOOM): MachineOverviewList {\n const machineManufacturerBonas: MachineManufacturer = new MachineManufacturer(1, 'Bonas');\n return new MachineOverviewList(id, `${id}`, machineManufacturerBonas, JacquardMachineManufacturerType.S800, machineGroup, machineType);\n }\n}\n","import {DimensionsInPx} from '@domain/dimensions-in-px';\n\nexport enum MachineOverviewViewMode {\n DETAILVIEW = 'DETAILVIEW',\n OVERVIEW = 'OVERVIEW',\n LISTVIEW = 'LISTVIEW',\n GRIDVIEW = 'GRIDVIEW',\n PHYSICALVIEW = 'PHYSICALVIEW'\n}\n\nexport namespace MachineOverviewViewMode {\n export function getMachineDimensionsForViewMode(mode: MachineOverviewViewMode): DimensionsInPx {\n let result: DimensionsInPx = null;\n\n switch (mode) {\n case MachineOverviewViewMode.OVERVIEW:\n result = {\n widthInPx: 64,\n heightInPx: 96\n };\n break;\n case MachineOverviewViewMode.DETAILVIEW:\n result = {\n widthInPx: 182,\n heightInPx: 165\n };\n break;\n }\n return result;\n }\n}\n","\n \n
\n {{ formattedReportItem }}\n
\n
\n
\n
\n {{ getEfficiencyValue() }}%\n
\n
\n","import {Component} from '@angular/core';\nimport {MachineEfficiencyLevel} from '@domain/machine/machine-efficiency-level.enum';\nimport {MachineStatus} from '@domain/machine/machine-status.enum';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {ReportDataSetTemplate} from '@domain/report-data-set/report-data-set-template';\nimport {ReportMachineDataSetTemplate} from '@domain/report-data-set/report-machine-data-set-template';\nimport {OverviewMachine} from '@presentation/pages/machine-overview/overview-machine';\nimport {ReportDataSetTemplateService} from '@presentation/pages/machine-overview/report-data-set-template/report-data-set-template.service';\nimport {ReportItem} from '@presentation/pages/machine-overview/report-item';\nimport {AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {map, takeUntil} from 'rxjs';\nimport {OverviewMachineEfficiencyCellRendererParams} from './overview-machine-efficiency-cell-renderer-params.interface';\n\n@Component({\n selector: 'app-overview-machine-efficiency.component',\n templateUrl: './overview-machine-efficiency.component.html',\n styleUrls: ['./overview-machine-efficiency.component.scss']\n})\nexport class OverviewMachineEfficiencyComponent extends BaseComponent implements ICellRendererAngularComp {\n public reportItemHeader: ReportItem;\n public canSeeReportItemHeader: boolean;\n public useReportItemData = false;\n\n private machine: OverviewMachine;\n\n public constructor(private readonly reportDataSetTemplateService: ReportDataSetTemplateService) {\n super();\n }\n\n public agInit(params: OverviewMachineEfficiencyCellRendererParams): void {\n this.useReportItemData = params.useReportItemData;\n this.machine = params.machine;\n\n if (this.useReportItemData) {\n this.getReportItemMachineEfficiency();\n }\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public hasEfficiency(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.machine) && !AssertionUtils.isNullOrUndefined(this.machine.efficiency);\n }\n\n public getEfficiencyValue(): string {\n return String(this.machine.efficiency.value);\n }\n\n public isHigh(): boolean {\n return this.machine.efficiency?.level === MachineEfficiencyLevel.HIGH;\n }\n\n public isLow(): boolean {\n return this.machine.efficiency?.level === MachineEfficiencyLevel.LOW;\n }\n\n private canShowReportItemHeader(): boolean {\n return this.canShowReportItemHeader && !AssertionUtils.isNullOrUndefined(this.machine.status) && this.machine.status !== MachineStatus.DISCONNECTED && !this.machine.remoteMachine;\n }\n\n private getReportItemMachineEfficiency(): any {\n return this.reportDataSetTemplateService\n .getCurrentReportDataSetTemplate()\n .pipe(\n map((response: ReportDataSetTemplate) => {\n return (\n response.variants?.find((reportMachineDataSetTemplate: ReportMachineDataSetTemplate) => reportMachineDataSetTemplate.machineType === this.machine.machineType) ??\n response.variants?.find((reportMachineDataSetTemplate: ReportMachineDataSetTemplate) => reportMachineDataSetTemplate.machineType === MachineType.UNDEFINED)\n );\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe({\n next: (reportMachineDataSetTemplate: ReportMachineDataSetTemplate) => {\n if (!!reportMachineDataSetTemplate) {\n this.canSeeReportItemHeader = this.canShowReportItemHeader();\n const reportItemHeaderTemplate = reportMachineDataSetTemplate.getHeaderReportItem();\n\n this.reportItemHeader =\n this.machine.reportItems.find((reportItem: ReportItem) => reportItem.field === reportItemHeaderTemplate?.field) ?? new ReportItem(reportItemHeaderTemplate?.field, '');\n }\n }\n });\n }\n}\n","import {Component} from '@angular/core';\nimport {MachineStatus} from '@domain/machine/machine-status.enum';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {OverviewMachine} from '@presentation/pages/machine-overview/overview-machine';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {OverviewMachineTypeCellRendererParams} from './overview-machine-type-cell-renderer-params.interface';\n\n@Component({\n selector: 'app-overview-machine-type.component',\n templateUrl: './overview-machine-type.component.html',\n styleUrls: ['./overview-machine-type.component.scss']\n})\nexport class OverviewMachineTypeComponent implements ICellRendererAngularComp {\n private machine: OverviewMachine;\n private hasTexstateViewLiveStatusPermission: boolean;\n private hasTexstateViewLiveDeclarationMessagesPermission: boolean;\n\n public getIconNameForMachineType(): string {\n return MachineType.getIconNameForMachineType(this.machine.machineType);\n }\n\n public agInit(params: OverviewMachineTypeCellRendererParams): void {\n this.machine = params.data;\n this.hasTexstateViewLiveStatusPermission = params.hasTexstateViewLiveStatusPermission;\n this.hasTexstateViewLiveDeclarationMessagesPermission = params.hasTexstateViewLiveDeclarationMessagesPermission;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public getStatusClass(): string {\n return MachineStatus.getMachineStatusClass(this.machine.status, this.hasTexstateViewLiveStatusPermission);\n }\n\n public getMachineStatusColor(): string {\n return MachineStatus.getMachineStatusColor(this.machine, this.hasTexstateViewLiveStatusPermission, this.hasTexstateViewLiveDeclarationMessagesPermission);\n }\n}\n","
\n \n
\n","import {Inject, Injectable} from '@angular/core';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {DurationFormatPipe} from '@application/pipes/duration-format.pipe';\nimport {MachineStatus} from '@domain/machine/machine-status.enum';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {ProductionOrderProgress} from '@domain/machine/production-order-progress';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {ReportItemTemplateField} from '@domain/report-data-set/report-item-template-field.enum';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {AssertionUtils, ColDefBuilderFactoryService, GridOptionsBuilder, NoDataOverlayComponentParams, OverlayComponentParams, StringUtils, TranslateService} from '@vdw/angular-component-library';\nimport {ColDef, ICellRendererParams, ITooltipParams, ValueFormatterParams, ValueGetterParams} from 'ag-grid-community';\nimport {BaseOverviewMachineGroup} from '../../base-overview-machine-group';\nimport {OverviewMachine} from '../../overview-machine';\nimport {ReportItem} from '../../report-item';\nimport {OverviewMachineEfficiencyCellRendererParams} from './overview-machine-efficiency/overview-machine-efficiency-cell-renderer-params.interface';\nimport {OverviewMachineEfficiencyComponent} from './overview-machine-efficiency/overview-machine-efficiency.component';\nimport {OverviewMachineTypeCellRendererParams} from './overview-machine-type/overview-machine-type-cell-renderer-params.interface';\nimport {OverviewMachineTypeComponent} from './overview-machine-type/overview-machine-type.component';\n\n@Injectable({providedIn: 'root'})\nexport class MachineOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication\n ) {}\n\n public getColumnDefs(isKioskMode: boolean): ColDef[] {\n const hasTexstateViewLiveOrderMessages = this.authentication.hasPermission(Permission.TEXSTATE_VIEW_LIVE_ORDER_MESSAGES);\n const hasTexstateViewLiveStatus = this.authentication.hasPermission(Permission.TEXSTATE_VIEW_LIVE_STATUS);\n const hasTexstateViewLiveDeclarationMessages = this.authentication.hasPermission(Permission.TEXSTATE_VIEW_LIVE_DECLARATION_MESSAGES);\n\n const efficiencyValueColDefBuilder = this.colDefBuilderFactoryService.getBuilder().withMinWidth(200).withComparator(intComparator).withCellClass('center');\n if (this.authentication.hasPermission(Permission.ACCESS_ALL)) {\n efficiencyValueColDefBuilder\n .withCellRenderer(OverviewMachineEfficiencyComponent, (params: ICellRendererParams) => {\n return {\n machine: params.data,\n useReportItemData: true\n } as OverviewMachineEfficiencyCellRendererParams;\n })\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.EFFICIENCY_CURRENT_SHIFT');\n } else {\n efficiencyValueColDefBuilder\n .withField('efficiency.value')\n .withCellRenderer(OverviewMachineEfficiencyComponent, (params: ICellRendererParams) => {\n return {\n machine: params.data,\n useReportItemData: false\n } as OverviewMachineEfficiencyCellRendererParams;\n })\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.EFFICIENCY_LAST_HOUR');\n }\n\n const colDefs: ColDef[] = [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('machineType')\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.TYPE')\n .withCellRenderer(OverviewMachineTypeComponent, {\n hasTexstateViewLiveStatusPermission: hasTexstateViewLiveStatus,\n hasTexstateViewLiveDeclarationMessagesPermission: hasTexstateViewLiveDeclarationMessages\n } as OverviewMachineTypeCellRendererParams)\n .withComparator(intComparator)\n .withFilterValueGetter((params: ValueGetterParams) => this.translate.instant(`MACHINE.TYPES.${params.data.machineType}`))\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`MACHINE.TYPES.${MachineType[params.value]}`))\n .withCellClass('cell-no-x-padding center')\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.machineNameValueGetter(params))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('status')\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.STATUS')\n .withComparator((currentStatus: MachineStatus, nextStatus: MachineStatus) =>\n StringUtils.stringComparator(this.createStringFromStatusValue(currentStatus), this.createStringFromStatusValue(nextStatus))\n )\n .withValueFormatter((params: ValueFormatterParams) => this.createStatusValue(params))\n .withTooltipValueGetter((params: ITooltipParams) => this.createStatusValue(params))\n .withFilterValueGetter((params: ValueGetterParams) => this.createStatusValue(params))\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('productionOrder.progress')\n .withHeaderName('MACHINE.PRODUCTION_TIME')\n .withComparator((currentProductionOrderProgress: ProductionOrderProgress, nextProductionOrderProgress: ProductionOrderProgress) =>\n this.compareProductionOrderProgresses(currentProductionOrderProgress, nextProductionOrderProgress)\n )\n .withTooltipValueGetter((params: ITooltipParams) => this.createProductionOrderProgressValue(params))\n .withValueFormatter((params: ValueFormatterParams) => this.createProductionOrderProgressValue(params))\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('endTime').withHeaderName('GENERAL.DATETIME.END_TIME').withDate().withDateMultiFilter().withInitialHide().build(),\n efficiencyValueColDefBuilder.build(),\n this.colDefBuilderFactoryService.getBuilder().withField('speed', true).withHeaderName('MACHINE.SPEED', 1, false, 'ppm').withNumericMultiFilter().build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('machineGroups')\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.GROUPS')\n .withValueGetter((params: ValueGetterParams) => this.createMachineGroupsValue(params.data), true)\n .withComparator(StringUtils.stringComparator)\n .build()\n ];\n\n if (!isKioskMode) {\n colDefs.splice(\n 5,\n 0,\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('activeQuality.technicalName', true)\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.MACHINE_QUALITY')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('activeCreel.name', true).withHeaderName('TEXTILE_DATA.CREEL.CREEL').withComparator(StringUtils.stringComparator).build()\n );\n\n colDefs.splice(\n 9,\n 0,\n this.colDefBuilderFactoryService.getBuilder().withField('orderId', true).withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.ORDER_ID').withComparator(StringUtils.stringComparator).build()\n );\n }\n\n if (hasTexstateViewLiveOrderMessages) {\n colDefs.splice(\n 3,\n 0,\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('productionOrder.name')\n .withHeaderName('PRODUCTION_ORDER.PRODUCTION_ORDER')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => {\n const reportItem = params.data.reportItems.find((item: ReportItem) => item.field === ReportItemTemplateField.ORDER_NAME);\n return reportItem ? reportItem.value : null;\n })\n .withLockVisible()\n .build()\n );\n }\n\n return colDefs;\n }\n\n public getColumnDefsForSpeed(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('machineType', true)\n .withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.TYPE')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`MACHINE.TYPES.${MachineType[params.data.machineType]}`))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('standardSpeed')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_SPEED')\n .withCellClass('right')\n .withCellRenderer((params: ICellRendererParams) => (params.value ? `${params.value} ${this.translate.instant('MACHINE.DETAILS.STANDARD_SPEEDS.SPEED')}` : ''))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('standardEfficiency')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_EFFICIENCY')\n .withCellClass('right')\n .withCellRenderer((params: ICellRendererParams) => (params.value ? `${params.value} %` : ''))\n .build()\n ];\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: 'MACHINE.MACHINE',\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n\n private machineNameValueGetter(params: ValueGetterParams): string {\n const overviewMachine: OverviewMachine = params.data;\n return !AssertionUtils.isEmpty(overviewMachine.name) ? overviewMachine.name : this.translate.instant('GENERAL.NO_DATA', {object: this.translate.instant('GENERAL.NAME').toLowerCase()});\n }\n\n private getProductionOrderProgressDuration(progress: ProductionOrderProgress): number {\n return AssertionUtils.isNullOrUndefined(progress) ? 0 : progress.timeSpentInSeconds;\n }\n\n private createStatusValue(params: ValueFormatterParams | ITooltipParams | ValueGetterParams): string {\n const machineOverview: OverviewMachine = params.data;\n\n if (AssertionUtils.isNullOrUndefined(machineOverview) || AssertionUtils.isNullOrUndefined(machineOverview.status)) {\n return '';\n }\n return this.createStringFromStatusValue(machineOverview.status);\n }\n\n private createStringFromStatusValue(status: MachineStatus): string {\n if (AssertionUtils.isNullOrUndefined(status)) {\n return '';\n }\n if (!this.authentication.hasPermission(Permission.TEXSTATE_VIEW_LIVE_STATUS)) {\n status = status === MachineStatus.DISCONNECTED ? status : MachineStatus.CONNECTED;\n }\n return this.translate.instant(`MACHINE.${MachineStatus[status]}`);\n }\n\n private createMachineGroupsValue(machineOverview: OverviewMachine): string {\n return machineOverview.machineGroups.length > 0\n ? machineOverview.machineGroups\n .map((machineGroup: BaseOverviewMachineGroup) => machineGroup.name)\n .sort(StringUtils.stringComparator)\n .join(', ')\n : null;\n }\n\n private createProductionOrderProgressValue(params: ValueFormatterParams | ITooltipParams): string {\n const machineOverview: OverviewMachine = params.data;\n if (\n AssertionUtils.isNullOrUndefined(machineOverview) ||\n AssertionUtils.isNullOrUndefined(machineOverview.productionOrder) ||\n AssertionUtils.isNullOrUndefined(machineOverview.productionOrder.progress)\n ) {\n return null;\n }\n return this.createStringFromProductionOrderProgress(machineOverview.productionOrder.progress);\n }\n\n private createStringFromProductionOrderProgress(progress: ProductionOrderProgress): string {\n if (AssertionUtils.isNullOrUndefined(progress)) {\n return null;\n }\n return new DurationFormatPipe().transform(this.getProductionOrderProgressDuration(progress), 's', 'd[d] h[h] m[m]');\n }\n\n private compareProductionOrderProgresses(valueA: ProductionOrderProgress, valueB: ProductionOrderProgress): number {\n const durationA: number = this.getProductionOrderProgressDuration(valueA);\n const durationB: number = this.getProductionOrderProgressDuration(valueB);\n\n let result = 0;\n if (durationA < durationB) {\n result = -1;\n } else if (durationA > durationB) {\n result = 1;\n }\n return result;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ReportDataSetTemplate} from '@domain/report-data-set/report-data-set-template';\nimport {Observable, ReplaySubject} from 'rxjs';\n\n@Injectable()\nexport class ReportDataSetTemplateService {\n private readonly currentReportDataSetTemplate = new ReplaySubject(1);\n\n public getCurrentReportDataSetTemplate(): Observable {\n return this.currentReportDataSetTemplate.asObservable();\n }\n\n public setCurrentReportDataSetTemplate(reportDataSetTemplate: ReportDataSetTemplate): void {\n this.currentReportDataSetTemplate.next(reportDataSetTemplate);\n }\n}\n","import {ReportItemTemplateField} from '@domain/report-data-set/report-item-template-field.enum';\n\nexport class ReportItem {\n private _field: ReportItemTemplateField;\n private _value: any;\n private _title: string;\n\n public constructor(field: ReportItemTemplateField, value: any, title: string = '') {\n this._field = field;\n this._value = value;\n this._title = title;\n }\n\n public static fromJSON(reportItemJson: any): ReportItem {\n return new ReportItem(ReportItemTemplateField[reportItemJson.field as string], reportItemJson.value);\n }\n\n public get field(): ReportItemTemplateField {\n return this._field;\n }\n\n public set field(field: ReportItemTemplateField) {\n this._field = field;\n }\n\n public get value(): any {\n return this._value;\n }\n\n public set value(value: any) {\n this._value = value;\n }\n\n public get title(): string {\n return this._title;\n }\n\n public set title(title: string) {\n this._title = title;\n }\n\n public valueIsObject(): boolean {\n return typeof this.value === 'object' && this.value !== null;\n }\n\n public valueAsReportItems(): ReportItem[] {\n return this.valueIsObject() ? this.spreadObjectValue() : this.checkAllowedToShowEmpty();\n }\n\n private spreadObjectValue(): ReportItem[] {\n return Object.entries(this.value).map(([key, value]: [string, unknown]) => new ReportItem(this.field, value, key));\n }\n\n private checkAllowedToShowEmpty(): ReportItem[] {\n return this._field !== ReportItemTemplateField.STOP_GROUPS ? [this] : [];\n }\n}\n","import {ArrayUtils, AssertionUtils, CdkDraggableDropListEntry} from '@vdw/angular-component-library';\nimport {flatten} from 'lodash-es';\nimport {OverviewMachineGroup} from '../../overview-machine-group';\nimport {MachineGroupOverviewList} from './machine-group-overview-list';\n\nexport function flattenMachineGroup(root: MachineGroupOverviewList | OverviewMachineGroup): (MachineGroupOverviewList | OverviewMachineGroup)[] {\n return root ? flatten([root, ...root.groups.map((machine: MachineGroupOverviewList | OverviewMachineGroup) => flattenMachineGroup(machine))]) : [];\n}\n\nexport function pathToMachineGroup(root: MachineGroupOverviewList | OverviewMachineGroup, id: number): (MachineGroupOverviewList | OverviewMachineGroup)[] {\n if (root?.id === id) {\n return [root];\n }\n\n for (const group of root.groups) {\n const path = pathToMachineGroup(group, id);\n if (path) {\n return [root, ...path];\n }\n }\n}\n\nexport function findMachineGroupById(root: OverviewMachineGroup, id: number): OverviewMachineGroup {\n if (root.id === id) {\n return root;\n }\n\n for (const group of root.groups) {\n const found = findMachineGroupById(group, id);\n if (found) {\n return found;\n }\n }\n\n return null;\n}\n\nexport function toDraggableDropListEntry(group: OverviewMachineGroup, editMode: boolean, state: {[groupId: number]: boolean} = {}): CdkDraggableDropListEntry {\n group.machines = ArrayUtils.sortByKey(group.machines, 'name');\n group.groups = ArrayUtils.sortByKey(group.groups, 'name');\n\n return {\n id: group.id,\n name: group.name,\n isExpanded: AssertionUtils.isNullOrUndefined(state[group.id]) ? true : !state[group.id],\n childEntries: group.groups?.map((childGroup: OverviewMachineGroup) => toDraggableDropListEntry(childGroup, editMode, state)) ?? [],\n extraData: group,\n dropAllowed: editMode,\n dragAllowed: editMode\n };\n}\n","\n
\n
\n
\n
{{ notification.message | htmlWithVariablesToText }}
\n
\n
{{ notification.timestamp | minutesFromNow | async }}
\n \n
\n
\n
{{ notification.description | htmlWithVariablesToText }}
\n
\n {{ 'NOTIFICATIONS.MARK_AS_READ' | bmsTranslate }}\n
\n
\n
\n
\n","import {Component, EventEmitter, Input, Optional, Output} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Router} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {Notification} from '@domain/notifications/notification';\nimport {IPageInfo} from '@iharbeck/ngx-virtual-scroller';\nimport {AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {NotificationsComponent} from '../notifications.component';\nimport {NotificationsService} from '../notifications.service';\n\n@Component({\n selector: 'app-notification-list',\n templateUrl: './notification-list.component.html',\n styleUrls: ['./notification-list.component.scss']\n})\nexport class NotificationListComponent extends BaseComponent {\n @Input() public notificationList: Notification[];\n @Input() public notificationClickable = true;\n @Output() public listScrolled: EventEmitter = new EventEmitter();\n\n private previousScrollEvent: IPageInfo;\n\n public constructor(\n private readonly notificationsService: NotificationsService,\n private readonly router: Router,\n private readonly navigationHistory: NavigationHistoryService,\n @Optional() private readonly dialogRef: MatDialogRef\n ) {\n super();\n }\n\n public getPriorityIconName(priority: PriorityLevel): string {\n return `${priority.toLowerCase()}-circle`;\n }\n\n public markAsRead(notificationId: number, event: PointerEvent): void {\n event?.stopPropagation();\n this.notificationsService.markAsRead(this.notificationList, notificationId).pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe();\n }\n\n public loadMore(event: IPageInfo): void {\n if (AssertionUtils.isEmpty(this.notificationList) || event.endIndex !== this.notificationList.length - 1 || event === this.previousScrollEvent) {\n return;\n }\n\n this.listScrolled.emit();\n this.previousScrollEvent = event;\n }\n\n public async openMachineDetailSidebar(notification: Notification): Promise {\n await this.router.navigate([RouteUtils.paths.texState.absolutePath], {state: {equipmentId: notification.equipment.id}});\n this.navigationHistory.replaceState(RouteUtils.paths.texState.absolutePath, undefined, {equipmentId: notification.equipment.id});\n\n if (!AssertionUtils.isNullOrUndefined(this.dialogRef?.componentInstance)) {\n this.dialogRef.close();\n }\n }\n}\n","\n\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {BaseComponent, DialogData, SelectionListItem, ToastParams, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {Observable, Subject, take, takeUntil} from 'rxjs';\nimport {PushNotificationsService} from '../push-notifications.service';\n\n@Component({\n templateUrl: './notification-list-settings.component.html',\n styleUrls: ['./notification-list-settings.component.scss']\n})\nexport class NotificationListSettingsComponent extends BaseComponent implements OnInit, DialogData {\n private readonly filterChanged = new Subject();\n public isSubscriptionProcessing = false;\n public toggleValue = false;\n\n private readonly toastParams: ToastParams = {\n tapToDismiss: true,\n timeOut: 4000,\n title: this.translate.instant('NOTIFICATIONS.SUBSCRIPTION_DISABLED_TOAST_TITLE'),\n message: this.translate.instant('NOTIFICATIONS.SUBSCRIPTION_DISABLED_TOAST_MESSAGE')\n };\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: any,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly pushNotificationsService: PushNotificationsService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.pushNotificationsService\n .subscriptionEnabledInBrowser()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), take(1))\n .subscribe((_: PushSubscription) => {\n this.toggleValue = Notification.permission === 'denied' ? false : this.pushNotificationsService.isSubscribed;\n });\n }\n\n public getValue(): Observable {\n return this.filterChanged.asObservable();\n }\n\n public onFilterOptionChanged(value: SelectionListItem[]): void {\n this.filterChanged.next(value);\n }\n\n public isBrowserSupported(): boolean {\n return this.pushNotificationsService.isBrowserSupported();\n }\n\n public toggleSubscription(): void {\n if (Notification.permission === 'denied') {\n this.toggleValue = false;\n this.toastService.showError(this.toastParams);\n return;\n } else if (Notification.permission === 'default') {\n this.toggleValue = false;\n }\n\n this.isSubscriptionProcessing = true;\n\n if (this.pushNotificationsService.isSubscribed) {\n this.pushNotificationsService\n .unsubscribeToPushNotifications()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.isSubscriptionProcessing = false));\n } else {\n this.pushNotificationsService\n .subscribeToPushNotifications()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.toggleValue = true;\n this.isSubscriptionProcessing = false;\n },\n error: () => (this.isSubscriptionProcessing = false)\n });\n }\n }\n}\n","
\n
\n
\n

{{ 'NOTIFICATIONS.MENU_NAME' | bmsTranslate }}

\n

({{ unreadCount | async }})

\n
\n
0\" class=\"b2 url\" (click)=\"markAllAsRead()\">{{ 'NOTIFICATIONS.MARK_ALL_AS_READ' | bmsTranslate }}
\n
\n \n \n \n \n \n
\n\n
\n \n \n
\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {Notification} from '@domain/notifications/notification';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {OnNotificationMarkedAsReadInterface} from '@infrastructure/signalr/notifications/on-notification-marked-as-read.interface';\nimport {ArrayUtils, AssertionUtils, BaseComponent, EnumUtils, LocalStorageService, SelectionListItem} from '@vdw/angular-component-library';\nimport {debounceTime, distinctUntilChanged, filter, Observable, of, takeUntil} from 'rxjs';\nimport {MachineOverviewViewMode} from '../machine-overview/machine-overview-view-mode.enum';\nimport {OverviewMachine} from '../machine-overview/overview-machine';\nimport {OverviewMachineGroup} from '../machine-overview/overview-machine-group';\nimport {NotificationListSettingsComponent} from './notification-list/notification-list-settings.component';\nimport {NotificationsService} from './notifications.service';\n\n@Component({\n selector: 'app-notifications',\n templateUrl: './notifications.component.html',\n styleUrls: ['./notifications.component.scss']\n})\nexport class NotificationsComponent extends BaseComponent implements OnInit {\n @Input() public overviewGroupId: number;\n @Input() public floorplanMachines: OverviewMachine[];\n @Input() public group: Observable;\n @Input() public initialCurrentGroup: OverviewMachineGroup;\n @Input() public machineOverviewMode?: MachineOverviewViewMode;\n\n public readonly notificationSettingsComponent = NotificationListSettingsComponent;\n public readonly VIEW_NOTIFICATIONS_PERMISSION = Permission.ALERT_VIEW_NOTIFICATIONS;\n\n public scaleImage = 1;\n public unreadCount: Observable;\n public currentGroup: OverviewMachineGroup;\n public notificationsList: Notification[] = [];\n\n protected priorities: SelectionListItem[] = [];\n\n private loading = false;\n private currentSubscription: Subscription;\n private savedPriorities: PriorityLevel[] = [];\n private enabledPriorities: PriorityLevel[] = [];\n\n public constructor(\n private readonly localStorage: LocalStorageService,\n private readonly notificationsService: NotificationsService,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setScale(272, 178);\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n if (!this.currentSubscription?.hasPermission(this.VIEW_NOTIFICATIONS_PERMISSION)) {\n return;\n }\n\n this.notificationsList = [];\n this.unreadCount = this.notificationsService.unreadCount;\n this.savedPriorities = this.localStorage.get('notificationPriorityLevels');\n EnumUtils.getEnumNames(PriorityLevel).forEach((key: string) => this.priorities.push({name: key, translation: `BMSCONFIG.EVENTS.PRIORITY_LEVEL.${key}`, value: true} as SelectionListItem));\n\n this.setEnabledPriorities(true);\n this.setDisabledPriorities();\n\n this.subscribeToGroupChanges();\n\n if (!AssertionUtils.isNullOrUndefined(this.initialCurrentGroup)) {\n this.currentGroup = this.initialCurrentGroup;\n this.getNotifications();\n }\n\n if (AssertionUtils.isNullOrUndefined(this.machineOverviewMode) || this.machineOverviewMode === MachineOverviewViewMode.LISTVIEW) {\n this.getNotifications();\n }\n\n this.notificationsService.onNotificationAdded\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n filter(\n (notification: Notification) =>\n AssertionUtils.isNullOrUndefined(this.currentGroup) ||\n this.currentGroup\n .getNestedChildMachineIds()\n .map((machineId: number) => machineId)\n .includes(notification.equipment.id)\n )\n )\n .subscribe((addedNotification: Notification) => this.addNotificationsToList(addedNotification));\n\n this.notificationsService.onNotificationMarkedAsRead\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((notificationMarkedAsRead: OnNotificationMarkedAsReadInterface) =>\n this.notificationsService.markNotificationsAsRead(this.notificationsList, notificationMarkedAsRead.readNotificationIds)\n );\n }\n\n public setScale(originalHeight: number, wantedHeight: number): void {\n this.scaleImage = wantedHeight / originalHeight;\n }\n\n public markAllAsRead(): void {\n this.notificationsService.markAllAsRead(this.notificationsList).pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe();\n }\n\n public getDialogData(): any {\n return {options: this.priorities};\n }\n\n public getValue(): Observable {\n return of();\n }\n\n public onOptionChanged(event: SelectionListItem[]): void {\n this.localStorage.set(\n 'notificationPriorityLevels',\n event.filter((item: SelectionListItem) => item.value).map((value: SelectionListItem) => value.name)\n );\n\n this.priorities = event;\n this.setEnabledPriorities(false);\n this.setDisabledPriorities();\n\n this.notificationsList = [];\n this.getNotifications();\n }\n\n public getNotifications(): void {\n if (this.loading) {\n return;\n }\n this.loading = true;\n this.notificationsService\n .getNotificationsSlice(this.enabledPriorities, this.notificationsList.length, null, this.currentGroup?.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((notifications: Notification[]) => {\n this.loading = false;\n this.addNotificationsToList(...notifications);\n });\n }\n\n public canShowUnreadCount(): boolean {\n return AssertionUtils.isNullOrUndefined(this.currentGroup) ? true : this.currentGroup.floorplanId === this.overviewGroupId;\n }\n\n private subscribeToGroupChanges(): void {\n this.group?.pipe(takeUntil(this.unSubscribeOnViewDestroy), distinctUntilChanged(), debounceTime(20)).subscribe((group: OverviewMachineGroup) => {\n this.currentGroup = group;\n this.notificationsList = [];\n this.loading = false;\n this.getNotifications();\n });\n }\n\n private setEnabledPriorities(isInitializing: boolean): void {\n this.enabledPriorities = [];\n\n if (isInitializing && !AssertionUtils.isEmpty(this.savedPriorities)) {\n this.enabledPriorities = this.savedPriorities;\n this.priorities.filter((priority: SelectionListItem) => !this.savedPriorities.includes(priority.name as PriorityLevel)).forEach((priority: SelectionListItem) => (priority.value = false));\n return;\n }\n\n EnumUtils.getEnumNames(PriorityLevel).forEach((priorityLevel: PriorityLevel) => {\n const foundPriority = this.priorities.find((priority: SelectionListItem) => priority.name === priorityLevel);\n\n if (foundPriority?.value) {\n foundPriority.disabled = false;\n this.enabledPriorities.push(priorityLevel);\n }\n });\n }\n\n private setDisabledPriorities(): void {\n if (this.enabledPriorities.length === 1) {\n this.priorities.find((priority: SelectionListItem) => priority.value).disabled = true;\n }\n }\n\n private addNotificationsToList(...notificationsToAdd: Notification[]): void {\n const uniqueNotifications = ArrayUtils.distinctBy([...notificationsToAdd, ...this.notificationsList], (notification: Notification) => notification.id);\n this.notificationsList.splice(0, this.notificationsList.length, ...uniqueNotifications);\n this.notificationsList.sort(Notification.compare);\n }\n}\n","
\n
\n \n \n
\n
\n

{{ 'NOTIFICATIONS.SHOW_PRIORITY_LEVELS' | bmsTranslate }}

\n \n
\n \n \n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {BaseComponent, EnumUtils, SelectionListItem, ToastParams, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {take, takeUntil} from 'rxjs';\nimport {PushNotificationsService} from '../../push-notifications.service';\nimport {NotificationListFilterComponentMatDialogConfigDataInterface} from './notification-list-filter-component-mat-dialog-config-data.interface';\n\n@Component({\n templateUrl: './notification-mobile-list-filter.component.html',\n styleUrls: ['./notification-mobile-list-filter.component.scss']\n})\nexport class NotificationMobileListFilterComponent extends BaseComponent implements OnInit {\n public options: SelectionListItem[] = [];\n public enabledPriorities: SelectionListItem[] = [];\n\n public toggleValue = false;\n public isBrowserSupported = false;\n public isSubscriptionProcessing = false;\n\n private readonly toastParams: ToastParams = {\n tapToDismiss: true,\n timeOut: 4000,\n title: this.translate.instant('NOTIFICATIONS.SUBSCRIPTION_DISABLED_TOAST_TITLE'),\n message: this.translate.instant('NOTIFICATIONS.SUBSCRIPTION_DISABLED_TOAST_MESSAGE')\n };\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: NotificationListFilterComponentMatDialogConfigDataInterface,\n private readonly dialogRef: MatDialogRef,\n private readonly pushNotificationsService: PushNotificationsService,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService\n ) {\n super();\n this.options = data.priorities;\n }\n\n public ngOnInit(): void {\n this.isBrowserSupported = this.pushNotificationsService.isBrowserSupported();\n\n this.pushNotificationsService\n .subscriptionEnabledInBrowser()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), take(1))\n .subscribe((_: PushSubscription) => {\n this.toggleValue = Notification.permission === 'denied' ? false : this.pushNotificationsService.isSubscribed;\n });\n }\n\n public confirm(): void {\n this.dialogRef.close(this.options);\n }\n\n public onOptionChanged(value: SelectionListItem[]): void {\n this.options = value;\n this.setEnabledPriorities();\n }\n\n private setEnabledPriorities(): void {\n this.enabledPriorities = [];\n EnumUtils.getEnumNames(PriorityLevel).forEach((priorityLevel: PriorityLevel) => {\n const foundPriority = this.options.find((priority: SelectionListItem) => priority.name === `BMSCONFIG.EVENTS.PRIORITY_LEVEL.${priorityLevel}`);\n if (foundPriority?.value) {\n this.enabledPriorities.push(foundPriority);\n foundPriority.disabled = false;\n }\n });\n\n if (this.enabledPriorities.length === 1) {\n this.options.find((priority: SelectionListItem) => priority.value).disabled = true;\n }\n }\n\n public toggleSubscription(): void {\n if (Notification.permission === 'denied') {\n this.toggleValue = false;\n this.toastService.showError(this.toastParams);\n return;\n } else if (Notification.permission === 'default') {\n this.toggleValue = false;\n }\n\n this.isSubscriptionProcessing = true;\n\n if (this.pushNotificationsService.isSubscribed) {\n this.pushNotificationsService\n .unsubscribeToPushNotifications()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.isSubscriptionProcessing = false));\n } else {\n this.pushNotificationsService\n .subscribeToPushNotifications()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.toggleValue = true;\n this.isSubscriptionProcessing = false;\n },\n error: () => (this.isSubscriptionProcessing = false)\n });\n }\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {AssertionUtils, TranslateService} from '@vdw/angular-component-library';\n\n@Pipe({\n name: 'notificationMobileOverviewHeader'\n})\nexport class NotificationMobileOverviewHeaderPipe implements PipeTransform {\n public constructor(private readonly translate: TranslateService) {}\n\n public transform(headerKey: string, unreadCount: number): string {\n let translatedHeader: string;\n if (headerKey) {\n translatedHeader = this.translate.instant(headerKey);\n } else {\n translatedHeader = '';\n }\n\n return `${translatedHeader}${unreadCount === 0 || AssertionUtils.isNullOrUndefined(unreadCount) ? '' : ` (${unreadCount?.toString(10)})`}`;\n }\n}\n","
\n \n\n \n \n\n
\n {{ 'NOTIFICATIONS.MARK_ALL_AS_READ' | bmsTranslate }}\n
\n
\n\n
\n \n \n
\n
\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NotificationMobileOverviewPageComponent} from '@presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-page.component';\n\nexport const notificationRoutes: Routes = [{path: RouteUtils.paths.notifications.path, component: NotificationMobileOverviewPageComponent}];\n\nexport const notificationRouting: ModuleWithProviders = RouterModule.forChild(notificationRoutes);\n","import {Component, Inject} from '@angular/core';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {NotificationsComponent} from '@presentation/pages/notifications/notifications.component';\nimport {NotificationsService} from '@presentation/pages/notifications/notifications.service';\nimport {DialogBuilderFactoryService, LocalStorageService, SelectionListItem} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {PushNotificationsService} from '../push-notifications.service';\nimport {NotificationListFilterComponentMatDialogConfigDataInterface} from './notification-mobile-list-filter/notification-list-filter-component-mat-dialog-config-data.interface';\nimport {NotificationMobileListFilterComponent} from './notification-mobile-list-filter/notification-mobile-list-filter.component';\n\n@Component({\n templateUrl: './notification-mobile-overview-page.component.html',\n styleUrls: ['./notification-mobile-overview-page.component.scss']\n})\nexport class NotificationMobileOverviewPageComponent extends NotificationsComponent {\n public readonly URL_TO_ROOT = RouteUtils.paths.absolutePath;\n public readonly FILTER_ICON = 'settings';\n\n private readonly HEIGHT_WITH_PUSH_NOTIFICATION_TOGGLE = '372px';\n private readonly HEIGHT_WITHOUT_PUSH_NOTIFICATION_TOGGLE = '336px';\n\n public constructor(\n localStorage: LocalStorageService,\n @Inject(AUTHENTICATION) authentication: Authentication,\n public readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n notificationsService: NotificationsService,\n private readonly pushNotificationsService: PushNotificationsService\n ) {\n super(localStorage, notificationsService, authentication);\n }\n\n public onFilterClicked(): void {\n const height = this.pushNotificationsService.isBrowserSupported() ? this.HEIGHT_WITH_PUSH_NOTIFICATION_TOGGLE : this.HEIGHT_WITHOUT_PUSH_NOTIFICATION_TOGGLE;\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .withWidth('100%')\n .withMaxWidth('unset')\n .withHeight(height)\n .withPosition({\n bottom: '0'\n })\n .withClass('notifications-mobile-panel')\n .openDialog(NotificationMobileListFilterComponent, {\n priorities: this.priorities\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((priorities: SelectionListItem[] | undefined) => {\n if (priorities) {\n this.onOptionChanged(priorities);\n }\n });\n }\n}\n","import {ScrollingModule} from '@angular/cdk/scrolling';\nimport {NgModule} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {HttpNotificationsService} from '@infrastructure/http/notifications/http-notifications.service';\nimport {SignalrNotificationsService} from '@infrastructure/signalr/notifications/signalr-notifications.service';\nimport {NotificationMobileOverviewHeaderPipe} from '@presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-header.pipe';\nimport {NotificationMobileOverviewPageComponent} from '@presentation/pages/notifications/notification-mobile-overview-page/notification-mobile-overview-page.component';\nimport {notificationRouting} from '@presentation/pages/notifications/notifications.routing';\nimport {SharedModule} from '@shared/shared.module';\nimport {HtmlWithVariablesToTextPipeModule, SelectionListContainerModule, SelectionListModule} from '@vdw/angular-component-library';\nimport {NotificationListSettingsComponent} from './notification-list/notification-list-settings.component';\nimport {NotificationListComponent} from './notification-list/notification-list.component';\nimport {NotificationMobileListFilterComponent} from './notification-mobile-overview-page/notification-mobile-list-filter/notification-mobile-list-filter.component';\nimport {NotificationsComponent} from './notifications.component';\n\n@NgModule({\n declarations: [\n NotificationListComponent,\n NotificationsComponent,\n NotificationListSettingsComponent,\n NotificationMobileOverviewPageComponent,\n NotificationMobileOverviewHeaderPipe,\n NotificationMobileListFilterComponent\n ],\n imports: [SharedModule, SelectionListModule, ScrollingModule, notificationRouting, HtmlWithVariablesToTextPipeModule, SelectionListContainerModule],\n exports: [NotificationsComponent, NotificationListComponent],\n providers: [HttpNotificationsService, SignalrNotificationsService, {provide: MatDialogRef, useValue: {}}]\n})\nexport class NotificationsModule {}\n","import {EventEmitter, Inject, Injectable} from '@angular/core';\nimport {PriorityLevel} from '@domain/event/priority-level.enum';\nimport {Notification} from '@domain/notifications/notification';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {HttpNotificationsService} from '@infrastructure/http/notifications/http-notifications.service';\nimport {OnNotificationMarkedAsReadInterface} from '@infrastructure/signalr/notifications/on-notification-marked-as-read.interface';\nimport {SignalrNotificationsService} from '@infrastructure/signalr/notifications/signalr-notifications.service';\nimport {map, merge, Observable, of, shareReplay, startWith, switchMap, tap} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NotificationsService {\n private readonly PAGE_SIZE = 20;\n private readonly notificationAdded = this.realtimeNotifications.newNotifications.pipe(tap((addedNotification: Notification) => this.onNotificationAdded.emit(addedNotification)));\n\n private readonly readUpdates = this.realtimeNotifications.notificationsMarkedAsRead.pipe(\n tap((notificationMarkedAsRead: OnNotificationMarkedAsReadInterface) => this.onNotificationMarkedAsRead.emit(notificationMarkedAsRead)),\n map((notificationMarkedAsRead: OnNotificationMarkedAsReadInterface) => notificationMarkedAsRead.unreadCount)\n );\n\n public onNotificationAdded = new EventEmitter();\n public onNotificationMarkedAsRead = new EventEmitter();\n\n private readonly _initialCountForCurrentSubscription = this.authentication.currentAuthenticatedChanges().pipe(\n startWith(undefined),\n switchMap(() => (this.authentication.getCurrentSubscription().hasPermission(Permission.ALERT_VIEW_NOTIFICATIONS) ? this.notifications.getUnreadCount() : of(0)))\n );\n\n private readonly _unreadCount = merge(this._initialCountForCurrentSubscription, this.readUpdates).pipe(\n switchMap((count: number) =>\n this.notificationAdded.pipe(\n startWith(count),\n map(() => count++)\n )\n ),\n shareReplay({bufferSize: 1, refCount: true})\n );\n\n public get unreadCount(): Observable {\n return this._unreadCount;\n }\n\n public constructor(\n private readonly notifications: HttpNotificationsService,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly realtimeNotifications: SignalrNotificationsService\n ) {}\n\n public markAsRead(notifications: Notification[], notificationId: number): Observable {\n this.markNotificationsAsRead(notifications, [notificationId]);\n\n return this.notifications.markAsRead(notificationId);\n }\n\n public markAllAsRead(notifications: Notification[]): Observable {\n notifications.forEach((notification: Notification) => (notification.read = true));\n\n return this.notifications.markAsRead();\n }\n\n public getNotificationsSlice(priorities: PriorityLevel[], currentIndex: number, equipmentId?: number, groupId?: number): Observable {\n return this.authentication.currentSubscriptionChanges().pipe(\n startWith(this.authentication.getCurrentSubscription()),\n switchMap(() => this.notifications.getSlice(currentIndex, this.PAGE_SIZE, priorities, groupId, equipmentId))\n );\n }\n\n public markNotificationsAsRead(notifications: Notification[], readNotificationIds: number[]): void {\n const readNotifications = notifications.filter((notification: Notification) => readNotificationIds.includes(notification.id));\n readNotifications.forEach((notification: Notification) => (notification.read = true));\n }\n}\n","export class WebNotificationSubscription {\n private readonly _id: number;\n private readonly _auth: string;\n private readonly _p256DH: string;\n private readonly _endpoint: string;\n\n public constructor(id: number, p256DH: string, endpoint: string, auth: string) {\n this._id = id;\n this._auth = auth;\n this._p256DH = p256DH;\n this._endpoint = endpoint;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get auth(): string {\n return this._auth;\n }\n\n public get p256DH(): string {\n return this._p256DH;\n }\n\n public get endpoint(): string {\n return this._endpoint;\n }\n\n public toJSON(): JSON {\n return {\n endpoint: this.endpoint,\n p256DH: this.p256DH,\n auth: this._auth\n } as any as JSON;\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {SwPush} from '@angular/service-worker';\nimport {RuntimeApplicationEnvironment, RUNTIME_APPLICATION_ENVIRONMENT} from '@application/configuration/runtime-application-environment';\nimport {WebNotificationSubscription} from '@domain/notifications/web-notification-subscription';\nimport {HttpNotificationsService} from '@infrastructure/http/notifications/http-notifications.service';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {catchError, from, Observable, ObservableInput, switchMap, tap} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PushNotificationsService {\n private _isSubscribed?: boolean = undefined;\n\n public get isSubscribed(): boolean {\n return this._isSubscribed ?? false;\n }\n\n public constructor(\n private readonly swPush: SwPush,\n private readonly notificationService: HttpNotificationsService,\n @Inject(RUNTIME_APPLICATION_ENVIRONMENT) private runtimeEnvironment: RuntimeApplicationEnvironment\n ) {}\n\n public subscribeToPushNotifications(): Observable {\n return this.requestSubscription().pipe(\n switchMap((subscription: PushSubscription) => {\n const subscriptionJSON = subscription.toJSON();\n const auth = (subscriptionJSON.keys && subscriptionJSON.keys['auth']) ?? '';\n const p256dh = (subscriptionJSON.keys && subscriptionJSON.keys['p256dh']) ?? '';\n\n const webNotificationSubscription = new WebNotificationSubscription(null, p256dh, subscriptionJSON.endpoint ?? '', auth);\n\n return this.notificationService.addWebNotificationSubscription(webNotificationSubscription).pipe(\n tap(() => (this._isSubscribed = true)),\n catchError((): ObservableInput => from(subscription.unsubscribe()))\n );\n })\n );\n }\n\n public unsubscribeToPushNotifications(): Observable {\n return this.requestSubscription().pipe(\n switchMap((subscription: PushSubscription) => {\n subscription.unsubscribe();\n return this.notificationService.deleteWebNotificationSubscription(subscription.endpoint).pipe(tap(() => (this._isSubscribed = false)));\n })\n );\n }\n\n public subscriptionEnabledInBrowser(): Observable {\n return this.swPush.subscription.pipe(tap((subscription: PushSubscription) => (this._isSubscribed = !AssertionUtils.isNullOrUndefined(subscription))));\n }\n\n public isBrowserSupported(): boolean {\n return this.swPush.isEnabled && !AssertionUtils.isNullOrUndefined(this._isSubscribed);\n }\n\n private requestSubscription(): Observable {\n const applicationServerKey = this.runtimeEnvironment.getEnvironment().publicVapidKeyOfServer;\n return from(this.swPush.requestSubscription({serverPublicKey: applicationServerKey}));\n }\n}\n","import {Component} from '@angular/core';\n\n@Component({\n selector: 'app-not-found-page',\n templateUrl: './not-found-page.component.html',\n styleUrls: ['../status-codes-pages.component.scss']\n})\nexport class NotFoundPageComponent {}\n","
\n \n
\n \n {{ 'GENERAL.ERRORS.STATUSCODE.NOT_FOUND.SUB_TITLE' | bmsTranslate }}\n
\n
\n","export class MachineEventInfo {\n private _id: number;\n private _name: string;\n private _type: string;\n private _group: string;\n\n public constructor(id: number, name: string, type: string, group: string) {\n this._id = id;\n this._name = name;\n this._type = type;\n this._group = group;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public get group(): string {\n return this._group;\n }\n\n public static fromJSON(machineEventInfoJSON: any): MachineEventInfo {\n return new MachineEventInfo(machineEventInfoJSON.id, machineEventInfoJSON.name, machineEventInfoJSON.type, machineEventInfoJSON.group);\n }\n}\n","import {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class RunningMachineEventInfo {\n private _yield: number;\n private _rotationsPerMinute: number;\n\n public constructor(yieldOfMachine: number, rotationsPerMinute: number) {\n this._yield = yieldOfMachine;\n this._rotationsPerMinute = rotationsPerMinute;\n }\n\n public get yield(): number {\n return this._yield;\n }\n\n public get rotationsPerMinute(): number {\n return this._rotationsPerMinute;\n }\n\n public static fromJSON(runningMachineEventInfoJSON: any): RunningMachineEventInfo {\n return new RunningMachineEventInfo(runningMachineEventInfoJSON.yield, runningMachineEventInfoJSON.rotationsPerMinute);\n }\n\n public hasMachineSpeed(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.rotationsPerMinute) && this.rotationsPerMinute !== 0;\n }\n\n public hasMachineYield(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.yield);\n }\n}\n","import {Directive, ElementRef, EventEmitter, Inject, Input, OnChanges, OnInit, Output, Renderer2} from '@angular/core';\nimport {LoadImageDirective} from '@application/directives/load-image.directive';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {DRAWINGS, Drawings} from '@infrastructure/http/drawing/drawings';\nimport {BackendErrorSeverity, BlobUtils, UnhandledBackendError} from '@vdw/angular-component-library';\nimport {isNil} from 'lodash-es';\nimport {fromEvent, noop, Observable, throwError} from 'rxjs';\nimport {first, takeUntil} from 'rxjs/operators';\n\n@Directive({\n selector: '[appLoadDrawingImage]'\n})\nexport class LoadDrawingImageDirective extends LoadImageDirective implements OnInit, OnChanges {\n @Input() public qualityId: number;\n @Input() public colorSetId: number;\n @Input() public drawingDimensionsInPx: DimensionsInPx;\n @Input() public shouldDownloadImage: boolean;\n @Input() public imageSignature: string;\n @Output() public imageDownloaded: EventEmitter = new EventEmitter();\n\n public constructor(\n @Inject(DRAWINGS) private readonly drawings: Drawings,\n renderer: Renderer2,\n elementRef: ElementRef\n ) {\n super(renderer, elementRef);\n }\n\n public ngOnChanges(): void {\n if (!isNil(this.imageId) && this.shouldDownloadImage) {\n fromEvent(this.elementRef.nativeElement, 'load')\n .pipe(first())\n .subscribe(() => {\n this.downloadAndSetImage(this.imageId, this.imageSignature ?? '', this.qualityId, this.colorSetId, this.drawingDimensionsInPx);\n });\n }\n }\n\n protected downloadAndSetImage(imageId: string, imageSignature: string, qualityId: number, colorSetId: number, drawingDimensionsInPx: DimensionsInPx): void {\n if (isNil(qualityId) || isNil(colorSetId) || isNil(drawingDimensionsInPx)) {\n this.downloadOriginalDrawing(imageId, imageSignature)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (blob: Blob) => {\n this.setDownloadedImage(blob);\n },\n error: noop\n });\n } else {\n this.downloadRecoloredDrawing(imageId, qualityId, colorSetId, drawingDimensionsInPx)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (blob: Blob) => {\n this.setDownloadedImage(blob);\n },\n error: () => throwError(() => new UnhandledBackendError(BackendErrorSeverity.INFO, 'Something went wrong'))\n });\n }\n }\n\n protected setDownloadedImage(blob: Blob): void {\n BlobUtils.blobToImageData(blob).then((imageData: string) => {\n this.setImageFromData(imageData);\n this.imageDownloaded.emit(imageData);\n });\n }\n\n private downloadOriginalDrawing(imageId: string, imageSignature: string): Observable {\n return this.drawings.getDrawing(imageId, imageSignature);\n }\n\n private downloadRecoloredDrawing(imageId: string, qualityId: number, colorSetId: number, drawingDimensionsInPx: DimensionsInPx): Observable {\n return this.drawings.getRecoloredImage(imageId, qualityId, colorSetId, drawingDimensionsInPx);\n }\n}\n","
\n \"{{\n\n \n \n \"{{\n
\n \n
\n
\n
\n","import {Component, ElementRef, EventEmitter, HostListener, Input, Output, ViewChild} from '@angular/core';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {isNil} from 'lodash-es';\n\n@Component({\n selector: 'app-drawing-library-image-preview',\n templateUrl: './drawing-library-image-preview.component.html',\n styleUrls: ['./drawing-library-image-preview.component.scss']\n})\nexport class DrawingLibraryImagePreviewComponent {\n public static PREVIEW_TOOLTIP_HEIGHT_FROM_BOTTOM_IN_PX = 30;\n public readonly MISSING_DATA_IMAGE = 'assets/images/missing-design.svg';\n\n @ViewChild('preview') public preview: ElementRef;\n @Input() public drawingImage: DrawingImage;\n @Input() public qualityId: number;\n @Input() public colorSetId: number;\n @Input() public drawingDimensionsInPx: DimensionsInPx;\n @Input() public areImagesUploading: boolean;\n @Input() public shouldDownloadImage = false;\n @Input() public hasMissingDesign = false;\n @Input() public showAmountSpecifier: boolean;\n @Output() public imageDownloaded: EventEmitter = new EventEmitter();\n @Output() public hideTooltip: EventEmitter = new EventEmitter();\n\n @HostListener('mouseleave', ['$event']) public onMouseLeave(event: MouseEvent): void {\n const previewWidth = this.preview.nativeElement.offsetWidth;\n const previewHeight = this.preview.nativeElement.offsetHeight;\n const mouseOffsetY = event.offsetY;\n const mouseOffsetX = event.offsetX;\n\n const isMouseOutsidePreview = 0 >= mouseOffsetY || mouseOffsetY >= previewHeight || 0 >= mouseOffsetX || mouseOffsetX >= previewWidth;\n const isMouseOnTooltip = mouseOffsetY >= previewHeight - DrawingLibraryImagePreviewComponent.PREVIEW_TOOLTIP_HEIGHT_FROM_BOTTOM_IN_PX;\n\n if ((isMouseOutsidePreview && !isMouseOnTooltip) || this.showAmountSpecifier) {\n this.hideTooltip.emit();\n }\n }\n\n public isImageDownloading(): boolean {\n return isNil(this.areImagesUploading);\n }\n\n public canShowImageLoader(): boolean {\n return this.areImagesUploading;\n }\n\n public hasDrawingImageData(): boolean {\n return !isNil(this.drawingImage?.data);\n }\n\n public onImageDownloaded(image: string): void {\n this.imageDownloaded.emit(image);\n }\n}\n","import {Injectable, Renderer2} from '@angular/core';\nimport {DraggingService} from '@application/services/dragging/dragging.service';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {AssertionUtils, BaseComponent, convertHeightInMeterToPicks, convertPixelsToPicks, Unit} from '@vdw/angular-component-library';\nimport {CellEditingStoppedEvent, EditableCallbackParams, RowNode, RowSelectedEvent} from 'ag-grid-community';\n\n@Injectable()\nexport class DrawingLibraryHelper extends BaseComponent {\n public displayTechnicalUnit: boolean;\n public commercialUnit: Unit;\n public savedFilterModel: any;\n\n public constructor() {\n super();\n }\n\n public onRowDrag(params: {rowNode: RowNode; dragEvent: DragEvent}, productionScheduleItemMultiplier: number, draggingService: DraggingService, renderer: Renderer2): void {\n const listDrawing = new ListDrawingConfiguration(params.rowNode.data.drawing, params.rowNode.data.configurationIndex, params.rowNode.data.amount);\n listDrawing.amount = Math.floor(listDrawing.amount / productionScheduleItemMultiplier);\n\n draggingService.setData(listDrawing);\n\n const dragPreview = renderer.createElement('img');\n renderer.setAttribute(dragPreview, 'src', '/assets/images/image-placeholder.svg');\n\n params.dragEvent.dataTransfer.setDragImage(dragPreview, 0, 0);\n }\n\n public getQuantitySuggestionForPath(\n drawing: ListDrawingConfiguration,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number,\n shouldMakeSuggestion: boolean = false,\n productionScheduleMultiplier: number = 2\n ): number {\n if (!shouldMakeSuggestion) {\n drawing.amount = AssertionUtils.isNullOrUndefined(drawing.amount) ? productionScheduleMultiplier : drawing.amount;\n return drawing.amount;\n } else if (!AssertionUtils.isNullOrUndefined(drawing)) {\n drawing.amount = this.makeQuantitySuggestionCalculation(drawing, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks);\n return drawing.amount;\n }\n }\n\n public getWidthFilterForPath(productionSchedule: ProductionSchedule, selectedPath: ProductionSchedulePath, selectedRestPathColoredYarnSet: OverviewListColoredYarnSetWithStartDent): number {\n let widthFilter: number;\n\n if (AssertionUtils.isNullOrUndefined(selectedRestPathColoredYarnSet)) {\n const nrColumnsForWeftSelection = productionSchedule?.machineQuality?.numberOfColumnsToDropForWeftSelection ?? 0;\n\n widthFilter = selectedPath?.technicalWidthInDents + nrColumnsForWeftSelection;\n } else {\n let totalWidthOfPathsOfColoredYarnSetInDents = 0;\n\n const pathsOfSelectedRestPath = productionSchedule?.productionSchedulePathsOfColoredYarnSets?.filter(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent === selectedRestPathColoredYarnSet.startDent\n );\n\n pathsOfSelectedRestPath[0]?.productionSchedulePaths?.forEach((productionSchedulePath: ProductionSchedulePath) => {\n totalWidthOfPathsOfColoredYarnSetInDents += productionSchedulePath?.technicalWidthInDents;\n });\n\n const nrColumnsForWeftSelection = productionSchedule?.machineQuality?.numberOfColumnsToDropForWeftSelection;\n widthFilter = pathsOfSelectedRestPath[0]?.productionScheduleColoredYarnSet?.technicalWidthInDents - totalWidthOfPathsOfColoredYarnSetInDents;\n\n if (widthFilter === 0) {\n widthFilter = pathsOfSelectedRestPath[0].productionScheduleColoredYarnSet.technicalWidthInDents;\n }\n\n widthFilter += nrColumnsForWeftSelection;\n }\n\n return widthFilter;\n }\n\n public isQuantityEditable(params: EditableCallbackParams): boolean {\n return !params.data.drawing.repeated;\n }\n\n public recalculateQuantitySuggestionWhenRollLengthIsChanged(\n event: CellEditingStoppedEvent,\n rollLengthColumnId: string,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n buggyLengthMaxInPicks: number,\n availableSpaceInBuggyInPicks: number\n ): void {\n if (event.column.getColId() === rollLengthColumnId) {\n const value = this.getQuantitySuggestionForPath(event.node.data, productionSchedule, selectedPath, buggyLengthMaxInPicks, availableSpaceInBuggyInPicks, true);\n event.node.setDataValue('quantity', value);\n }\n }\n\n public setQuantitySuggestionForPath(\n event: RowSelectedEvent,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number\n ): void {\n const quantity = this.makeQuantitySuggestionCalculation(event.data, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks);\n\n if (!isNaN(quantity) || quantity < 0) {\n event.node.setDataValue('quantity', quantity);\n } else {\n event.node.setDataValue('quantity', 0);\n }\n }\n\n public getColorSetIdOfSelectedPath(productionSchedule: ProductionSchedule, selectedPath: ProductionSchedulePath): number {\n let colorSetId: number;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n if (productionSchedulePath.pathNumber === selectedPath.pathNumber) {\n colorSetId = productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.coloredYarnSet.overviewListColorSet.id;\n }\n });\n });\n\n return colorSetId;\n }\n\n public getInitializationFilterModel(\n showOnlyPreSelectedDrawings: boolean,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n selectedRestPathColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n preselectedDesignIds: number[],\n preselectedConfigurationIds: number[],\n isPreselection: boolean,\n selectedPathContentRowData: ProductionScheduleItemInPathGroup\n ): any {\n let filterModel: any;\n\n const widthFilter = this.getWidthFilterForPath(productionSchedule, selectedPath, selectedRestPathColoredYarnSet);\n const filterType = AssertionUtils.isNullOrUndefined(selectedPath) ? 'lessThanOrEqual' : 'equals';\n\n const designIds = preselectedDesignIds?.map((designId: number) => `${designId}`);\n const configurationIds = preselectedConfigurationIds?.map((configurationId: number) => `${configurationId}`);\n\n if (!AssertionUtils.isNullOrUndefined(this.savedFilterModel)) {\n filterModel = this.savedFilterModel;\n }\n\n const standardFilterModel = {\n missingDesign: {\n filterModels: [null, {values: ['false'], filterType: 'set'}],\n filterType: 'multi'\n },\n drawingType: {\n filterModels: [null, {values: ['BMP'], filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...standardFilterModel};\n\n if (!isPreselection) {\n const widthFilterModel = {\n widthInPx: {\n filterModels: [{filter: widthFilter, filterType: 'number', type: filterType}, null],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...widthFilterModel};\n } else {\n delete filterModel.widthInPx;\n }\n\n if (showOnlyPreSelectedDrawings && !AssertionUtils.isEmpty(designIds)) {\n let preselectionFilterModel = {\n id: {\n filterModels: [null, {values: designIds, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...preselectionFilterModel};\n } else {\n delete filterModel.id;\n }\n\n if (showOnlyPreSelectedDrawings && !AssertionUtils.isEmpty(configurationIds)) {\n const configurationFilterModel = {\n configurationId: {\n filterModels: [null, {values: configurationIds, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...configurationFilterModel};\n } else {\n delete filterModel.configurationId;\n }\n\n if (!AssertionUtils.isNullOrUndefined(selectedPathContentRowData) && AssertionUtils.isNullOrUndefined(selectedPathContentRowData?.orderLineId)) {\n const drawingId = [`${selectedPathContentRowData.drawing.id}`];\n\n const selectedDrawingIdFilterModel = {\n id: {\n filterModels: [null, {values: drawingId, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...selectedDrawingIdFilterModel};\n }\n\n return filterModel;\n }\n\n public getPreselectedDrawingAndConfigurationIdsFilterModel(preselectedDesignIds: number[], preselectedConfigurationIds: number[]): any {\n const designIds = preselectedDesignIds?.map((designId: number) => `${designId}`);\n const configurationIds = preselectedConfigurationIds?.map((configurationId: number) => `${configurationId}`);\n\n if (AssertionUtils.isEmpty(designIds)) {\n return null;\n }\n\n let filterModel = {\n id: {\n filterModels: [null, {values: designIds, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n if (!AssertionUtils.isNullOrUndefined(preselectedConfigurationIds) && !AssertionUtils.isEmpty(preselectedConfigurationIds)) {\n const configurationFilterModel = {\n configurationId: {\n filterModels: [null, {values: configurationIds, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...configurationFilterModel};\n }\n\n return filterModel;\n }\n\n public makeQuantitySuggestionCalculation(\n drawing: ListDrawingConfiguration,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number\n ): number {\n let availableSpace: number;\n let numberOfCloths = productionSchedule?.machine?.jacquard?.isSisal ? 1 : productionSchedule?.machineQuality?.weaveStructure?.numberOfCloths ?? 2;\n let drawingHeightInPicks = convertPixelsToPicks(drawing?.drawing?.dimensionsInPixels?.heightInPx, productionSchedule?.machineQuality?.weaveStructure?.picksPerColorLine);\n\n // For repeated designs we need to take into account the roll Length instead of taking the height of the drawing.\n if (drawing?.drawing?.repeated && !AssertionUtils.isNullOrUndefined(drawing.rollLengthInMeter)) {\n drawingHeightInPicks = convertHeightInMeterToPicks(drawing?.rollLengthInMeter, productionSchedule?.machineQuality.pickDensity * 1000, productionSchedule?.machineQuality?.weaveStructure);\n }\n\n if (AssertionUtils.isNullOrUndefined(numberOfCloths) || numberOfCloths === 0) {\n numberOfCloths = 2;\n }\n\n if (AssertionUtils.isNullOrUndefined(selectedPath)) {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, availableSpaceInBuggyInPicks ?? buggyLengthMaxInPicks));\n } else {\n let longestPathHeight = 0;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets?.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet?.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n if (productionSchedulePath?.totalLengthInPicks > longestPathHeight) {\n longestPathHeight = productionSchedulePath?.totalLengthInPicks;\n }\n });\n });\n\n const isLargestPath = longestPathHeight <= selectedPath?.totalLengthInPicks;\n\n if (isLargestPath) {\n if (!AssertionUtils.isNullOrUndefined(availableSpaceInBuggyInPicks)) {\n availableSpace = availableSpaceInBuggyInPicks ?? buggyLengthMaxInPicks - selectedPath.totalLengthInPicks;\n } else {\n availableSpace = buggyLengthMaxInPicks - selectedPath.totalLengthInPicks;\n }\n } else {\n if (!AssertionUtils.isNullOrUndefined(availableSpaceInBuggyInPicks)) {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, availableSpaceInBuggyInPicks));\n } else {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, buggyLengthMaxInPicks)) - selectedPath.totalLengthInPicks;\n }\n }\n }\n\n const totalHeightInPicks = this.getTotalCutbarLengthInPicks(productionSchedule) + drawingHeightInPicks;\n\n let quantity = Math.floor((availableSpace * numberOfCloths) / totalHeightInPicks);\n\n quantity -= quantity % numberOfCloths;\n\n return quantity > 0 ? quantity : productionSchedule?.getProductionScheduleItemMultiplier();\n }\n\n private getMaxBuggyLengthOrLongestPath(productionSchedule: ProductionSchedule, buggyLengthMaxInPicks: number): number {\n let longestPathLengthInPicks = this.getLongestPathLengthInPicks(productionSchedule);\n\n return longestPathLengthInPicks !== 0 ? longestPathLengthInPicks : buggyLengthMaxInPicks;\n }\n\n private getLongestPathLengthInPicks(productionSchedule: ProductionSchedule): number {\n const productionSchedulePathLenths =\n productionSchedule?.productionSchedulePathsOfColoredYarnSets\n .flatMap((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePathsOfColoredYarnSet?.productionSchedulePaths ?? [])\n .map((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath?.totalLengthInPicks ?? 0) ?? [];\n\n return Math.max(0, ...productionSchedulePathLenths);\n }\n\n private getTotalCutbarLengthInPicks(productionSchedule: ProductionSchedule): number {\n let finishing = productionSchedule?.finishing;\n\n let totalCutbarLengthInPicks = 0;\n\n if (!AssertionUtils.isNullOrUndefined(finishing)) {\n const cutbarBeforeLengthInPicks = isNaN(finishing?.cutbarsInformation?.cutbarBeforeProperties?.technicalLengthInPicks)\n ? 0\n : finishing?.cutbarsInformation?.cutbarBeforeProperties?.technicalLengthInPicks;\n const cutbarAfterLengthInPicks = isNaN(finishing?.cutbarsInformation?.cutbarAfterProperties?.technicalLengthInPicks)\n ? 0\n : finishing?.cutbarsInformation?.cutbarAfterProperties?.technicalLengthInPicks;\n totalCutbarLengthInPicks = cutbarBeforeLengthInPicks + cutbarAfterLengthInPicks;\n }\n\n return totalCutbarLengthInPicks;\n }\n}\n","
\n \n\n
\n \n \n
\n
\n
\n
\n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate: {attribute: 'GENERAL.NAME' | bmsTranslate} }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n
\n\n \n {{ 'DESIGN_LIBRARY.DESIGN' | bmsTranslate: {count: 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n\n \n \n {{ 'TEXTILE_DATA.FINISHING.FINISHING' | bmsTranslate: {count: 1} }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, UntypedFormControl, Validators} from '@angular/forms';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {Article} from '@domain/article/article';\nimport {FinishingForArticle} from '@domain/article/finishing-for-article';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingConfigurationWeaveQuality} from '@domain/production-schedule/drawing-configuration-weave-quality';\nimport {DrawingConfigurationWithColoredYarnSet} from '@domain/production-schedule/drawing-configuration-with-colored-yarn-set';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {ARTICLES, Articles} from '@infrastructure/http/article/articles';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {DRAWINGS, Drawings} from '@infrastructure/http/drawing/drawings';\nimport {SelectFinishingComponent} from '@presentation/components/select-finishing/select-finishing.component';\nimport {ConfigurationForm} from '@presentation/pages/texedit/drawing-library/drawing-form/drawing-form';\nimport {SelectDesignComponent} from '@presentation/pages/texfab/article/add/select-design/select-design.component';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AgGridRowSelection,\n AssertionUtils,\n BackendError,\n BaseComponent,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n convertToCommercialUnitCentimeter,\n convertToCommercialUnitMillimeter,\n DialogBuilderFactoryService,\n DialogComponentData,\n DialogType,\n FormValidationHelper,\n SaveType,\n skeletonViewAnimation,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, isUndefined, lowerCase, some} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {finalize, switchMap, takeUntil} from 'rxjs/operators';\nimport {NavigationArticleData} from './navigation-article-data.interface';\n\n@Component({\n templateUrl: './add-article-page.component.html',\n styleUrls: ['./add-article-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .ag-root, .button-skeleton-wrapper')]\n})\nexport class AddArticlePageComponent extends BaseComponent implements OnInit {\n private static readonly articleTranslationKey = 'ARTICLES.ARTICLE';\n public addArticleForm: FormGroup<{\n name: FormControl;\n design: FormControl;\n finishing: FormControl;\n configuration?: ConfigurationForm;\n }>;\n\n public isLoadingArticle = true;\n public isSelectingDesign = false;\n public isSelectingFinishing = false;\n public selectedMachineQualityId: number = null;\n public newItemId: number;\n public dialogComponent: any;\n\n private articleToSave: Article = Article.createEmptyArticle();\n private readonly urlToEditArticle = RouteUtils.paths.texFab.article.editArticle.path;\n private readonly urlToDuplicateArticle = RouteUtils.paths.texFab.article.duplicateArticle.path;\n private readonly urlToArticleOverview = RouteUtils.paths.texFab.article.absolutePath;\n private saveButtonTouched = false;\n private articleEditPermission: Permission = LastModifiedCardUtils.getPermissionToModifyItems('article');\n private currentSubscription: ProfileSubscription;\n public readonly FINISHING_CHIP_VALUE_KEY = '%(name) (v%(version))';\n public finishingBaseRouterLink = RouteUtils.paths.texStyle.machineQuality.editFinishingFromQuality.absolutePath;\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_ARTICLE;\n public readonly FINISHING_VIEW_PERMISSION = RouteUtils.paths.texStyle.finishingTemplate.editFinishingTemplate.requiredPermission;\n\n public constructor(\n @Inject(ARTICLES) private readonly articles: Articles,\n @Inject(AUTHENTICATION) private authentication: Authentication,\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(DRAWINGS) private readonly drawings: Drawings,\n private readonly router: Router,\n private readonly formBuilder: FormBuilder,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly textileService: TextileService,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n this.initializeAddArticleFormFields();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({article: this.getCurrentArticle()});\n }\n\n public isEditingArticle(): boolean {\n return isEqual(this.activatedRoute.snapshot.routeConfig.path, this.urlToEditArticle);\n }\n\n public getActionText(): string {\n const title = this.isEditingArticle() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: (this.translate.instant(AddArticlePageComponent.articleTranslationKey, {count: 1}) as string).toLowerCase()});\n }\n\n public cancel(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.urlToArticleOverview);\n }\n\n public hasEditPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.articleEditPermission);\n }\n\n public canEditArticle(): boolean {\n return this.hasEditPermission() && !this.isArticleBeingUsed();\n }\n\n public isArticleBeingUsed(): boolean {\n return !isUndefined(this.articleToSave) && this.articleToSave.used && !this.isDuplicatingArticle();\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = some(this.addArticleForm.controls, (control: UntypedFormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public openConflictsDialog(): void {\n this.articles\n .getConflicts(this.articleToSave.id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('basic-dialog-panel')\n .withWidth('500px')\n .withHeight('auto')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createInUseData('ARTICLES.ARTICLE', this.articleToSave.name, conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n public selectDesign(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('overflow-hidden-dialog')\n .withWidth('906px')\n .openDialog(SelectDesignComponent)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((designs: Drawing[]) => {\n if (!isEmpty(designs)) {\n this.addArticleForm.controls.design.setValue(designs[0]);\n\n this.addDesignConfiguration(null);\n }\n });\n }\n\n public canShowDesignConfiguration(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.addArticleForm.controls.configuration) && !AssertionUtils.isNullOrUndefined(this.addArticleForm.getRawValue().design);\n }\n\n public hasChosenFinishing(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.addArticleForm.getRawValue().finishing);\n }\n\n public getRouterLink(): string {\n return this.finishingBaseRouterLink;\n }\n\n public selectFinishing(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectFinishingComponent, {\n title: this.translate.instant('GENERAL.ACTIONS.SELECT_OBJECT', {\n object: lowerCase(this.translate.instant('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY', {count: 1}))\n }),\n rowSelection: AgGridRowSelection.SINGLE,\n machineQualityId: this.selectedMachineQualityId ?? null\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((finishing: OverviewListFinishing) => {\n if (!AssertionUtils.isNullOrUndefined(finishing)) {\n this.finishingBaseRouterLink = RouteUtils.paths.texStyle.machineQuality.editFinishingFromQuality.absolutePath.replace(':qualityId', finishing.machineQuality.id.toString());\n this.addArticleForm.controls.finishing.setValue(finishing);\n if (this.addArticleForm.controls.configuration) {\n const quality = new DrawingConfigurationWeaveQuality(finishing.machineQuality.id, finishing.machineQuality.name, finishing.machineQuality.version);\n this.addArticleForm.controls.configuration.controls.quality.setValue(quality);\n this.selectedMachineQualityId = finishing.machineQuality.id;\n }\n }\n });\n }\n\n public onQualityChanged(quality: DrawingConfigurationWeaveQuality): void {\n this.addArticleForm.controls.finishing.setValue(null);\n this.selectedMachineQualityId = quality?.id;\n }\n\n public saveArticle(saveType: SaveType): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForm(this.addArticleForm, this.document);\n\n if (isValid) {\n const articleToSave: Article = this.getCurrentArticle();\n this.saving = true;\n\n const request: Observable = this.isEditingArticle() ? this.articles.update(articleToSave) : this.articles.save(articleToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) =>\n this.textileService.navigateAndShowToast(saveType, TextileDataType.ARTICLE, AddArticlePageComponent.articleTranslationKey, this.isEditingArticle(), articleToSave.name, id),\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingArticle() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public deleteArticle(): void {\n this.textileService.removeConfirmation(this.articleToSave, TextileDataType.ARTICLE, false, null, this.articles);\n }\n\n public duplicateArticle(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.article.duplicateArticle.absolutePath.replace(':id', this.articleToSave.id.toString()));\n }\n\n public canShowArticleForm(): boolean {\n return !this.isSelectingDesign && !this.isSelectingFinishing;\n }\n\n private isDuplicatingArticle(): boolean {\n return isEqual(this.activatedRoute.snapshot.routeConfig.path, this.urlToDuplicateArticle);\n }\n\n private initializeAddArticleFormFields(): void {\n const urlParams: Params = this.activatedRoute.snapshot.params;\n\n this.articleToSave = Article.createEmptyArticle();\n this.setFormFields();\n\n const emptyArticleState = {article: null} as NavigationArticleData;\n const articleState = this.navigationHelperService.getPartialState(Object.keys(emptyArticleState));\n if (!AssertionUtils.isNullOrUndefined(articleState)) {\n this.setArticle(articleState.article);\n } else if (isUndefined(urlParams.id)) {\n this.isLoadingArticle = false;\n } else {\n this.articles\n .getById(Number(urlParams.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (article: Article) => {\n this.setArticle(article);\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.urlToArticleOverview)\n });\n }\n }\n\n private setFormFields(): void {\n this.addArticleForm = this.formBuilder.group({\n name: this.formBuilder.control({value: '', disabled: this.isArticleBeingUsed()}, Validators.required, AsyncUniqueValidator.createValidator(this.articles, null)),\n design: this.formBuilder.control({value: null, disabled: this.isArticleBeingUsed() || !this.canEditArticle()}, Validators.required),\n finishing: this.formBuilder.control({value: null, disabled: this.isArticleBeingUsed() || !this.canEditArticle()})\n });\n }\n\n private setArticle(article: Article): void {\n this.articleToSave = article;\n this.isLoadingArticle = false;\n this.setArticleFormValues();\n if (article.design) {\n let drawingConfiguration = article.design.configurations[0] as DrawingConfigurationWithColoredYarnSet;\n this.addDesignConfiguration(drawingConfiguration);\n this.finishingBaseRouterLink = RouteUtils.paths.texStyle.machineQuality.editFinishingFromQuality.absolutePath.replace(':qualityId', drawingConfiguration.quality.id.toString());\n }\n }\n\n private setArticleFormValues(): void {\n const name = this.isDuplicatingArticle() ? null : this.articleToSave.name;\n this.addArticleForm.setValue({\n name,\n design: this.articleToSave.design,\n finishing: this.articleToSave.finishing\n });\n\n if (this.isArticleBeingUsed()) {\n this.addArticleForm.controls.name.disable();\n } else {\n this.addArticleForm.controls.name.enable();\n }\n\n if (this.isArticleBeingUsed() || !this.canEditArticle()) {\n this.addArticleForm.controls.design.disable();\n this.addArticleForm.controls.finishing.disable();\n } else {\n this.addArticleForm.controls.design.enable();\n this.addArticleForm.controls.finishing.enable();\n }\n\n this.addArticleForm.controls.name.setAsyncValidators(AsyncUniqueValidator.createValidator(this.articles, name));\n this.addArticleForm.controls.name.updateValueAndValidity();\n\n this.navigationHelperService.setNewItemOrReopenDialogIfPresent(\n ({newItemId}: NavigationNewItemData, {dialogComponent}: DialogComponentData) => {\n if (dialogComponent === SelectDesignComponent) {\n this.setDesign(newItemId);\n } else {\n this.newItemId = newItemId;\n this.dialogComponent = dialogComponent;\n }\n },\n ({dialogComponent}: DialogComponentData) => {\n if (dialogComponent === SelectDesignComponent) {\n this.selectDesign();\n } else {\n this.dialogComponent = dialogComponent;\n }\n }\n );\n }\n\n private setDesign(id: number): void {\n this.drawings\n .getById(id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((design: Drawing) => {\n this.addArticleForm.controls.design.setValue(design);\n this.addDesignConfiguration(null);\n });\n }\n\n private addDesignConfiguration(designConfiguration: DrawingConfigurationWithColoredYarnSet): void {\n const design: Drawing = this.addArticleForm.getRawValue().design;\n\n const configuration = this.formBuilder.group({\n quality: this.formBuilder.control(this.getQuality(designConfiguration), Validators.required),\n coloredYarnSet: this.formBuilder.control(!AssertionUtils.isNullOrUndefined(designConfiguration?.coloredYarnSet?.id) ? designConfiguration.coloredYarnSet : null, Validators.required),\n mainColorsCreelPosition: this.formBuilder.control(!AssertionUtils.isNullOrUndefined(designConfiguration) ? designConfiguration.mainColorsCreelPosition : null, Validators.required),\n borderColorsCreelPosition: this.formBuilder.control(!AssertionUtils.isNullOrUndefined(designConfiguration) ? designConfiguration.borderColorsCreelPosition : null, Validators.required),\n image: this.formBuilder.control({id: design.image.id, data: design.image.data} as DrawingImage, Validators.required),\n heightInCm: this.formBuilder.control(\n !AssertionUtils.isNullOrUndefined(designConfiguration)\n ? convertToCommercialUnitCentimeter({\n unit: Unit.MILLIMETER,\n value: designConfiguration.commercialDimensionsInMm.heightInMM\n })\n : null,\n Validators.compose([Validators.required, Validators.min(1)])\n ),\n widthInCm: this.formBuilder.control(\n !AssertionUtils.isNullOrUndefined(designConfiguration)\n ? convertToCommercialUnitCentimeter({\n unit: Unit.MILLIMETER,\n value: designConfiguration.commercialDimensionsInMm.widthInMM\n })\n : null,\n Validators.compose([Validators.required, Validators.min(1)])\n )\n }) as ConfigurationForm;\n\n this.addArticleForm.removeControl('configuration');\n this.changeDetectorRef.detectChanges();\n\n this.addArticleForm.addControl('configuration', configuration);\n }\n\n private getQuality(designConfiguration: DrawingConfigurationWithColoredYarnSet): DrawingConfigurationWeaveQuality {\n let result: DrawingConfigurationWeaveQuality = null;\n\n if (AssertionUtils.isNullOrUndefined(designConfiguration) && this.hasChosenFinishing()) {\n const finishing = this.addArticleForm.getRawValue().finishing as OverviewListFinishing;\n result = new DrawingConfigurationWeaveQuality(finishing.machineQuality.id, finishing.machineQuality.name, finishing.machineQuality.version);\n } else if (!AssertionUtils.isNullOrUndefined(designConfiguration)) {\n result = designConfiguration.quality;\n }\n\n this.selectedMachineQualityId = result?.id;\n\n return result;\n }\n\n private getCurrentArticle(): Article {\n const name: string = this.addArticleForm.getRawValue().name;\n const design: Drawing = this.addArticleForm.getRawValue().design;\n const finishing = this.hasChosenFinishing() ? FinishingForArticle.fromOverviewListFinishing(this.addArticleForm.getRawValue().finishing as OverviewListFinishing) : null;\n\n if (!AssertionUtils.isNullOrUndefined(this.addArticleForm.controls.configuration)) {\n const configurationForm = this.addArticleForm.controls.configuration.value;\n\n const configuration: DrawingConfigurationWithColoredYarnSet = new DrawingConfigurationWithColoredYarnSet(\n configurationForm.image,\n configurationForm.mainColorsCreelPosition,\n configurationForm.borderColorsCreelPosition,\n configurationForm.quality,\n {\n heightInMM: convertToCommercialUnitMillimeter({\n unit: Unit.CENTIMETER,\n value: configurationForm.heightInCm\n }),\n widthInMM: convertToCommercialUnitMillimeter({\n unit: Unit.CENTIMETER,\n value: configurationForm.widthInCm\n })\n },\n configurationForm.coloredYarnSet\n );\n design.configurations = [configuration];\n }\n\n return new Article(this.articleToSave.id, name, design, finishing, this.articleToSave.used);\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(AddArticlePageComponent.articleTranslationKey, {\n count: 1\n })\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","
\n \n \n \n
\n
\n \n \n \n \n \n \n\n \n \n \n \n \n\n \n
\n
\n \n
\n\n\n","import {ChangeDetectorRef, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {DrawingImageUploadHelper} from '@application/helper/drawing/drawing-image-upload-helper';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {PropertyValue} from '@domain/property-value';\nimport {TargetForListOfDrawingsEnum} from '@domain/target-for-list-of-drawings.enum';\nimport {Drawings, DRAWINGS} from '@infrastructure/http/drawing/drawings';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {SearchFiltersComponent} from '@presentation/components/search-filters/search-filters.component';\nimport {BaseComponent, DesignFileType, DialogComponentData, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {find, isEmpty, isEqual, isNil, map, size, some} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {debounceTime, finalize, takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './select-design.component.html',\n styleUrls: ['./select-design.component.scss']\n})\nexport class SelectDesignComponent extends BaseComponent implements OnInit {\n @ViewChild('searchFilters') public searchFilters: SearchFiltersComponent;\n public listOfDrawings: ListDrawingConfiguration[] = [];\n public selectedDrawings: ListDrawingConfiguration[] = [];\n public canShowAdvancedSearch = false;\n public advancedSearchFilters: PropertyValue[] = [];\n public defaultUnit = Unit.CENTIMETER;\n public loadingDrawings = false;\n public designTranslationKey: string;\n public allowSelectMultipleDrawings: boolean;\n public readonly ALLOWED_FILE_EXTENSION_FOR_FILES = [DesignFileType.BMP, DesignFileType.EP, DesignFileType.TFT, DesignFileType.PVD].join();\n\n private hasFilterActive = false;\n private canGetMoreDrawings = false;\n\n private readonly bmpDrawingsOnly: PropertyValue[] = [{propertyName: AdvancedSearchInput.DRAWING_TYPE, propertyValue: DrawingType.BMP}];\n private readonly SLICE_LENGTH = 50;\n private readonly nameFilterChangeSubject: Subject = new Subject();\n private readonly dialogRef: MatDialogRef;\n private readonly changeDetectorRef: ChangeDetectorRef;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) private data: {translationKey: string; allowSelectMultipleDrawings?: boolean; selected?: Drawing[]},\n @Inject(DRAWINGS) private readonly drawings: Drawings,\n dialogRef: MatDialogRef,\n changeDetectorRef: ChangeDetectorRef,\n private readonly translate: TranslateService,\n private readonly drawingImageUploadHelper: DrawingImageUploadHelper\n ) {\n super();\n\n this.dialogRef = dialogRef;\n this.changeDetectorRef = changeDetectorRef;\n this.designTranslationKey = data?.translationKey\n ? data.translationKey\n : this.translate.instant('DESIGN_LIBRARY.DESIGN', {\n object: 1\n });\n this.allowSelectMultipleDrawings = data?.allowSelectMultipleDrawings ?? false;\n if (data?.selected) {\n this.selectedDrawings.push(...map(data.selected, (drawing: Drawing) => new ListDrawingConfiguration(drawing, 0)));\n }\n this.drawingImageUploadHelper.unSubscribeOnViewDestroy = this.unSubscribeOnViewDestroy;\n }\n\n public ngOnInit(): void {\n this.getFirstSliceOfDesigns();\n this.initializeAdvancedSearchFilters();\n this.subscribeToNameFilterChanges();\n }\n\n public hasDrawings(): boolean {\n return !isEmpty(this.listOfDrawings);\n }\n\n public onDrawingSelected(drawingConfigurations: ListDrawingConfiguration[]): void {\n this.selectedDrawings = drawingConfigurations;\n }\n\n public canSelectDesign(): boolean {\n return !isEmpty(this.selectedDrawings);\n }\n\n public selectDesign(): void {\n this.dialogRef.close(map(this.selectedDrawings, (drawingConfiguration: ListDrawingConfiguration) => drawingConfiguration.drawing));\n }\n\n public onDrawingDoubleClicked(drawingConfiguration: ListDrawingConfiguration): void {\n this.onDrawingSelected([drawingConfiguration]);\n this.selectDesign();\n }\n\n public showAdvancedSearch(): void {\n this.canShowAdvancedSearch = true;\n }\n\n public closeAdvancedSearch(): void {\n this.canShowAdvancedSearch = false;\n }\n\n public updateAdvancedSearchFilters(updatedAdvancedSearchFilters?: PropertyValue[]): void {\n if (!isNil(updatedAdvancedSearchFilters)) {\n this.advancedSearchFilters = updatedAdvancedSearchFilters;\n this.closeAdvancedSearch();\n this.changeDetectorRef.detectChanges();\n this.searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n }\n this.checkIfHasFilterActive();\n this.getFirstSliceOfDesigns();\n }\n\n public onNameFilterChange(name: string): void {\n this.nameFilterChangeSubject.next(name);\n }\n\n public getNameFilterValue(): string {\n return find(this.advancedSearchFilters, {propertyName: AdvancedSearchInput.NAME}).propertyValue;\n }\n\n public canShowNoResultOverlay(): boolean {\n return this.hasFilterActive && !this.hasDrawings();\n }\n\n public canShowFilterInput(): boolean {\n return this.loadingDrawings || this.hasFilterActive || this.hasDrawings();\n }\n\n public onVirtualScrollerEnd(): void {\n if (this.canGetMoreDrawings) {\n this.canGetMoreDrawings = false;\n this.getDesigns();\n }\n }\n\n public onDrawingFileChange(files: File[]): void {\n this.drawingImageUploadHelper.uploadFiles(files, {dialogComponent: SelectDesignComponent} as DialogComponentData);\n }\n\n private getDesigns(): void {\n this.drawings\n .getSlice(size(this.listOfDrawings), this.SLICE_LENGTH, 'thumbs', false, TargetForListOfDrawingsEnum.PRODUCTION_ORDER, this.getAdvancedSearchFiltersWithRestrictions())\n .pipe(\n finalize(() => (this.loadingDrawings = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((drawings: Drawing[]) => {\n this.listOfDrawings.push(...map(drawings, (drawing: Drawing) => new ListDrawingConfiguration(drawing, 0)));\n\n this.canGetMoreDrawings = isEqual(size(drawings), this.SLICE_LENGTH);\n });\n }\n\n private initializeAdvancedSearchFilters(): void {\n const shapeFilter: PropertyValue = {propertyName: AdvancedSearchInput.DRAWING_SHAPE};\n this.advancedSearchFilters.push(\n {propertyName: AdvancedSearchInput.NAME},\n {propertyName: AdvancedSearchInput.DRAWING_CODE},\n {propertyName: AdvancedSearchInput.LENGTH},\n {propertyName: AdvancedSearchInput.WIDTH},\n shapeFilter,\n {propertyName: AdvancedSearchInput.MACHINE_QUALITY},\n {propertyName: AdvancedSearchInput.COLOR_SET},\n {propertyName: AdvancedSearchInput.MAIN_COLOR},\n {propertyName: AdvancedSearchInput.BORDER_COLOR}\n );\n this.drawings\n .getDrawingShapes()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((drawingShapes: string[]) => {\n if (!isNil(drawingShapes)) {\n shapeFilter.possiblePropertyValues = drawingShapes;\n }\n });\n }\n\n private subscribeToNameFilterChanges(): void {\n this.nameFilterChangeSubject.pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy)).subscribe((name: string) => {\n find(this.advancedSearchFilters, {propertyName: AdvancedSearchInput.NAME}).propertyValue = name;\n\n this.checkIfHasFilterActive();\n\n this.searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n this.getFirstSliceOfDesigns();\n });\n }\n\n private checkIfHasFilterActive(): void {\n this.hasFilterActive = some(this.advancedSearchFilters, (advancedSearchFilter: PropertyValue) => AdvancedSearchUtils.hasValue(advancedSearchFilter));\n }\n\n private getFirstSliceOfDesigns(): void {\n this.listOfDrawings = [];\n this.loadingDrawings = true;\n this.getDesigns();\n }\n\n private getAdvancedSearchFiltersWithRestrictions(): PropertyValue[] {\n return [...this.advancedSearchFilters, ...this.bmpDrawingsOnly];\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddArticlePageComponent} from '@presentation/pages/texfab/article/add/add-article-page.component';\nimport {ArticleOverviewPageComponent} from '@presentation/pages/texfab/article/overview/article-overview-page.component';\n\nconst shared = {parentId: NavigationId.ARTICLE_MODULE};\n\nexport const articleRoutes = [\n Factory.createPrototypeComponentRoute(ArticleOverviewPageComponent, {route: '', id: NavigationId.ARTICLE, ...shared}),\n Factory.createPrototypeComponentRoute(AddArticlePageComponent, {route: 'add/:id', requiredPermission: Permission.TEXFAB_ARTICLE_EDIT, id: NavigationId.DUPLICATE_ARTICLE, ...shared}),\n Factory.createPrototypeComponentRoute(AddArticlePageComponent, {route: 'edit/:id', requiredPermission: Permission.TEXFAB_ARTICLE_VIEW, id: NavigationId.EDIT_ARTICLE, ...shared}),\n Factory.createPrototypeComponentRoute(AddArticlePageComponent, {route: 'add', requiredPermission: Permission.TEXFAB_ARTICLE_EDIT, reuse: true, id: NavigationId.ADD_ARTICLE, ...shared})\n];\n\nexport const articleDataRouting: ModuleWithProviders = RouterModule.forChild(articleRoutes);\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {ARTICLES, Articles} from '@infrastructure/http/article/articles';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\nimport {GridColoredYarnSetPreviewComponent} from '@presentation/pages/textile-data/colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BaseComponent, ColDefBuilderFactoryService, LinkIconRendererComponent} from '@vdw/angular-component-library';\nimport {ColDef, GridApi, ICellRendererParams} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './article-overview-page.component.html'\n})\nexport class ArticleOverviewPageComponent extends BaseComponent implements OnInit {\n public listOfArticles: OverviewListArticle[];\n\n public readonly textileDataType = TextileDataType;\n public readonly GRID_IDENTIFIER = GridIdentifier.ARTICLE_OVERVIEW;\n\n private pageUrls: PageUrls;\n\n public constructor(\n @Inject(ARTICLES) public readonly articles: Articles,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.loadArticles();\n this.pageUrls = LastModifiedCardUtils.getPageUrls('article');\n }\n\n public getColumnDefs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('name')\n .withField('name')\n .withHeaderName('CUSTOMERS.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColId('design').withField('design.name').withHeaderName('DESIGN_LIBRARY.DESIGN').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('quality')\n .withField('machineQuality.nameWithVersion')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('coloredYarnSet')\n .withValueGetter('data.coloredYarnSet')\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET')\n .withCellRenderer(GridColoredYarnSetPreviewComponent)\n .withSortable(false)\n .withoutFilter()\n .build()\n ];\n }\n\n public exportGridForArticles(gridApi: GridApi): void {\n gridApi.exportDataAsCsv({\n columnKeys: ['name', 'design', 'quality']\n });\n }\n\n private loadArticles(): void {\n this.articles\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfArticles: OverviewListArticle[]) => {\n this.listOfArticles = listOfArticles;\n });\n }\n}\n","\n\n","import {DrawingForArticle} from '@domain/article/drawing-for-article';\nimport {MachineQualityForArticle} from '@domain/article/machine-quality-for-article';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {isNil} from 'lodash-es';\n\nexport class OverviewListArticle {\n private _id: number;\n private _name: string;\n private _design: DrawingForArticle;\n private _machineQuality: MachineQualityForArticle;\n private _coloredYarnSet: OverviewListColoredYarnSet;\n\n public constructor(id: number, name: string, design: DrawingForArticle, machineQuality: MachineQualityForArticle, coloredYarnSet: OverviewListColoredYarnSet) {\n this._id = id;\n this._name = name;\n this._design = design;\n this._machineQuality = machineQuality;\n this._coloredYarnSet = coloredYarnSet;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get design(): DrawingForArticle {\n return this._design;\n }\n\n public get machineQuality(): MachineQualityForArticle {\n return this._machineQuality;\n }\n\n public get coloredYarnSet(): OverviewListColoredYarnSet {\n return this._coloredYarnSet;\n }\n\n public static fromJSON(articleJSON: any): OverviewListArticle {\n return new OverviewListArticle(\n articleJSON.id,\n articleJSON.name,\n !isNil(articleJSON.design) ? DrawingForArticle.fromJSON(articleJSON.design) : null,\n !isNil(articleJSON.machineQuality) ? MachineQualityForArticle.fromJSON(articleJSON.machineQuality) : null,\n !isNil(articleJSON.coloredYarnSet) ? OverviewListColoredYarnSet.fromJSON(articleJSON.coloredYarnSet) : null\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {Customer} from '@domain/customer/customer';\nimport {Customers, CUSTOMERS} from '@infrastructure/http/customer/customers';\nimport {\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridOptionsBuilder,\n NavigationHelperPrototypeService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {CustomerOverviewService} from './overview/customer-overview.service';\n\n@Injectable()\nexport class CustomerSelectionService {\n private config: CrudOverviewDataConfig;\n\n public constructor(\n @Inject(CUSTOMERS) public readonly customers: Customers,\n private readonly overview: CustomerOverviewService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService\n ) {\n this.init();\n }\n\n public init(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName('CUSTOMERS.CUSTOMER')\n .withRowData(this.customers.getAll())\n .withCrudGridOptions(this.overview.getColumnDefs(false), GridIdentifier.CUSTOMER_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: Customer | Customer[]): Observable {\n this.config.selectedObjects = Array.isArray(inputValue) ? inputValue : [inputValue];\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","\n
\n \n \n\n \n \n
\n
\n

{{ 'CUSTOMERS.DETAILS' | bmsTranslate }}

\n
\n
\n
\n
\n
\n \n {{ 'CUSTOMERS.NUMBER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NUMBER_DUPLICATE' | bmsTranslate }}\n \n {{ 'GENERAL.VALIDATION.MAXIMUM' | bmsTranslate }}: {{ '9,223,372,036,854,775,807' }} \n \n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n \n
\n \n \n {{ 'CUSTOMERS.STREET_NAME' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n
\n \n \n {{ 'CUSTOMERS.COUNTRY' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n \n \n {{ 'CUSTOMERS.STREET_NUMBER' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n
\n
\n \n \n {{ 'CUSTOMERS.POSTAL_CODE' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n \n \n {{ 'CUSTOMERS.CITY' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n
\n \n
\n
\n \n \n {{ 'CUSTOMERS.TELEPHONE' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n \n \n {{ 'CUSTOMERS.FAX' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n
\n \n \n {{ 'CUSTOMERS.EMAIL' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n {{ 'GENERAL.ERRORS.INVALID_EMAIL' | bmsTranslate }}\n \n \n
\n
\n\n
\n \n \n {{ 'CUSTOMERS.COMMENTS' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n \n {{ 'CUSTOMERS.CONFIRM' | bmsTranslate }}\n \n
\n
\n
\n
\n
\n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {Customer} from '@domain/customer/customer';\nimport {CustomerAddressDetails} from '@domain/customer/customer-address-details';\nimport {CustomerContactDetails} from '@domain/customer/customer-contact-details';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {Customers, CUSTOMERS} from '@infrastructure/http/customer/customers';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BackendLimitsConstants} from '@shared/constants/backend-limits.constants';\nimport {\n BackendError,\n BaseComponent,\n canShowErrorForErrorCodeAndFormControlForFormGroup,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n DialogBuilderFactoryService,\n DialogComponentData,\n DialogType,\n FormValidationHelper,\n RESPONSIVENESS_VIEW_MODE,\n ResponsivenessViewMode,\n SaveType,\n skeletonViewAnimation,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, isNil, some} from 'lodash-es';\nimport {Observable, Subject} from 'rxjs';\nimport {debounceTime, distinctUntilChanged, finalize, switchMap, takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './add-customer.component.html',\n styleUrls: ['./add-customer.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .button-skeleton-wrapper, checkbox-skeleton')]\n})\nexport class AddCustomerComponent extends BaseComponent implements OnInit {\n public addCustomerForm: FormGroup<{\n number: FormControl;\n name: FormControl;\n comments: FormControl;\n confirm: FormControl;\n addressDetails: FormGroup<{\n streetName: FormControl;\n country: FormControl;\n streetNumber: FormControl;\n postalCode: FormControl;\n city: FormControl;\n }>;\n contactDetails: FormGroup<{\n telephone: FormControl;\n fax: FormControl;\n email: FormControl;\n }>;\n }>;\n\n public saving: boolean;\n public invalidFormFieldMessage = '';\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_CUSTOMER;\n\n private readonly EDIT_PERMISSION = Permission.TEXFAB_CUSTOMER_EDIT;\n private urlToCustomerOverview = RouteUtils.paths.texFab.customer.absolutePath;\n private urlToEditCustomer = RouteUtils.paths.texFab.customer.editCustomer.path;\n private saveButtonTouched = false;\n private loading = false;\n private readonly labelForCustomer = 'CUSTOMERS.CUSTOMER';\n private invalidFormFieldMessageChangeSubject: Subject = new Subject();\n private customer: Customer;\n private currentSubscription: Subscription;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(CUSTOMERS) private readonly customers: Customers,\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly formBuilder: FormBuilder,\n private readonly translate: TranslateService,\n private readonly router: Router,\n private readonly activatedRoute: ActivatedRoute,\n private readonly textileService: TextileService,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.initializeAddCustomerComponent();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.onDestroy();\n }\n\n public canShowErrorForFormControl(errorCode: string, formControlName: string): boolean {\n return canShowErrorForErrorCodeAndFormControlForFormGroup(errorCode, formControlName, this.addCustomerForm);\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = this.checkIfAddCustomerFormIsValidAfterTouched();\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public saveCustomer(saveType: SaveType): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.addCustomerForm], this.document);\n if (isValid) {\n this.saving = true;\n const customer: Customer = new Customer(\n this.isEditingCustomer() ? this.customer.id : null,\n this.addCustomerForm.value.number,\n this.addCustomerForm.value.name,\n new CustomerContactDetails(this.addCustomerForm.value.contactDetails.email, this.addCustomerForm.value.contactDetails.telephone, this.addCustomerForm.value.contactDetails.fax),\n new CustomerAddressDetails(\n this.addCustomerForm.value.addressDetails.streetName,\n this.addCustomerForm.value.addressDetails.country,\n this.addCustomerForm.value.addressDetails.streetNumber,\n this.addCustomerForm.value.addressDetails.postalCode,\n this.addCustomerForm.value.addressDetails.city\n ),\n this.addCustomerForm.value.comments\n );\n\n const request: Observable = this.isEditingCustomer() ? this.customers.update(customer) : this.customers.save(customer);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => this.textileService.navigateAndShowToast(saveType, TextileDataType.CUSTOMER, this.labelForCustomer, this.isEditingCustomer(), customer.name, id),\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingCustomer() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public deleteCustomer(): void {\n this.textileService.removeConfirmation(this.customer, TextileDataType.CUSTOMER, false, null, this.customers);\n }\n\n public hasEditPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.EDIT_PERMISSION);\n }\n\n public cancel(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.urlToCustomerOverview);\n }\n\n public isCustomerBeingUsed(): boolean {\n return this.customer && this.customer.used;\n }\n\n public openConflictsDialog(): void {\n this.customers\n .getConflicts(this.customer.id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createInUseData(this.labelForCustomer, this.customer.name, conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n public isEditingCustomer(): boolean {\n return isEqual(this.activatedRoute.snapshot.routeConfig.path, this.urlToEditCustomer);\n }\n\n public getActionText(): string {\n const title = this.isEditingCustomer() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: (this.translate.instant('CUSTOMERS.CUSTOMER', {count: 1}) as string).toLowerCase()});\n }\n\n public canShowSkeletonView(): boolean {\n return this.loading;\n }\n\n public isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n\n public canShowInvalidFormFieldMessage(): boolean {\n let result = this.isMobile();\n\n if (result) {\n const matErrorElement: HTMLElement = this.document.querySelector('.mat-error');\n\n if (!isNil(matErrorElement)) {\n this.invalidFormFieldMessageChangeSubject.next(matErrorElement.innerHTML);\n } else {\n this.invalidFormFieldMessageChangeSubject.next('');\n }\n\n result = !isEmpty(this.invalidFormFieldMessage);\n }\n\n return result;\n }\n\n private subscribeToInvalidFormFieldMessageChanges(): void {\n this.invalidFormFieldMessageChangeSubject.pipe(takeUntil(this.unSubscribeOnViewDestroy), debounceTime(100), distinctUntilChanged()).subscribe((invalidFormFieldMessage: string) => {\n this.invalidFormFieldMessage = invalidFormFieldMessage;\n });\n }\n\n private getCustomerId(): number {\n return this.isEditingCustomer() ? this.activatedRoute.snapshot.params.id : null;\n }\n\n private initializeAddCustomerComponent(): void {\n this.setFormFields();\n if (this.isEditingCustomer()) {\n this.loading = true;\n this.customers\n .getById(this.getCustomerId())\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (customer: Customer) => {\n if (!isNil(customer)) {\n this.customer = customer;\n this.setFormValues(customer);\n this.loading = false;\n }\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.urlToCustomerOverview)\n });\n }\n\n this.subscribeToInvalidFormFieldMessageChanges();\n }\n\n private setFormFields(): void {\n this.addCustomerForm = this.formBuilder.group({\n number: this.formBuilder.control(null, [Validators.required, Validators.max(BackendLimitsConstants.INT64_MAX)]),\n name: this.formBuilder.control(null, Validators.required),\n comments: this.formBuilder.control(null),\n confirm: this.formBuilder.control(false, Validators.requiredTrue),\n addressDetails: this.formBuilder.group({\n streetName: this.formBuilder.control(null),\n country: this.formBuilder.control(null),\n streetNumber: this.formBuilder.control(null),\n postalCode: this.formBuilder.control(null),\n city: this.formBuilder.control(null)\n }),\n contactDetails: this.formBuilder.group({\n telephone: this.formBuilder.control(null),\n fax: this.formBuilder.control(null),\n email: this.formBuilder.control(null, Validators.email)\n })\n });\n\n if (!this.isEditingCustomer()) {\n this.setTechnicalNumberAsyncValidator();\n }\n }\n\n private setTechnicalNumberAsyncValidator(number: number = null): void {\n this.addCustomerForm.controls.number.setAsyncValidators([AsyncUniqueValidator.createValidator(this.customers, number)]);\n this.addCustomerForm.controls.number.updateValueAndValidity();\n }\n\n private setFormValues(customer: Customer): void {\n this.addCustomerForm.reset({\n number: customer.number,\n name: customer.name,\n addressDetails: {\n streetName: customer.addressDetails.streetName,\n country: customer.addressDetails.country,\n streetNumber: customer.addressDetails.streetNumber,\n postalCode: customer.addressDetails.postalCode,\n city: customer.addressDetails.city\n },\n contactDetails: {\n telephone: customer.contactDetails.telephone,\n fax: customer.contactDetails.fax,\n email: customer.contactDetails.email\n },\n comments: customer.comments,\n confirm: true\n });\n if (this.isCustomerBeingUsed() || !this.currentSubscription?.hasPermission(this.EDIT_PERMISSION)) {\n this.addCustomerForm.disable();\n }\n this.setTechnicalNumberAsyncValidator(customer.number);\n }\n\n private checkIfAddCustomerFormIsValidAfterTouched(): boolean {\n return !isNil(this.addCustomerForm) ? some(this.addCustomerForm.controls, (control: FormControl) => control.invalid && control.touched) : false;\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(this.labelForCustomer, {\n count: 1\n })\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddCustomerComponent} from './add/add-customer.component';\nimport {CustomerOverviewPageComponent} from './overview/customer-overview-page.component';\n\nconst shared = {parentId: NavigationId.CUSTOMER_MODULE};\n\nexport const customerRoutes = [\n Factory.createPrototypeComponentRoute(CustomerOverviewPageComponent, {route: '', requiredPermission: null, id: NavigationId.CUSTOMER, ...shared}),\n Factory.createPrototypeComponentRoute(AddCustomerComponent, {route: 'edit/:id', requiredPermission: Permission.TEXFAB_CUSTOMER_VIEW, id: NavigationId.EDIT_CUSTOMER, ...shared}),\n Factory.createPrototypeComponentRoute(AddCustomerComponent, {route: 'add', requiredPermission: Permission.TEXFAB_CUSTOMER_EDIT, reuse: true, id: NavigationId.ADD_CUSTOMER, ...shared})\n];\n\nexport const customerDataRouting: ModuleWithProviders = RouterModule.forChild(customerRoutes);\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {Customer} from '@domain/customer/customer';\nimport {Customers, CUSTOMERS} from '@infrastructure/http/customer/customers';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BaseComponent} from '@vdw/angular-component-library';\nimport {ColDef} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\nimport {CustomerOverviewService} from './customer-overview.service';\n\n@Component({\n templateUrl: './customer-overview-page.component.html'\n})\nexport class CustomerOverviewPageComponent extends BaseComponent implements OnInit {\n public listOfCustomers: Customer[];\n\n public readonly textileDataType = TextileDataType;\n public readonly GRID_IDENTIFIER = GridIdentifier.CUSTOMER_OVERVIEW;\n\n public constructor(\n @Inject(CUSTOMERS) public readonly customers: Customers,\n private readonly customerOverviewService: CustomerOverviewService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.customers\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((customers: Customer[]) => {\n this.listOfCustomers = customers;\n });\n }\n\n public getColumnDefs(): ColDef[] {\n return this.customerOverviewService.getColumnDefs().colDefs;\n }\n}\n","\n","import {Injectable} from '@angular/core';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {\n ColDefBuilderFactoryService,\n CrudColdef,\n GridOptionsBuilder,\n LinkIconRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Injectable()\nexport class CustomerOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(withLinkIcon: boolean = true): CrudColdef {\n let nameColDef = this.colDefBuilderFactoryService.getBuilder().withColIdAndField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator);\n\n if (withLinkIcon) {\n nameColDef = nameColDef.withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: LastModifiedCardUtils.getPageUrls('customer').edit\n };\n });\n }\n\n return {\n colDefs: [\n this.colDefBuilderFactoryService.getBuilder().withField('number', true).withHeaderName('CUSTOMERS.NUMBER').withComparator(intComparator).build(),\n nameColDef.build(),\n this.colDefBuilderFactoryService.getBuilder().withField('addressDetails.streetName', true).withHeaderName('CUSTOMERS.STREET_NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('contactDetails.email', true).withHeaderName('CUSTOMERS.EMAIL').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('contactDetails.telephone', true).withHeaderName('CUSTOMERS.TELEPHONE').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('comments', true).withHeaderName('CUSTOMERS.COMMENTS').withComparator(StringUtils.stringComparator).build()\n ],\n rowActionsComplete: null\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('CUSTOMERS.CUSTOMER', {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","\n\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {OrderLinesGridService} from '@application/helper/orderbook/order-lines-grid.service';\nimport {OrderLinesTarget} from '@domain/order-lines-target.enum';\nimport {PropertyValue} from '@domain/property-value';\nimport {ORDERBOOK, Orderbook} from '@infrastructure/http/orderbook/orderbook';\nimport {OverviewListOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-order-line';\nimport {\n AgGridRowSelection,\n AssertionUtils,\n BaseComponent,\n DialogBuilder,\n DialogBuilderFactoryService,\n DialogType,\n GridModel,\n GridOptionsBuilderFactoryService,\n LoadingCellOverlayComponent,\n LocalStorageService,\n NoDataOverlayComponentParams,\n Unit\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {\n ColDef,\n FilterChangedEvent,\n GridApi,\n GridOptions,\n GridReadyEvent,\n IRowNode,\n IServerSideDatasource,\n IServerSideGetRowsParams,\n RowClickedEvent,\n RowNode,\n RowSelectedEvent,\n RowSelectionOptions,\n SortModelItem\n} from 'ag-grid-community';\nimport {isEmpty, isNil, some} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-order-lines-grid',\n templateUrl: './order-lines-grid.component.html',\n styleUrls: ['./order-lines-grid.component.scss']\n})\nexport class OrderLinesGridComponent extends BaseComponent implements OnInit, OnChanges {\n @ViewChild('orderLinesGrid') public orderLinesGrid: AgGridAngular;\n @ViewChild('exportOrderLinesGrid') public exportOrderLinesGrid: AgGridAngular;\n\n @Input() public advancedSearchFilters: PropertyValue[];\n @Input() public selectedOrderLines: OverviewListOrderLine[];\n @Input() public noRowsOverlayComponentParams: Partial;\n @Input() public target: OrderLinesTarget;\n @Input() public unit: Unit = Unit.CENTIMETER;\n @Input() public isExporting = false;\n\n @Output() public selectedOrderLinesChange: EventEmitter = new EventEmitter();\n @Output() public advancedSearchFiltersChange: EventEmitter = new EventEmitter();\n @Output() public exportComplete: EventEmitter = new EventEmitter();\n\n public gridOptions: GridOptions;\n public loadingForTheFirstTime = true;\n public exportGridOptions: GridOptions = {};\n public exportData: OverviewListOrderLine[] = [];\n private colDefs: ColDef[] = [];\n private readonly quantityOfOrderLinesToRequestPerSlice = 30;\n private readonly localStorageFilterModelKey = 'filterModel.Orderbook';\n private dialogBuilder: DialogBuilder;\n\n public constructor(\n @Inject(ORDERBOOK) private readonly orderbook: Orderbook,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly orderLinesGridService: OrderLinesGridService,\n private readonly localStorage: LocalStorageService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.initialiseGridOptions();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('selectedOrderLines' in changes && !changes.selectedOrderLines.isFirstChange()) {\n this.handleSelectedOrderLinesChange();\n }\n\n if ('isExporting' in changes && this.isExporting === true) {\n this.exportAllData();\n }\n }\n\n public reloadOrderLines(): void {\n this.orderLinesGrid.api.hideOverlay();\n this.orderLinesGrid.api.refreshServerSide({purge: true});\n }\n\n public exportAllData(): void {\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n this.dialogBuilder.openAlertDialog({\n titleText: 'AGGRID.EXPORT',\n messageText: 'AGGRID.EXPORTMESSAGE',\n type: DialogType.INFORMATION\n });\n\n this.exportOrderLinesGrid.api.setGridOption('columnDefs', this?.colDefs);\n const sortModel: SortModelItem[] = [];\n let startRow: number = 0;\n let endRow: number = 30;\n const filterModel = this.orderLinesGrid.api.getFilterModel();\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n this.fetchExportData(gridModel);\n }\n\n private fetchExportData(gridModel: GridModel): void {\n this.orderLinesGrid.api.setGridOption('suppressRowClickSelection', true);\n\n this.orderbook\n .getSlice(this.target, gridModel)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfOrderlines: OverviewListOrderLine[]) => {\n listOfOrderlines.forEach((orderline: OverviewListOrderLine) => {\n this.exportData.push(orderline);\n });\n\n if (listOfOrderlines.length < 29) {\n this.exportOrderLinesGrid.api.setGridOption('rowData', this.exportData);\n this.exportGridOptions.cacheBlockSize = this.exportData.length;\n this.orderLinesGrid.api.setGridOption('suppressRowClickSelection', false);\n this.exportOrderLinesGrid.api.exportDataAsCsv();\n this.isExporting = false;\n this.exportData = [];\n this.onExportComplete();\n this.dialogBuilder.close();\n } else {\n gridModel.startRow += 30;\n gridModel.endRow += 30;\n this.fetchExportData(gridModel);\n }\n });\n }\n\n private initialiseGridOptions(): void {\n this.orderLinesGridService\n .getColumnDefs(this.unit)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((colDefs: ColDef[]) => {\n this.colDefs = colDefs;\n this.gridOptions = this.gridOptionsBuilderFactoryService\n .getBuilder(colDefs, this.isGridTargetOrderbook() ? GridIdentifier.ORDERBOOK : GridIdentifier.ORDER_ITEMS, undefined, true)\n .withHeaderHeight(32)\n .withFloatingFiltersHeight(32)\n .withLoadingCellRenderer('customLoadingCellRenderer')\n .withServerSideDataSource(this.quantityOfOrderLinesToRequestPerSlice, this.getServerSideDatasource())\n .withRowSelection(false, false)\n .withOnRowClicked((rowClickedEvent: RowClickedEvent) => this.onRowClicked(rowClickedEvent.node))\n .withOnRowSelected(({api}: RowSelectedEvent) => this.onRowSelected(api))\n .withComponents({\n customLoadingCellRenderer: LoadingCellOverlayComponent\n })\n .withNoRowsOverlay({\n ...this.noRowsOverlayComponentParams,\n isAnyFilterPresent: () => this.hasFilterActive()\n } as NoDataOverlayComponentParams)\n .withCompactView()\n .withOnGridReady(({api}: GridReadyEvent) => this.applyFilterModel(api))\n .withOnFilterChanged(({api}: FilterChangedEvent) => this.saveFilterModel(api))\n .build();\n });\n }\n\n private hasFilterActive(): boolean {\n return Object.values(this.orderLinesGrid.api.getFilterModel()).length > 0;\n }\n\n private onRowClicked(rowNode: IRowNode): void {\n if (rowNode.isSelected() && this.selectedOrderLines[0]?.id === rowNode.data.id) {\n rowNode.setSelected(false);\n }\n }\n\n private onExportComplete(): void {\n this.exportComplete.emit(true);\n }\n\n private onRowSelected(gridApi: GridApi): void {\n this.selectedOrderLinesChange.emit(gridApi.getSelectedNodes().map((rowNode: RowNode) => rowNode.data));\n }\n\n private getServerSideDatasource(): IServerSideDatasource {\n return {\n getRows: (params: IServerSideGetRowsParams): void => {\n const sortModel: SortModelItem[] = params.request.sortModel;\n const startRow: number = params.request.startRow;\n const endRow: number = params.request.endRow;\n const filterModel = params.request.filterModel;\n\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n\n this.orderbook\n .getSlice(this.target, gridModel)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (listOfOrderLines: OverviewListOrderLine[]) => {\n let endRowOrderbook: number;\n\n if (listOfOrderLines.length < this.quantityOfOrderLinesToRequestPerSlice) {\n endRowOrderbook = startRow + listOfOrderLines.length;\n }\n\n if (startRow === 0) {\n if (listOfOrderLines.length === 0) {\n params.api.showNoRowsOverlay();\n } else {\n params.api.hideOverlay();\n }\n }\n\n this.loadingForTheFirstTime = false;\n this.gridOptions.loadingCellRendererParams = {\n loadingForTheFirstTime: this.loadingForTheFirstTime\n };\n\n params.success({\n rowData: listOfOrderLines,\n rowCount: endRowOrderbook\n });\n\n this.setSelectedOrderLines(params.api);\n },\n error: (error: any) => {\n params.fail();\n params.api.showNoRowsOverlay();\n throw error;\n }\n });\n }\n };\n }\n\n private isGridTargetOrderbook(): boolean {\n return this.target === OrderLinesTarget.ORDER_BOOK;\n }\n\n private handleSelectedOrderLinesChange(): void {\n if ((this.gridOptions.rowSelection as RowSelectionOptions).mode === AgGridRowSelection.MULTIPLE) {\n this.orderLinesGrid.api.refreshHeader();\n }\n if (!this.hasSelectedOrderLines()) {\n this.orderLinesGrid.api.deselectAll();\n }\n }\n\n private hasSelectedOrderLines(): boolean {\n return !isEmpty(this.selectedOrderLines);\n }\n\n private saveFilterModel(gridApi: GridApi): void {\n const filterModel = gridApi.getFilterModel();\n this.localStorage.set(this.localStorageFilterModelKey, JSON.stringify(filterModel));\n }\n\n private applyFilterModel(gridApi: GridApi): void {\n const filterModel = this.localStorage.get(this.localStorageFilterModelKey);\n if (AssertionUtils.isNullOrUndefined(filterModel)) {\n gridApi.setFilterModel(null);\n } else {\n gridApi.setFilterModel(filterModel);\n }\n\n this.orderLinesGrid?.api?.setGridOption('serverSideDatasource', this.getServerSideDatasource());\n }\n\n private setSelectedOrderLines(gridApi: GridApi): void {\n if (!this.isGridTargetOrderbook() && this.hasSelectedOrderLines()) {\n gridApi.forEachNode((node: RowNode) => {\n if (!isNil(node.data)) {\n node.setSelected(some(this.selectedOrderLines, {id: node.data.id}));\n }\n });\n }\n }\n}\n","
\n
\n \n
\n
\n

{{ 'CUSTOMERS.CUSTOMER' | bmsTranslate: {count: 1} }}

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

{{ 'ORDERBOOK.ORDER' | bmsTranslate }}

\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

{{ 'ARTICLES.ARTICLE' | bmsTranslate: {count: 1} }}

\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 \n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n","import {Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {FixedShape} from '@domain/drawing-library/fixed-shape.enum';\nimport {OrderLinesTarget} from '@domain/order-lines-target.enum';\nimport {OrderLine} from '@domain/orderbook/order-line';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {ColorSets, COLOR_SETS} from '@infrastructure/http/color-set/color-sets';\nimport {ColoredYarnSets, COLORED_YARN_SETS} from '@infrastructure/http/colored-yarn-set/colored-yarn-sets';\nimport {Orderbook, ORDERBOOK} from '@infrastructure/http/orderbook/orderbook';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {AssertionUtils, BaseComponent, convertCommercialUnit, EnumUtils, LocaleUtils, skeletonViewAnimation, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {L10nIntlService} from 'angular-l10n';\nimport {replace} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-orderline-details-sidebar',\n templateUrl: './orderline-details-sidebar.component.html',\n styleUrls: ['./orderline-details-sidebar.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .button-skeleton-wrapper')]\n})\nexport class OrderlineDetailsSidebarComponent extends BaseComponent implements OnInit, OnChanges {\n @Input() public orderLineId: number;\n @Output() public orderlineDetailsSidebarClose: EventEmitter = new EventEmitter();\n public orderLine: OrderLine;\n public isLoadingOrderLine = true;\n public coloredYarnSet: ColoredYarnSet;\n public colorSet: ColorSet;\n public overviewListColorSet: OverviewListColorSet;\n public readonly dentsUnit = Unit.DENTS;\n public readonly picksUnit = Unit.PICKS;\n private currentSubscription: Subscription;\n private readonly l10nIntlService: L10nIntlService;\n private readonly translate: TranslateService;\n private readonly router: Router;\n\n public constructor(\n @Inject(ORDERBOOK) private readonly orderbook: Orderbook,\n l10nIntlService: L10nIntlService,\n translate: TranslateService,\n @Inject(COLOR_SETS) private readonly colorSets: ColorSets,\n @Inject(COLORED_YARN_SETS) private readonly coloredYarnSets: ColoredYarnSets,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n router: Router\n ) {\n super();\n\n this.l10nIntlService = l10nIntlService;\n this.translate = translate;\n this.router = router;\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.orderLine = OrderLine.createEmptyOrderLine();\n this.initializeOrderLine();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.orderLineId) {\n this.coloredYarnSet = null;\n this.colorSet = null;\n this.isLoadingOrderLine = true;\n this.initializeOrderLine();\n }\n }\n\n public closeOrderLineDetails(): void {\n this.orderlineDetailsSidebarClose.emit();\n }\n\n public getCommercialValueInCommercialUnit(value: number): string {\n const result = convertCommercialUnit({\n from: {\n unit: Unit.MILLIMETER,\n value\n },\n to: Unit.CENTIMETER\n });\n\n const unitTranslationKey = this.translate.instant(`GENERAL.UNIT.${EnumUtils.getKeyFromValue(Unit, Unit.CENTIMETER)}`);\n\n return `${LocaleUtils.formatNumber(result, this.l10nIntlService, 2)} ${unitTranslationKey}`;\n }\n\n public getTechnicalValueWithUnit(value: number, unit: Unit): string {\n const unitTranslationKey = this.translate.instant(`GENERAL.UNIT.${EnumUtils.getKeyFromValue(Unit, unit)}`);\n\n return `${LocaleUtils.formatNumber(value, this.l10nIntlService, 2)} ${unitTranslationKey}`;\n }\n\n public imageDownloaded(imageData: string): void {\n this.orderLine.article.design.image.data = imageData;\n }\n\n public navigateToProductionScheduleDetails(productionScheduleId: string | number): void {\n let path = RouteUtils.paths.texFab.productionOrder.editProductionOrder.absolutePath;\n if (this.hasPermissionToGoToNewBuilder()) {\n path = path + '/new';\n }\n this.router.navigate([replace(path, ':id', productionScheduleId.toString())]);\n }\n\n public canShowProductionSchedules(): boolean {\n return this.isLoadingOrderLine || this.orderLine.hasProductionSchedules();\n }\n\n public getOrderLineStatusLabel(): string {\n return OrderLineStatus[this.orderLine.status];\n }\n\n public isArticlePreviewMissingDesign(): boolean {\n return this.orderLine?.article?.design instanceof Drawing ? this.orderLine.article.design.missingDesign : false;\n }\n\n public getYarnSet(): OverviewListYarnSet {\n return this.orderLine.article.machineQuality.yarnSet;\n }\n\n private initializeOrderLine(): void {\n this.orderbook\n .getById(this.orderLineId, OrderLinesTarget.ORDER_BOOK)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((orderLine: OrderLine) => {\n this.orderLine = orderLine;\n\n if (this.orderLine.article.colorConfiguration?.coloredYarnSet?.id) {\n this.getColoredYarnSet();\n } else if (this.orderLine.article.colorConfiguration?.colorSet?.id) {\n this.getColorSet();\n }\n\n if (AssertionUtils.isNullOrUndefined(orderLine.article)) {\n this.isLoadingOrderLine = false;\n }\n });\n }\n\n private getColorSet(): void {\n this.colorSets\n .getById(this.orderLine.article.colorConfiguration?.colorSet?.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (colorSet: ColorSet) => {\n this.colorSet = colorSet;\n this.overviewListColorSet = OverviewListColorSet.fromColorSet(colorSet);\n this.isLoadingOrderLine = false;\n },\n error: () => {\n this.colorSet = null;\n }\n });\n }\n\n private getColoredYarnSet(): void {\n this.coloredYarnSets\n .getById(this.orderLine.article.colorConfiguration?.coloredYarnSet?.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (coloredYarnSet: ColoredYarnSet) => {\n this.coloredYarnSet = coloredYarnSet;\n this.isLoadingOrderLine = false;\n },\n error: () => {\n this.coloredYarnSet = null;\n }\n });\n }\n\n public getShape(shape: string): string {\n return FixedShape.getTranslationKeyForShape(shape, this.translate);\n }\n\n private hasPermissionToGoToNewBuilder(): boolean {\n return this.currentSubscription?.hasPermission(Permission.TEXFAB_NEW_BUILDER);\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","import {Component, HostListener, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatSidenav} from '@angular/material/sidenav';\nimport {Router} from '@angular/router';\nimport {isClickOutsideGivenElements} from '@application/helper/is-click-outside-given-elements';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {OrderLinesTarget} from '@domain/order-lines-target.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {ORDERBOOK, Orderbook} from '@infrastructure/http/orderbook/orderbook';\nimport {OrderLinesGridComponent} from '@presentation/components/order-lines-grid/order-lines-grid.component';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {SearchFiltersComponent} from '@presentation/components/search-filters/search-filters.component';\nimport {OverviewListOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-order-line';\nimport {\n AlertDialogResult,\n BaseComponent,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n FilterComponent,\n NoDataOverlayComponentParams,\n Priority,\n ToastService,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {find} from 'lodash-es';\nimport {EMPTY, forkJoin, Subject} from 'rxjs';\nimport {debounceTime, switchMap, takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './orderbook-overview-page.component.html',\n styleUrls: ['./orderbook-overview-page.component.scss']\n})\nexport class OrderbookOverviewPageComponent extends BaseComponent implements OnInit {\n @ViewChild('sidenav', {static: true}) public sidenav: MatSidenav;\n @ViewChild('filterComponent') public filterComponent: FilterComponent;\n @ViewChild('searchFilters') public searchFilters: SearchFiltersComponent;\n @ViewChild('orderLinesGrid') public orderLinesGrid: OrderLinesGridComponent;\n\n public selectedOrderLines: OverviewListOrderLine[] = [];\n public advancedSearchFilters: PropertyValue[] = [];\n public loadingForTheFirstTime = true;\n public noRowsOverlayComponentParams: Partial;\n public isExporting = false;\n public readonly permissionToDeleteOrderLines = Permission.TEXFAB_ORDERBOOK;\n public readonly commercialUnit = Unit.CENTIMETER;\n public readonly orderbookIconName = 'orderbook';\n public readonly orderLinesGridTarget = OrderLinesTarget.ORDER_BOOK;\n\n public readonly PERMISSION_TO_ACCESS_CUSTOM_SETTINGS = RouteUtils.paths.texFab.orderbook.settings.requiredPermission;\n\n private currentSubscription: Subscription;\n private readonly filterChangeSubject = new Subject();\n private readonly listOfClassesThatShouldNotCloseSidebarOnClick = ['orderline-detail-container', 'cdk-overlay-container', 'toast-container', 'ag-row', 'remove-button'];\n private readonly orderLineTranslationKey = 'SALES_ORDERS.ORDER_LINES.ORDER_LINE';\n\n public constructor(\n @Inject(AUTHENTICATION) private authentication: Authentication,\n @Inject(ORDERBOOK) private readonly orderbook: Orderbook,\n private readonly toastService: ToastService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n }\n\n @HostListener('document:click', ['$event'])\n public onOutsideDetailClick(event: MouseEvent): void {\n const targetElement: HTMLElement = event.target as HTMLElement;\n\n if (this.sidenav.opened && isClickOutsideGivenElements(targetElement, this.listOfClassesThatShouldNotCloseSidebarOnClick)) {\n this.closeSelectedOrderLineDetails();\n }\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.initialiseAdvancedSearchFilters();\n this.setNoRowsOverlayComponentParams();\n this.subscribeToFilterChanges();\n }\n\n public isOrderLineSelected(): boolean {\n return this.selectedOrderLines?.length > 0;\n }\n\n public getSelectedOrderLineId(): number {\n const [selectedOrderLine] = this.selectedOrderLines;\n\n return selectedOrderLine.id;\n }\n\n public closeSelectedOrderLineDetails(): void {\n this.selectedOrderLines = [];\n }\n\n public filter(filterText: string): void {\n this.filterChangeSubject.next(filterText);\n }\n\n public exportComplete(): void {\n this.isExporting = false;\n }\n\n public deleteOrderLine(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: this.translate.instant(this.orderLineTranslationKey, {count: this.selectedOrderLines.length}).toLowerCase()}),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(\n switchMap((result: AlertDialogResult) =>\n result === AlertDialogResult.CONFIRM ? forkJoin(this.selectedOrderLines.map((selectedOrderLine: OverviewListOrderLine) => this.orderbook.delete(selectedOrderLine.id))) : EMPTY\n ),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe({\n next: () => {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT', {object: this.translate.instant(this.orderLineTranslationKey, {count: this.selectedOrderLines.length})})\n });\n\n this.selectedOrderLines = [];\n\n this.orderLinesGrid.reloadOrderLines();\n },\n error: () => {\n this.handleBackendError();\n }\n });\n }\n\n public hasCustomSettingsPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.PERMISSION_TO_ACCESS_CUSTOM_SETTINGS);\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.orderbook.settings.absolutePath);\n }\n\n private initialiseAdvancedSearchFilters(): void {\n this.advancedSearchFilters.push(\n {propertyName: AdvancedSearchInput.ORDER_REFERENCE},\n {propertyName: AdvancedSearchInput.CUSTOMER_REFERENCE},\n {propertyName: AdvancedSearchInput.ARTICLE},\n {\n propertyName: AdvancedSearchInput.PRIORITY,\n possiblePropertyValues: EnumUtils.getEnumValues(Priority)\n },\n {propertyName: AdvancedSearchInput.MACHINE_QUALITY},\n {propertyName: AdvancedSearchInput.COLORED_YARN_SET},\n {propertyName: AdvancedSearchInput.MAIN_COLOR},\n {propertyName: AdvancedSearchInput.BORDER_COLOR},\n {propertyName: AdvancedSearchInput.WIDTH}\n );\n }\n\n private subscribeToFilterChanges(): void {\n this.filterChangeSubject\n .asObservable()\n .pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((filterText: string) => {\n find(this.advancedSearchFilters, ['propertyName', AdvancedSearchInput.ORDER_REFERENCE]).propertyValue = filterText;\n\n this.searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n\n this.orderLinesGrid.reloadOrderLines();\n });\n }\n\n private handleBackendError(): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: this.translate.instant(this.orderLineTranslationKey, {count: 1}).toLowerCase()}),\n messageText: this.translate.instant('CONFLICTS.IN_USE', {object: this.translate.instant(this.orderLineTranslationKey, {count: 1})}),\n type: DialogType.INFORMATION\n });\n }\n\n private setNoRowsOverlayComponentParams(): void {\n this.noRowsOverlayComponentParams = {\n titleParam: this.orderLineTranslationKey,\n hideDescription: true\n };\n }\n}\n","
\n \n\n \n \n
\n
\n

{{ 'ORDERBOOK.SETTINGS.HINT' | bmsTranslate }}

\n
\n
\n
\n
\n \n {{ 'ORDERBOOK.SETTINGS.ADDITIONAL_INFO_NUMBER' | bmsTranslate: {number: index + 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.UNIQUE' | bmsTranslate }}\n \n \n
\n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {orderbookSettingsUniqueFieldsValidator} from '@application/validators/orderbook-settings-unique-fields-validator';\nimport {PropertyValue} from '@domain/property-value';\nimport {Orderbook, ORDERBOOK} from '@infrastructure/http/orderbook/orderbook';\nimport {BaseComponent, FormValidationHelper, skeletonViewAnimation, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {finalize, takeUntil} from 'rxjs';\n\n@Component({\n selector: 'app-orderbook-custom-settings',\n templateUrl: './orderbook-custom-settings.component.html',\n styleUrls: ['./orderbook-custom-settings.component.scss'],\n animations: [skeletonViewAnimation('.mat-card-header, .form-field-skeleton-wrapper, .text-skeleton-wrapper')]\n})\nexport class OrderbookCustomSettingsComponent extends BaseComponent implements OnInit {\n public settingsForm: FormArray;\n public loading = false;\n\n private saveButtonTouched = false;\n private readonly URL_TO_ORDERBOOK_OVERVIEW = RouteUtils.paths.texFab.orderbook.absolutePath;\n\n public constructor(\n @Inject(ORDERBOOK) private readonly orderbook: Orderbook,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.settingsForm = this.formBuilder.array(\n Array.from(Array(10)).map(() => {\n return this.formBuilder.group({label: this.formBuilder.control(null, [Validators.required])});\n }),\n orderbookSettingsUniqueFieldsValidator()\n );\n\n this.loading = true;\n\n this.orderbook\n .getListOfCustomSettings()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (settings: PropertyValue[]) => {\n settings.forEach(({propertyValue}: PropertyValue, index: number) => {\n this.settingsForm.get(`${index}.label`).patchValue(propertyValue);\n });\n\n this.loading = false;\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.URL_TO_ORDERBOOK_OVERVIEW)\n });\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = this.settingsForm.controls.some((settingsControl: FormControl) => {\n return settingsControl.invalid && settingsControl.touched;\n });\n\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public save(): void {\n this.saveButtonTouched = true;\n\n if (new FormValidationHelper().checkForms(this.settingsForm.controls as FormGroup[], this.document)) {\n this.saving = true;\n\n const settings: PropertyValue[] = this.settingsForm.controls.map((settingsControl: FormControl, index: number) => {\n return {\n propertyName: `additionalInfo${index + 1}`,\n propertyValue: settingsControl.get('label').value\n };\n });\n\n this.orderbook\n .saveCustomSettings(settings)\n .pipe(finalize(this.finalizeSaving()), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.navigateToOrderbookOverview();\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.SAVED_OBJECT', {\n object: this.translate.instant(this.translate.instant('GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS').toLowerCase())\n })\n });\n });\n }\n }\n\n public navigateToOrderbookOverview(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.orderbook.absolutePath);\n }\n}\n","import {FormArray, FormControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nexport function orderbookSettingsUniqueFieldsValidator(): ValidatorFn {\n return (formArray: FormArray): ValidationErrors | null => {\n if (formArray) {\n const formControlsGroupedByLabelValue = getFormControlsGroupedByValue(formArray.controls as FormControl[]);\n\n Object.keys(formControlsGroupedByLabelValue).forEach((value: string) => {\n const nonUniqueValueExists = value.length > 0 && formControlsGroupedByLabelValue[value].length > 1;\n\n formControlsGroupedByLabelValue[value].forEach((formControl: FormControl) => {\n if (nonUniqueValueExists) {\n formControl.get('label').setErrors({unique: true});\n formControl.get('label').markAsTouched();\n } else if (formControl.get('label').errors) {\n const {unique, ...errors} = formControl.get('label').errors;\n formControl.get('label').setErrors(Object.keys(errors).length > 0 ? errors : null);\n } else {\n formControl.get('label').setErrors(null);\n }\n });\n });\n }\n\n return null;\n };\n}\n\nfunction getFormControlsGroupedByValue(controls: FormControl[]): Record {\n return controls.reduce((formControlsGroupedByLabelValue: Record, formControl: FormControl) => {\n const formControlValue = formControl.get('label').value?.toLowerCase() ?? '';\n\n if (formControlValue in formControlsGroupedByLabelValue) {\n formControlsGroupedByLabelValue[formControlValue].push(formControl);\n } else {\n formControlsGroupedByLabelValue[formControlValue] = [formControl];\n }\n\n return formControlsGroupedByLabelValue;\n }, {});\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {OrderbookOverviewPageComponent} from '@presentation/pages/texfab/orderbook/overview/orderbook-overview-page.component';\nimport {OrderbookCustomSettingsComponent} from './settings/orderbook-custom-settings.component';\n\nconst shared = {parentId: NavigationId.ORDERBOOK_MODULE};\n\nexport const orderbookRoutes = [\n Factory.createPrototypeComponentRoute(OrderbookOverviewPageComponent, {route: '', requiredPermission: null, id: NavigationId.ORDERBOOK, ...shared}),\n Factory.createPrototypeComponentRoute(OrderbookCustomSettingsComponent, {route: 'settings', requiredPermission: Permission.TEXFAB_ORDERBOOK, id: NavigationId.ORDERBOOK_SETTINGS, ...shared})\n];\n\nexport const orderbookDataRouting: ModuleWithProviders = RouterModule.forChild(orderbookRoutes);\n","import {CreelPositionForArticle} from '@domain/article/creel-position-for-article';\nimport {FinishingForArticle} from '@domain/article/finishing-for-article';\nimport {MachineQualityForArticle} from '@domain/article/machine-quality-for-article';\nimport {BmpDrawing} from '@domain/production-schedule/bmp-drawing';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {AssertionUtils, convertCommercialUnit, Unit} from '@vdw/angular-component-library';\n\nexport class OverviewListArticleForOrderLine {\n private _id: number;\n private _name: string;\n private _machineQuality: MachineQualityForArticle;\n private _coloredYarnSet: OverviewListColoredYarnSet;\n private _colorSet: ColorSet;\n private _mainColor: CreelPositionForArticle;\n private _borderColor: CreelPositionForArticle;\n private _finishing: FinishingForArticle;\n private _design: Drawing;\n private _commercialWidthInMM: number;\n private _commercialHeightInMM: number;\n private _technicalHeightInPicks: number;\n private _technicalWidthInDents: number;\n\n public constructor(\n id: number,\n name: string,\n machineQuality: MachineQualityForArticle,\n coloredYarnSet: OverviewListColoredYarnSet,\n colorSet: ColorSet,\n mainColor: CreelPositionForArticle,\n borderColor: CreelPositionForArticle,\n finishing: FinishingForArticle,\n commercialWidthInMM: number,\n commercialHeightInMM: number,\n design?: Drawing,\n technicalHeightInPicks?: number,\n technicalWidthInDents?: number\n ) {\n this._id = id;\n this._name = name;\n this._machineQuality = machineQuality;\n this._coloredYarnSet = coloredYarnSet;\n this._colorSet = colorSet;\n this._mainColor = mainColor;\n this._borderColor = borderColor;\n this._finishing = finishing;\n this._design = design;\n this._commercialWidthInMM = commercialWidthInMM;\n this._commercialHeightInMM = commercialHeightInMM;\n this._technicalHeightInPicks = technicalHeightInPicks;\n this._technicalWidthInDents = technicalWidthInDents;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get machineQuality(): MachineQualityForArticle {\n return this._machineQuality;\n }\n\n public get coloredYarnSet(): OverviewListColoredYarnSet {\n return this._coloredYarnSet;\n }\n\n public get colorSet(): ColorSet {\n return this._colorSet;\n }\n\n public get mainColor(): CreelPositionForArticle {\n return this._mainColor;\n }\n\n public get borderColor(): CreelPositionForArticle {\n return this._borderColor;\n }\n\n public get finishing(): FinishingForArticle {\n return this._finishing;\n }\n\n public set finishing(value: FinishingForArticle) {\n this._finishing = value;\n }\n\n public get design(): Drawing {\n return this._design;\n }\n\n public set design(design: Drawing) {\n this._design = design;\n }\n\n public get commercialWidthInMM(): number {\n return this._commercialWidthInMM;\n }\n\n public get commercialHeightInMM(): number {\n return this._commercialHeightInMM;\n }\n\n public get technicalHeightInPicks(): number {\n return this._technicalHeightInPicks;\n }\n\n public get technicalWidthInDents(): number {\n return this._technicalWidthInDents;\n }\n\n public static fromJSON(overviewListArticleForOrderLineJSON: any): OverviewListArticleForOrderLine {\n return new OverviewListArticleForOrderLine(\n overviewListArticleForOrderLineJSON.id,\n overviewListArticleForOrderLineJSON.name,\n MachineQualityForArticle.fromJSON(overviewListArticleForOrderLineJSON.machineQuality),\n OverviewListColoredYarnSet.fromJSON(overviewListArticleForOrderLineJSON.coloredYarnSet),\n ColorSet.fromJSON(overviewListArticleForOrderLineJSON.colorSet),\n AssertionUtils.isNullOrUndefined(overviewListArticleForOrderLineJSON.mainColor) ? null : CreelPositionForArticle.fromJSON(overviewListArticleForOrderLineJSON.mainColor),\n AssertionUtils.isNullOrUndefined(overviewListArticleForOrderLineJSON.borderColor) ? null : CreelPositionForArticle.fromJSON(overviewListArticleForOrderLineJSON.borderColor),\n AssertionUtils.isNullOrUndefined(overviewListArticleForOrderLineJSON.finishing) ? null : FinishingForArticle.fromJSON(overviewListArticleForOrderLineJSON.finishing),\n overviewListArticleForOrderLineJSON.commercialWidthInMM,\n overviewListArticleForOrderLineJSON.commercialHeightInMM,\n BmpDrawing.fromJSON(overviewListArticleForOrderLineJSON.design),\n overviewListArticleForOrderLineJSON.technicalHeightInPicks,\n overviewListArticleForOrderLineJSON.technicalWidthInDents\n );\n }\n\n public getCommercialWidthInCommercialUnit(commercialUnit: Unit): number {\n return convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: this.commercialWidthInMM}, to: commercialUnit});\n }\n}\n","import {OrderLineAdditionalInfo} from '@domain/orderbook/order-line-additional-info';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {OverviewListArticleForOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-article-for-order-line';\nimport {moment, Priority} from '@vdw/angular-component-library';\n\nexport class OverviewListOrderLine {\n private _id: number;\n private _salesOrderReference: string;\n private _salesOrderLineReference: string;\n private _customerReference: string;\n private _desiredDate: Date;\n private _priority: Priority;\n private _article: OverviewListArticleForOrderLine;\n private _amount: number;\n private _amountLeft: number;\n private _amountProduced: number;\n private _amountPlanned: number;\n private _isSelectable: boolean;\n private _status: OrderLineStatus;\n private _canBePlanned: boolean;\n private _commercialLengthInMM: number;\n private _orderType: string;\n private _missingDesign: boolean;\n private _additionalInfo: OrderLineAdditionalInfo[];\n\n public constructor(\n id: number,\n salesOrderReference: string,\n salesOrderLineReference: string,\n customerReference: string,\n desiredDate: Date,\n priority: Priority,\n article: OverviewListArticleForOrderLine,\n amount: number,\n amountLeft: number,\n amountProduced: number,\n amountPlanned: number,\n isSelectable: boolean,\n status: OrderLineStatus,\n orderType: string,\n canBePlanned: boolean,\n missingDesign: boolean,\n additionalInfo: OrderLineAdditionalInfo[],\n commercialLengthInMM: number = null\n ) {\n this._id = id;\n this._salesOrderReference = salesOrderReference;\n this._salesOrderLineReference = salesOrderLineReference;\n this._customerReference = customerReference;\n this._desiredDate = desiredDate;\n this._priority = priority;\n this._article = article;\n this._amount = amount;\n this._amountLeft = amountLeft;\n this._amountProduced = amountProduced;\n this._amountPlanned = amountPlanned;\n this._isSelectable = isSelectable;\n this._status = status;\n this._canBePlanned = canBePlanned;\n this._commercialLengthInMM = commercialLengthInMM;\n this._orderType = orderType;\n this._missingDesign = missingDesign;\n this._additionalInfo = additionalInfo;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get salesOrderReference(): string {\n return this._salesOrderReference;\n }\n\n public get salesOrderLineReference(): string {\n return this._salesOrderLineReference;\n }\n\n public get customerReference(): string {\n return this._customerReference;\n }\n\n public get desiredDate(): Date {\n return this._desiredDate;\n }\n\n public get priority(): Priority {\n return this._priority;\n }\n\n public get article(): OverviewListArticleForOrderLine {\n return this._article;\n }\n\n public get amount(): number {\n return this._amount;\n }\n\n public get amountLeft(): number {\n return this._amountLeft;\n }\n\n public set amountLeft(value: number) {\n this._amountLeft = value;\n }\n\n public get amountProduced(): number {\n return this._amountProduced;\n }\n\n public get amountPlanned(): number {\n return this._amountPlanned;\n }\n\n public get isSelectable(): boolean {\n return this._isSelectable;\n }\n\n public set isSelectable(isSelectable: boolean) {\n this._isSelectable = isSelectable;\n }\n\n public get commercialLengthInMM(): number {\n return this._commercialLengthInMM;\n }\n\n public get status(): OrderLineStatus {\n return this._status;\n }\n\n public get canBePlanned(): boolean {\n return this._canBePlanned;\n }\n\n public get orderType(): string {\n return this._orderType;\n }\n\n public get missingDesign(): boolean {\n return this._missingDesign;\n }\n\n public get additionalInfo(): OrderLineAdditionalInfo[] {\n return this._additionalInfo;\n }\n\n public static fromJSON(overviewListOrderLineJSON: any): OverviewListOrderLine {\n return new OverviewListOrderLine(\n overviewListOrderLineJSON.id,\n overviewListOrderLineJSON.salesOrderReference,\n overviewListOrderLineJSON.salesOrderLineReference,\n overviewListOrderLineJSON.customerReference,\n moment(overviewListOrderLineJSON.desiredDate).add(new Date().getTimezoneOffset(), 'minutes').toDate(),\n Priority[overviewListOrderLineJSON.priority as string],\n OverviewListArticleForOrderLine.fromJSON(overviewListOrderLineJSON.article),\n overviewListOrderLineJSON.amount,\n overviewListOrderLineJSON.amountLeft,\n overviewListOrderLineJSON.amountProduced,\n overviewListOrderLineJSON.amountPlanned,\n true,\n OrderLineStatus[`${overviewListOrderLineJSON.status}`],\n overviewListOrderLineJSON.orderType,\n overviewListOrderLineJSON.canBePlanned ?? true,\n !!overviewListOrderLineJSON.missingDesign,\n Object.keys(overviewListOrderLineJSON).reduce((additionalInfo: OrderLineAdditionalInfo[], key: string) => {\n if (key.startsWith('additionalInfo')) {\n additionalInfo.push(new OrderLineAdditionalInfo(key, overviewListOrderLineJSON[key]));\n }\n return additionalInfo;\n }, []),\n overviewListOrderLineJSON.commercialLengthInMM\n );\n }\n\n public canDuplicate(): boolean {\n return false;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {PathLayoutTemplate} from '@domain/path-layout-template/path-layout-template';\nimport {PathLayoutTemplatePath} from '@domain/path-layout-template/path-layout-template-path';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {HttpPathLayoutTemplatesService} from '@infrastructure/http/path-layout-template/http-path-layout-templates.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {AgGridUtils, BaseComponent, ColDefBuilderFactoryService, convertToCommercialUnitCentimeter, LinkIconRendererComponent, StringUtils, Unit} from '@vdw/angular-component-library';\nimport {ColDef, ICellRendererParams, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './path-layout-template-overview-page.component.html'\n})\nexport class PathLayoutTemplateOverviewPageComponent extends BaseComponent implements OnInit {\n public readonly GRID_IDENTIFIER = GridIdentifier.PATH_LAYOUT_TEMPLATE_OVERVIEW;\n public readonly textileDataType = TextileDataType;\n\n public listOfPathLayoutTemplates: PathLayoutTemplate[];\n\n private pageUrls: PageUrls;\n\n public constructor(\n public readonly pathLayoutTemplates: HttpPathLayoutTemplatesService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.getPathLayoutTemplates();\n this.pageUrls = LastModifiedCardUtils.getPageUrls('pathLayoutTemplate');\n }\n\n public getColumnDefsForListOfPathLayoutTemplates(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n\n .getBuilder()\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('loomGroup', true).withHeaderName('PATH_LAYOUT_TEMPLATE.LOOM_TYPE').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('paths')\n .withHeaderName('PATH_LAYOUT_TEMPLATE.PATHS')\n .withValueGetter((params: ValueGetterParams) => (params.data as PathLayoutTemplate).pathLayoutTemplatePaths.length, true)\n .withComparator(StringUtils.stringComparator)\n .withCellClass('right')\n .withNumericMultiFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('widths')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.OPTIONAL_SETTINGS.PATH_WIDTHS')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(this.getPathsWidth(params), Unit.CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(this.getPathsWidth(params), Unit.CENTIMETER))\n .withFilterValueGetter((params: ValueGetterParams) => this.getPathsWidth(params))\n .withComparator(StringUtils.stringComparator)\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('totalWidth')\n .withHeaderName('PATH_LAYOUT_TEMPLATE.TOTAL_WIDTH')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(this.getTotalWidth(params), Unit.CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(this.getTotalWidth(params), Unit.CENTIMETER))\n .withFilterValueGetter((params: ValueGetterParams) => this.getTotalWidth(params))\n .withComparator(StringUtils.stringComparator)\n .withCellClass('right')\n .withNumericMultiFilter()\n .build()\n ];\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(this.pageUrls.settings);\n }\n\n private getTotalWidth(params: ICellRendererParams | ITooltipParams | ValueGetterParams): string {\n const totalWidthInMM = (params.data as PathLayoutTemplate).pathLayoutTemplatePaths.reduce((width: number, pathLayoutTemplatePath: PathLayoutTemplatePath) => {\n return width + pathLayoutTemplatePath.widthInMM;\n }, 0);\n\n const totalWidthInCM = convertToCommercialUnitCentimeter({\n unit: Unit.MILLIMETER,\n value: totalWidthInMM\n });\n\n return totalWidthInCM.toFixed(2).toString();\n }\n\n private getPathsWidth(params: ICellRendererParams | ITooltipParams | ValueGetterParams): string {\n return (params.data as PathLayoutTemplate).pathLayoutTemplatePaths\n .map((pathLayoutTemplatePath: PathLayoutTemplatePath) =>\n convertToCommercialUnitCentimeter({\n unit: Unit.MILLIMETER,\n value: pathLayoutTemplatePath.widthInMM\n })\n )\n .join(', ');\n }\n\n private buildAgGridCellTextWithUnit(value: string, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n\n private buildAgGridCellTooltipWithUnit(value: string, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTooltipWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n\n private getPathLayoutTemplates(): void {\n this.pathLayoutTemplates\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((pathLayoutTemplates: PathLayoutTemplate[]) => (this.listOfPathLayoutTemplates = pathLayoutTemplates));\n }\n}\n","\n","
\n \n
\n \n \n
\n

{{ 'GENERAL.GENERAL' | bmsTranslate }}

\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n \n {{ 'PATH_LAYOUT_TEMPLATE.LOOM_TYPE' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n \n \n \n \n \n \n\n \n
\n

{{ 'GENERAL.DIMENSIONS.WIDTH' | bmsTranslate }} ({{ 'GENERAL.UNIT.CENTIMETER' | bmsTranslate | lowercase }})

\n
\n
\n \n \n \n \n \n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: PATH_WIDTH_MIN_VALUE} }}\n \n \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: PATH_WIDTH_MAX_VALUE} }}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n
\n \n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, ElementRef, Inject, OnInit, Renderer2, ViewChild} from '@angular/core';\nimport {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {PathLayoutTemplate} from '@domain/path-layout-template/path-layout-template';\nimport {PathLayoutTemplatePath} from '@domain/path-layout-template/path-layout-template-path';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {HttpPathLayoutTemplatesService} from '@infrastructure/http/path-layout-template/http-path-layout-templates.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BackendLimitsConstants} from '@shared/constants/backend-limits.constants';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n convertToCommercialUnitCentimeter,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n SaveType,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {debounceTime, EMPTY, finalize, merge, Observable, switchMap, takeUntil} from 'rxjs';\n\n@Component({\n selector: 'app-add-path-layout-template',\n templateUrl: './add-path-layout-template.component.html',\n styleUrls: ['./add-path-layout-template.component.scss']\n})\nexport class AddPathLayoutTemplateComponent extends BaseComponent implements OnInit {\n @ViewChild('container') public pathWidthContainer: ElementRef;\n\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_PATH_LAYOUT_TEMPLATE;\n public readonly PATH_WIDTH_MIN_VALUE = 1;\n public readonly PATH_WIDTH_MAX_VALUE = BackendLimitsConstants.INT32_MAX;\n\n public addPathLayoutTemplateForm: FormGroup<{\n name: FormControl;\n loomGroup: FormControl;\n paths: FormArray}>>;\n }>;\n\n public isLoadingPathLayoutTemplate = false;\n public dragging = false;\n public suggestedPathLayoutTemplateName: string;\n\n private readonly PATH_LAYOUT_TEMPLATE_TRANSLATION_KEY = 'PATH_LAYOUT_TEMPLATE.PATH_LAYOUT_TEMPLATE';\n private readonly URL_TO_PATH_LAYOUT_TEMPLATE_OVERVIEW = RouteUtils.paths.texFab.pathLayoutTemplate.absolutePath;\n private readonly PATH_TO_EDIT_PATH_LAYOUT_TEMPLATE = RouteUtils.paths.texFab.pathLayoutTemplate.editPathLayoutTemplate.path;\n private readonly PATH_TO_ADD_PATH_LAYOUT_TEMPLATE = RouteUtils.paths.texFab.pathLayoutTemplate.addPathLayoutTemplate.path;\n\n private saveButtonTouched = false;\n\n private readonly CLASS_NAME_FOR_DRAGGED_ELEMENT = 'dragging';\n private dragPreviewElement: HTMLElement;\n private dragPreviewElementDOMRect: DOMRect;\n private readonly classNameForDropIndicator = 'drop-indicator';\n private readonly dragPreviewElementWidth = 280;\n private pathWidthItemDropIndicator: HTMLElement;\n private draggedPathWidthIndex: number;\n private classNameForPathWidthItem = 'path-width-item';\n private baseElementForDragPreview: HTMLElement;\n private isOnBottomHalfOfRow: boolean;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly translate: TranslateService,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly formBuilder: FormBuilder,\n private readonly pathLayoutTemplates: HttpPathLayoutTemplatesService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly textileService: TextileService,\n private readonly renderer: Renderer2,\n private readonly activatedRoute: ActivatedRoute,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n this.initialisePathLayoutTemplate();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.saveState(this.getPathLayoutTemplateToSave());\n }\n\n public getActionText(): string {\n return this.translate.instant(this.isEditingPathLayoutTemplate() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', {\n object: this.translate.instant(this.PATH_LAYOUT_TEMPLATE_TRANSLATION_KEY, {count: 1}).toLowerCase()\n });\n }\n\n public navigateBack(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.URL_TO_PATH_LAYOUT_TEMPLATE_OVERVIEW);\n }\n\n public addPathWidth(width: number = null): void {\n this.addPathLayoutTemplateForm.controls.paths.push(\n this.formBuilder.group({\n width: this.formBuilder.control(width, [Validators.required, Validators.min(this.PATH_WIDTH_MIN_VALUE), Validators.max(this.PATH_WIDTH_MAX_VALUE)])\n })\n );\n }\n\n public removePathWidth(index: number): void {\n this.addPathLayoutTemplateForm.controls.paths.removeAt(index);\n }\n\n public getPathWidthFormArray(): FormArray<\n FormGroup<{\n width: FormControl;\n }>\n > {\n return this.addPathLayoutTemplateForm.controls.paths;\n }\n\n public savePathLayoutTemplate(saveType: SaveType): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.addPathLayoutTemplateForm], this.document);\n\n if (isValid) {\n const pathLayoutTemplateToSave = this.getPathLayoutTemplateToSave();\n this.saving = true;\n\n const request: Observable = this.isEditingPathLayoutTemplate()\n ? this.pathLayoutTemplates.update(pathLayoutTemplateToSave)\n : this.pathLayoutTemplates.save(pathLayoutTemplateToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) =>\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.PATH_LAYOUT_TEMPLATE,\n this.PATH_LAYOUT_TEMPLATE_TRANSLATION_KEY,\n this.isEditingPathLayoutTemplate(),\n pathLayoutTemplateToSave.name,\n id\n ),\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError('GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = Object.values(this.addPathLayoutTemplateForm.controls).some((control: FormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public isPathWidthsTitleInvalid(): boolean {\n const pathWidthsForm = this.addPathLayoutTemplateForm.controls.paths;\n\n if (pathWidthsForm.controls.length > 0) {\n const arePathWidthsFormControlsInvalid = pathWidthsForm.controls.some((formGroup: FormGroup) => formGroup.touched && formGroup.invalid);\n\n return pathWidthsForm.touched && arePathWidthsFormControlsInvalid;\n }\n\n return pathWidthsForm.touched;\n }\n\n public isEditingPathLayoutTemplate(): boolean {\n return this.activatedRoute?.snapshot?.routeConfig?.path === this.PATH_TO_EDIT_PATH_LAYOUT_TEMPLATE;\n }\n\n public isAddingPathLayoutTemplate(): boolean {\n return this.activatedRoute?.snapshot?.routeConfig?.path === this.PATH_TO_ADD_PATH_LAYOUT_TEMPLATE;\n }\n\n public duplicatePathLayoutTemplate(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.pathLayoutTemplate.duplicatePathLayoutTemplate.absolutePath.replace(':id', this.activatedRoute.snapshot.params.id));\n }\n\n public deletePathLayoutTemplate(): void {\n this.textileService.removeConfirmation(this.getPathLayoutTemplateToSave(), TextileDataType.PATH_LAYOUT_TEMPLATE, false, null, this.pathLayoutTemplates);\n }\n\n public hasEditPermission(): boolean {\n return this.authentication.getCurrentSubscription().hasPermission(LastModifiedCardUtils.getPermissionToModifyItems('pathLayoutTemplate'));\n }\n\n public onPathWidthDragOver(event: any, pathWidthIndex: number): void {\n event.preventDefault();\n const target: HTMLElement = event.target as HTMLElement;\n\n const draggedPathWidthItemDifferentFromTargetItem = pathWidthIndex !== this.draggedPathWidthIndex;\n const isMouseOnBottomHalfOfTarget = this.isMouseOnBottomHalfOfRow(target.getBoundingClientRect(), event.y);\n const isMouseOnBottomHalfOfPreviousItem = isMouseOnBottomHalfOfTarget && pathWidthIndex === this.draggedPathWidthIndex - 1;\n const isMouseOnTopHalfOfNextItem = !isMouseOnBottomHalfOfTarget && pathWidthIndex === this.draggedPathWidthIndex + 1;\n\n if (draggedPathWidthItemDifferentFromTargetItem && !isMouseOnBottomHalfOfPreviousItem && !isMouseOnTopHalfOfNextItem) {\n this.addPathWidthItemDropIndicator(target, event.y);\n }\n }\n\n public onPathWidthDrag(event: DragEvent): void {\n this.dragging = true;\n if (event.screenX !== 0 && event.screenY !== 0) {\n this.renderer.setStyle(this.dragPreviewElement, 'transform', `translate3d(${event.x + 5}px, ${event.y - this.dragPreviewElementDOMRect.height / 2}px, 0)`);\n }\n }\n\n public onDraggedPathWidthLeavesPathWidthItem(event: any): void {\n event.preventDefault();\n\n if (AssertionUtils.isNullOrUndefined(event.relatedTarget) || !(event.relatedTarget as HTMLElement).classList.contains(this.classNameForPathWidthItem)) {\n this.removePathWidthItemDropIndicator();\n }\n }\n\n public onDraggedPathWidthDroppedOnPathWidthItem(event: any, pathWidthIndex: number): void {\n event.preventDefault();\n\n const currentGroup = this.getPathWidthFormArray().at(this.draggedPathWidthIndex);\n this.getPathWidthFormArray().removeAt(this.draggedPathWidthIndex);\n\n if (this.draggedPathWidthIndex < pathWidthIndex && !this.isOnBottomHalfOfRow) {\n this.getPathWidthFormArray().insert(pathWidthIndex - 1, currentGroup);\n } else {\n this.getPathWidthFormArray().insert(pathWidthIndex, currentGroup);\n }\n }\n\n public onDragStart(event: DragEvent, baseElementForDragPreview: HTMLElement, containerElement: HTMLElement, pathWidthIndex: number): void {\n this.dragPreviewElementDOMRect = this.createDragPreviewElement(event, baseElementForDragPreview, containerElement, pathWidthIndex);\n this.baseElementForDragPreview = baseElementForDragPreview;\n\n this.renderer.setStyle(baseElementForDragPreview, 'opacity', 0.5);\n this.renderer.setStyle(this.dragPreviewElement, 'width', `${this.dragPreviewElementWidth}px`);\n this.renderer.setStyle(document.body, 'overflow', 'hidden');\n this.renderer.removeStyle(this.dragPreviewElement, 'max-width');\n this.renderer.removeStyle(this.dragPreviewElement, 'min-width');\n this.renderer.appendChild(document.body, this.dragPreviewElement);\n this.draggedPathWidthIndex = pathWidthIndex;\n\n event.stopPropagation();\n }\n\n public onDragEnd(): void {\n this.removeDragPreviewElement();\n this.removePathWidthItemDropIndicator();\n this.renderer.setStyle(this.baseElementForDragPreview, 'opacity', 1);\n this.renderer.setStyle(document.body, 'overflow', 'auto');\n this.dragging = false;\n }\n\n public canShowSuggestionForPathLayoutTemplateName(): boolean {\n return this.suggestedPathLayoutTemplateName?.length > 0 && this.addPathLayoutTemplateForm.get('name').value !== this.suggestedPathLayoutTemplateName;\n }\n\n public applySuggestionForPathLayoutTemplateName(): void {\n this.addPathLayoutTemplateForm.get('name').setValue(this.suggestedPathLayoutTemplateName);\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.pathLayoutTemplate.pathLayoutTemplateSettings.absolutePath);\n }\n\n private removeDragPreviewElement(): void {\n if (!AssertionUtils.isNullOrUndefined(this.dragPreviewElement)) {\n this.renderer.removeChild(this.dragPreviewElement.parentElement, this.dragPreviewElement);\n this.renderer.removeClass(document.querySelector(`.${this.CLASS_NAME_FOR_DRAGGED_ELEMENT}`), this.CLASS_NAME_FOR_DRAGGED_ELEMENT);\n this.dragPreviewElement = null;\n }\n }\n\n private createDragPreviewElement(event: any, baseElementForDragPreview: HTMLElement, containerElement: HTMLElement, pathWidthIndex: number): DOMRect {\n const dragPreviewElementDOMRect = baseElementForDragPreview.getBoundingClientRect();\n this.dragPreviewElement = baseElementForDragPreview.cloneNode(true) as HTMLElement;\n\n const dragIcon = this.dragPreviewElement.querySelector('mat-icon');\n this.dragPreviewElement.replaceChildren(dragIcon);\n\n this.renderer.addClass(this.dragPreviewElement, 'path-width-drag-preview');\n this.renderer.addClass(containerElement, this.CLASS_NAME_FOR_DRAGGED_ELEMENT);\n this.renderer.setStyle(this.dragPreviewElement, 'transform', `translate3d(${dragPreviewElementDOMRect.left}px, -${dragPreviewElementDOMRect.height}px, 0)`);\n\n const dragPreviewTextElement = this.document.createElement('div');\n\n dragPreviewTextElement.style.paddingLeft = '12px';\n this.renderer.addClass(this.dragPreviewElement, 'b1');\n dragPreviewTextElement.textContent = this.getPathWidthFormArray().controls[pathWidthIndex]?.value?.width?.toString();\n this.dragPreviewElement.appendChild(dragPreviewTextElement);\n\n const dummyPreview: HTMLElement = document.createElement('div');\n this.renderer.setStyle(dummyPreview, 'display', `none`);\n event.dataTransfer.setDragImage(dummyPreview, 0, 0);\n\n return dragPreviewElementDOMRect;\n }\n\n private isMouseOnBottomHalfOfRow(productionScheduleItemElementboundingDOMRect: DOMRect, mouseYPosition: number): boolean {\n return mouseYPosition > productionScheduleItemElementboundingDOMRect.top + productionScheduleItemElementboundingDOMRect.height / 2;\n }\n\n private removePathWidthItemDropIndicator(): void {\n if (!AssertionUtils.isNullOrUndefined(this.pathWidthItemDropIndicator)) {\n this.renderer.removeChild(document.body, this.pathWidthItemDropIndicator);\n this.pathWidthItemDropIndicator = null;\n }\n }\n\n private addPathWidthItemDropIndicator(pathWidthItemElement: HTMLElement, eventY: number): void {\n if (AssertionUtils.isNullOrUndefined(this.pathWidthItemDropIndicator)) {\n this.pathWidthItemDropIndicator = this.renderer.createElement('hr');\n this.renderer.addClass(this.pathWidthItemDropIndicator, this.classNameForDropIndicator);\n this.renderer.appendChild(document.body, this.pathWidthItemDropIndicator);\n }\n\n const pathWidthItemElementboundingDOMRect: DOMRect = pathWidthItemElement.getBoundingClientRect();\n this.isOnBottomHalfOfRow = this.isMouseOnBottomHalfOfRow(pathWidthItemElementboundingDOMRect, eventY);\n this.renderer.setStyle(this.pathWidthItemDropIndicator, 'width', `${pathWidthItemElementboundingDOMRect.width}px`);\n\n const xPosition: number = pathWidthItemElementboundingDOMRect.left;\n let yPosition: number = pathWidthItemElementboundingDOMRect.bottom;\n\n if (!this.isOnBottomHalfOfRow) {\n yPosition = pathWidthItemElementboundingDOMRect.top;\n }\n\n this.renderer.setStyle(this.pathWidthItemDropIndicator, 'transform', `translate3d(${xPosition}px, ${yPosition}px, 0)`);\n }\n\n private getPathLayoutTemplateToSave(): PathLayoutTemplate {\n const pathLayoutTemplatePaths = this.addPathLayoutTemplateForm?.value?.paths?.map((path: {width: number}, index: number) => new PathLayoutTemplatePath(path.width * 10, index + 1));\n\n return new PathLayoutTemplate(\n this.isEditingPathLayoutTemplate() ? Number(this.activatedRoute.snapshot.params.id) : null,\n this.addPathLayoutTemplateForm?.value.name,\n this.addPathLayoutTemplateForm?.value.loomGroup,\n pathLayoutTemplatePaths\n );\n }\n\n private setFormFields(): void {\n this.addPathLayoutTemplateForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.pathLayoutTemplates, null)),\n loomGroup: this.formBuilder.control(null, Validators.required),\n paths: this.formBuilder.array(\n [\n this.formBuilder.group({\n width: this.formBuilder.control(null)\n })\n ],\n Validators.required\n )\n });\n\n this.addPathLayoutTemplateForm.controls.paths.clear();\n\n merge(this.addPathLayoutTemplateForm.controls.loomGroup.valueChanges, this.addPathLayoutTemplateForm.controls.paths.valueChanges)\n .pipe(\n debounceTime(500),\n switchMap(() => {\n const isValid = this.addPathLayoutTemplateForm.controls.loomGroup.valid && this.addPathLayoutTemplateForm.controls.paths.valid;\n return this.hasEditPermission() && isValid ? this.pathLayoutTemplates.generateName(this.getPathLayoutTemplateToSave()) : EMPTY;\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((name: string) => {\n this.suggestedPathLayoutTemplateName = name;\n });\n }\n\n private setFormFieldsValues(pathLayoutTemplate: PathLayoutTemplate, withName?: boolean): void {\n const name = this.isEditingPathLayoutTemplate() || withName ? pathLayoutTemplate.name : null;\n\n this.addPathLayoutTemplateForm.patchValue({\n name: name,\n loomGroup: pathLayoutTemplate.loomGroup\n });\n pathLayoutTemplate.pathLayoutTemplatePaths.forEach((pathLayoutTemplatePath: PathLayoutTemplatePath) =>\n this.addPathWidth(\n convertToCommercialUnitCentimeter({\n unit: Unit.MILLIMETER,\n value: pathLayoutTemplatePath.widthInMM\n })\n )\n );\n\n this.addPathLayoutTemplateForm.controls.name.setAsyncValidators(AsyncUniqueValidator.createValidator(this.pathLayoutTemplates, name));\n this.addPathLayoutTemplateForm.controls.name.updateValueAndValidity();\n\n this.checkPermissionToEdit();\n }\n\n private checkPermissionToEdit(): void {\n if (!this.hasEditPermission()) {\n this.addPathLayoutTemplateForm.disable();\n }\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(this.PATH_LAYOUT_TEMPLATE_TRANSLATION_KEY, {\n count: 1\n })\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private initialisePathLayoutTemplate(): void {\n const pathLayoutTemplateState = this.navigationHelperService.getState();\n\n if (!AssertionUtils.isNullOrUndefined(pathLayoutTemplateState)) {\n this.setFormFieldsValues(pathLayoutTemplateState, true);\n } else if (!this.isAddingPathLayoutTemplate()) {\n this.isLoadingPathLayoutTemplate = true;\n\n const pathLayoutTemplateId = Number(this.activatedRoute.snapshot.params.id);\n\n if (isNaN(pathLayoutTemplateId)) {\n this.navigateBack();\n } else {\n this.pathLayoutTemplates\n .getById(pathLayoutTemplateId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (pathLayoutTemplate: PathLayoutTemplate) => {\n this.setFormFieldsValues(pathLayoutTemplate);\n this.isLoadingPathLayoutTemplate = false;\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.URL_TO_PATH_LAYOUT_TEMPLATE_OVERVIEW, this.navigationHelperService)\n });\n }\n }\n }\n}\n","
\n \n \n \n
\n
\n \n \n {{ 'GENERAL.PLACEHOLDER.NAME_PLACEHOLDER_SEPARATOR' | bmsTranslate }}\n \n \n {{ 'GENERAL.PLACEHOLDER.SEPARATOR.' + nameGeneratorSeparator | bmsTranslate }}\n \n \n \n \n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\nimport {NameGenerator} from '@domain/name-generator/name-generator';\nimport {getProperty, getPropertyValue, PropertyValue} from '@domain/property-value';\nimport {HttpPathLayoutTemplatesService} from '@infrastructure/http/path-layout-template/http-path-layout-templates.service';\nimport {BaseComponent, EnumUtils, ObjectActionType, ToastHelperService, TranslateService} from '@vdw/angular-component-library';\nimport {finalize, forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './path-layout-template-settings.component.html'\n})\nexport class PathLayoutTemplateSettingsComponent extends BaseComponent implements OnInit {\n public nameGenerationProperties: string[];\n public generateNameConfiguration: NameGenerator;\n public pathLayoutTemplateCustomSettingsForm: FormGroup<{namePlaceholderSeparator: FormControl}>;\n public saving = false;\n\n private listOfCustomSettings: PropertyValue[] = [];\n\n public constructor(\n private readonly pathLayoutTemplates: HttpPathLayoutTemplatesService,\n private readonly formBuilder: FormBuilder,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly toastHelperService: ToastHelperService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.pathLayoutTemplateCustomSettingsForm = this.formBuilder.group({namePlaceholderSeparator: this.formBuilder.control(NameGeneratorSeparator.NO_SEPARATOR)});\n this.getCustomSettingsAndNameGenerationProperties();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.onDestroy();\n }\n\n public navigateBack(): void {\n this.navigationHelperService.navigateToPreviousRoute(RouteUtils.paths.texFab.pathLayoutTemplate.absolutePath);\n }\n\n public saveCustomSettings(): void {\n this.saving = true;\n this.generateNameConfiguration.version = this.generateNameConfiguration.version ?? 1;\n this.generateNameConfiguration.separator = this.pathLayoutTemplateCustomSettingsForm.value.namePlaceholderSeparator;\n getProperty(this.listOfCustomSettings, 'generateNameConfiguration').propertyValue = JSON.stringify(this.generateNameConfiguration);\n\n this.pathLayoutTemplates\n .saveCustomSettings(this.listOfCustomSettings)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving()))\n .subscribe(() => {\n this.toastHelperService.showToastForObjectAction(ObjectActionType.SAVE, this.translate.instant('GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS').toLowerCase(), null);\n this.navigateBack();\n });\n }\n\n public getKeysOfNameGeneratorSeparator(): string[] {\n return EnumUtils.getEnumNames(NameGeneratorSeparator);\n }\n\n private getCustomSettingsAndNameGenerationProperties(): void {\n forkJoin([this.pathLayoutTemplates.getListOfCustomSettings(), this.pathLayoutTemplates.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([listOfCustomSettings, nameGenerationProperties]: [PropertyValue[], string[]]) => {\n this.listOfCustomSettings = listOfCustomSettings;\n this.nameGenerationProperties = nameGenerationProperties;\n this.generateNameConfiguration = JSON.parse(getPropertyValue(this.listOfCustomSettings, 'generateNameConfiguration'));\n this.pathLayoutTemplateCustomSettingsForm.controls.namePlaceholderSeparator.patchValue(this.generateNameConfiguration.separator ?? NameGeneratorSeparator.NO_SEPARATOR);\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddPathLayoutTemplateComponent} from './add/add-path-layout-template.component';\nimport {PathLayoutTemplateOverviewPageComponent} from './overview/path-layout-template-overview-page.component';\nimport {PathLayoutTemplateSettingsComponent} from './settings/path-layout-template-settings.component';\n\nconst shared = {parentId: NavigationId.PATH_LAYOUT_TEMPLATE_MODULE};\n\nexport const pathLayoutTemplateRoutes = [\n Factory.createPrototypeComponentRoute(PathLayoutTemplateOverviewPageComponent, {route: '', requiredPermission: null, id: NavigationId.PATH_LAYOUT, ...shared}),\n Factory.createPrototypeComponentRoute(AddPathLayoutTemplateComponent, {\n route: 'add',\n requiredPermission: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT,\n reuse: true,\n id: NavigationId.ADD_PATH_LAYOUT,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(AddPathLayoutTemplateComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW,\n id: NavigationId.EDIT_PATH_LAYOUT,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(AddPathLayoutTemplateComponent, {\n route: 'add/:id',\n requiredPermission: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_EDIT,\n id: NavigationId.DUPLICATE_PATH_LAYOUT,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(PathLayoutTemplateSettingsComponent, {\n route: 'settings',\n requiredPermission: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW,\n id: NavigationId.PATH_LAYOUT_SETTINGS,\n ...shared\n })\n];\n\nexport const pathLayoutTemplateRouting: ModuleWithProviders = RouterModule.forChild(pathLayoutTemplateRoutes);\n","@if (fixedSchedule()) {\n \n}\n","import {Component, ElementRef, computed, inject, input} from '@angular/core';\nimport {toSignal} from '@angular/core/rxjs-interop';\nimport {FixedSchedulePlaceholder} from '@domain/planning-prototype/carpet/fixed-schedule-placeholder';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {DOMUtils} from '@vdw/angular-component-library';\nimport {map} from 'rxjs';\n\n@Component({\n selector: 'app-fixed-schedule-placeholder',\n templateUrl: './fixed-schedule-placeholder.component.html',\n styleUrls: ['./fixed-schedule-placeholder.component.scss']\n})\nexport class FixedSchedulePlaceholderComponent {\n private readonly SMALL_ITEM_THRESHOLD = 72;\n private readonly element = inject(ElementRef);\n\n public readonly fixedSchedule = input.required();\n public readonly name = computed(() => this.fixedSchedule().fixedSchedule.name);\n public readonly shouldShowSmallInfo = toSignal(\n DOMUtils.observeResize(this.element.nativeElement).pipe(map((entries: ResizeObserverEntry[]) => entries[0].contentRect.width < this.SMALL_ITEM_THRESHOLD)),\n {initialValue: false}\n );\n}\n","\n\n
\n

{{ order.productionOrder?.name ?? order.name }}

\n
\n
\n \n

{{ 'PRODUCTION_ORDER.STATUS.' + status | bmsTranslate }}

\n
\n\n @if (!completed) {\n @if (differentConfig) {\n
\n \n

{{ 'PLANNING.STATUS.DIFFERENT_CONFIGURATION' | bmsTranslate }}

\n
\n }\n @if (pastDue) {\n
\n \n

{{ 'PLANNING.STATUS.DUE' | bmsTranslate }}

\n
\n }\n }\n
\n
\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {GenericOrder} from '@domain/planning-prototype/generic-order.interface';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {AssertionUtils} from '@vdw/angular-component-library';\nimport {PlanningPrototypeContextService} from '../utilities/planning-prototype-context.service';\n\n@Component({\n selector: 'app-planning-order-tooltip',\n templateUrl: './planning-order-tooltip.component.html',\n styleUrls: ['./planning-order-tooltip.component.scss']\n})\nexport class PlanningOrderTooltipComponent {\n public readonly order: GenericOrder;\n public readonly runTitle: string;\n public readonly differentConfig: boolean;\n public readonly status: ProductionScheduleStatus;\n public readonly statusName: string;\n public readonly completed: boolean;\n public readonly pastDue: boolean;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA)\n data: {\n planningOrder: GenericOrder;\n runTitle: string;\n },\n context: PlanningPrototypeContextService\n ) {\n this.order = data.planningOrder;\n this.runTitle = data.runTitle;\n this.status = this.order.productionOrder?.status ?? PlanningItemHelper.getItemStatus(this.order);\n this.completed = this.order.isCompleted;\n this.statusName = ProductionScheduleStatus.getStatusIconName(this.status);\n this.differentConfig = context.productChanges.includes(this.order.draftId);\n this.pastDue =\n !AssertionUtils.isNullOrUndefined(this.order.productionOrder?.dueDate) &&\n PlanningItemHelper.getTimelineEndDate(this.order, context.sortedPlanningItemForecasts[this.order.draftId]) > this.order.productionOrder.dueDate;\n }\n}\n","\n \n
\n
\n \n \n \n
\n
\n
\n\n\n
\n \n
\n
\n","import {Component, ElementRef, HostListener, Input, OnInit, Optional} from '@angular/core';\nimport {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {GenericOrder} from '@domain/planning-prototype/generic-order.interface';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {RepositionTooltipComponent} from '@presentation/components/reposition-tooltip/reposition-tooltip.component';\nimport {AssertionUtils, BaseComponent, DOMUtils, DialogBuilder, DialogBuilderFactoryService, PlanningGroupComponent} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {PlanningOrderTooltipComponent} from '../../tooltips/planning-order-tooltip.component';\n\n@Component({\n selector: 'app-planning-order',\n templateUrl: './planning-order.component.html',\n styleUrls: ['./planning-order.component.scss']\n})\nexport class PlanningOrderComponent extends BaseComponent implements OnInit {\n @Input() public order: GenericOrder | ProductionOrderToPlan;\n\n public shouldShowSmallInfo = false;\n private readonly SMALL_ORDER_THRESHOLD = 72;\n private dialogBuilder: DialogBuilder = null;\n\n public constructor(\n private readonly element: ElementRef,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n @Optional() private readonly planningGroup: PlanningGroupComponent\n ) {\n super();\n }\n\n public ngOnInit(): void {\n DOMUtils.observeResize(this.element.nativeElement)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((entries: ResizeObserverEntry[]) => {\n this.shouldShowSmallInfo = entries[0].contentRect.width < this.SMALL_ORDER_THRESHOLD;\n });\n }\n\n @HostListener('mouseenter')\n public onMouseEnter(): void {\n if (this.shouldShowSmallInfo && this.dialogBuilder === null) {\n this.openDetailsTooltip();\n }\n }\n\n @HostListener('mouseleave')\n public onMouseLeave(): void {\n if (this.dialogBuilder !== null) {\n this.closeDetailsTooltip();\n }\n }\n\n public getIconNameForProductionOrderStatus(): string {\n return ProductionScheduleStatus.getStatusIconName(this.getProductionOrderStatus());\n }\n\n public getProductionOrderStatus(): ProductionScheduleStatus {\n if (!AssertionUtils.isNullOrUndefined(this.order.productionOrder)) {\n return this.order.productionOrder.status;\n }\n if (this.order instanceof ProductionOrderToPlan) {\n return null;\n }\n return PlanningItemHelper.getItemStatus(this.order);\n }\n\n public getItemName(): string {\n if (this.order instanceof ProductionOrderToPlan) {\n return this.order.productionOrder.name;\n }\n return PlanningItemHelper.getItemName(this.order);\n }\n\n private openDetailsTooltip(): void {\n if (AssertionUtils.isNullOrUndefined(this.planningGroup)) {\n return;\n }\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n\n this.dialogBuilder\n .withClass('reposition-tooltip')\n .withMaxWidth('408px')\n .withoutBackdrop()\n .openDialog(RepositionTooltipComponent, {\n forceArrowCentered: true,\n component: PlanningOrderTooltipComponent,\n targetDOMRect: this.element.nativeElement.getBoundingClientRect(),\n planningOrder: this.order,\n runTitle: this.planningGroup.groupText\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe();\n }\n\n private closeDetailsTooltip(): void {\n this.dialogBuilder?.close();\n this.dialogBuilder = null;\n }\n}\n","import {Component, OnDestroy} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {ColDefBuilderFactoryService, DialogData, GridOptionsBuilderFactoryService} from '@vdw/angular-component-library';\nimport {GetDataPath, GetRowIdParams, GridOptions, GridReadyEvent, IRowNode, SelectionChangedEvent, ValueGetterParams} from 'ag-grid-community';\nimport {NEVER, Observable} from 'rxjs';\nimport {FormattedMachineGroup, PlanningFilterService} from '../utilities/planning-filter.service';\n\n@Component({\n selector: 'app-machine-group-filter',\n templateUrl: './machine-group-filter.component.html',\n styleUrls: ['./machine-group-filter.component.scss']\n})\nexport class MachineGroupFilterComponent implements DialogData, OnDestroy {\n private selectionCache: number[] = [];\n public gridOptions: GridOptions;\n public get rowData(): FormattedMachineGroup[] {\n return this.planningFilterService.formattedMachineGroups;\n }\n\n public constructor(\n private readonly planningFilterService: PlanningFilterService,\n private readonly gridOptionsBuilder: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService\n ) {\n this.gridOptions = this.initGridOptions();\n }\n\n public ngOnDestroy(): void {\n this.planningFilterService.updateSelectedMachineGroups(this.selectionCache);\n }\n\n public getValue(): Observable {\n return NEVER;\n }\n\n public getDataPath: GetDataPath = (data: FormattedMachineGroup) => data.hierarchy;\n\n private onSelectionChanged = (changed: SelectionChangedEvent): void => {\n const selectedRows = changed.api.getSelectedRows();\n const allSelectedGroups = selectedRows.map((node: FormattedMachineGroup) => node.id);\n this.selectionCache = selectedRows\n .filter((group: FormattedMachineGroup) => !group.hierarchy.slice(0, -1).some((id: string) => allSelectedGroups.includes(Number(id))))\n .map((node: FormattedMachineGroup) => node.id);\n };\n\n private getRowId = (params: GetRowIdParams): string => params.data.id.toString();\n\n private onGridReady = (gridReady: GridReadyEvent): void => {\n gridReady.api.forEachNode((node: IRowNode) => {\n node.setSelected(this.planningFilterService.selectedMachineGroups.includes(node.data.id));\n });\n gridReady.api.sizeColumnsToFit();\n };\n\n private initGridOptions(): GridOptions {\n const autoGroupColumnDef = this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('PLANNING.MACHINE_GROUP')\n .withFlex(1)\n .withResizable(false)\n .withPinned(false)\n .withoutFilter()\n .withSortable(true)\n .withSuppressHeaderMenuButton()\n .withValueGetter((params: ValueGetterParams) => params.data.name)\n .build();\n\n return this.gridOptionsBuilder\n .getBuilder([], GridIdentifier.SELECT_MACHINE_GROUP)\n .withRowSelection(true, false, false)\n .withAutoGroupColumnDef(autoGroupColumnDef, false)\n .withTreeData()\n .withoutColumnMenu()\n .withGetRowId(this.getRowId)\n .withOnGridReady(this.onGridReady)\n .withOnSelectionChanged(this.onSelectionChanged)\n .build();\n }\n}\n"," \n","import {Component, Input} from '@angular/core';\nimport {Maintenance} from '@domain/planning-prototype/maintenance';\nimport {MaintenanceType} from '@domain/planning-prototype/maintenance-type';\nimport {StringUtils} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-maintenance',\n templateUrl: './maintenance.component.html',\n styleUrls: ['./maintenance.component.scss']\n})\nexport class MaintenanceComponent {\n @Input() public maintenance: Maintenance;\n\n public getIconName(): string {\n return StringUtils.kebabCase(MaintenanceType[this.maintenance.maintenanceType]);\n }\n}\n","\n","\n \n \n 0\"\n [matTooltip]=\"'AGGRID.FILTEROOO' | bmsTranslate\"\n >\n \n \n \n\n \n @if (canShowFixedSchedules()) {\n \n \n \n }\n\n\n\n \n \n \n \n \n @if (loading) {\n \n }\n \n \n @for (regime of regimes; track $index) {\n \n @for (shift of regime.shifts; track $index) {\n \n }\n \n }\n @for (machine of machines; track machine.id) {\n \n @for (item of getPlanningItemsForMachine(machine); track item.draftId) {\n \n }\n\n @for (item of getHistoryForMachine(machine); track item.draftId) {\n \n }\n\n @if (getItemCreationPlaceholder(machine); as item) {\n \n }\n\n \n @if (getPlanningItemIsGroup(item)) {\n \n @for (child of item.planningItems; track $index) {\n \n @if (planningItemIsFixedSchedulePlaceholder(child)) {\n \n } @else {\n \n }\n \n }\n \n } @else {\n \n \n \n }\n \n \n }\n \n \n \n \n\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {canDeactivateRouteWithUnsavedChanges} from '@application/security/can-deactivate-unsaved-changes-notifier.guard';\nimport {PlanningPrototypeComponent} from './planning-prototype.component';\n\nexport const planningPrototypeRoutes = [\n Factory.createPrototypeComponentRoute(\n PlanningPrototypeComponent,\n {route: '', requiredPermission: null, id: NavigationId.PLANNING_PROTOTYPE, parentId: NavigationId.PLANNING_PROTOTYPE_MODULE},\n [],\n [canDeactivateRouteWithUnsavedChanges]\n )\n];\n\nexport const planningPrototypeRouting: ModuleWithProviders = RouterModule.forChild(planningPrototypeRoutes);\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {Regime} from '@domain/machine/regime';\nimport {Shift} from '@domain/machine/shift';\nimport {FixedSchedulePlaceholder} from '@domain/planning-prototype/carpet/fixed-schedule-placeholder';\nimport {OrderCarpet} from '@domain/planning-prototype/carpet/order-carpet';\nimport {RunCarpet} from '@domain/planning-prototype/carpet/run-carpet';\nimport {PlanningFilter} from '@domain/planning-prototype/custom-settings/planning-filter';\nimport {PlanningOrderLite} from '@domain/planning-prototype/generic-order.interface';\nimport {Maintenance} from '@domain/planning-prototype/maintenance';\nimport {MaintenanceType} from '@domain/planning-prototype/maintenance-type';\nimport {PlanningEquipment} from '@domain/planning-prototype/planning-equipment';\nimport {PlanningForecast} from '@domain/planning-prototype/planning-forecast';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {PlanningItemForecast} from '@domain/planning-prototype/planning-item-forecast';\nimport {PlanningLine} from '@domain/planning-prototype/planning-line';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {ProductionOrderType} from '@domain/planning-prototype/to-plan/production-order-type';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {MACHINE_OVERVIEW, MachineOverview} from '@infrastructure/http/machine-overview/machine-overview';\nimport {HttpPlanningPrototypeService} from '@infrastructure/http/planning-prototype/http-planning-prototype.service';\nimport {SignalRPlanningPrototypeService} from '@infrastructure/signalr/planning-prototype/signalr-planning-prototype.service';\nimport {ProductionOrderLiteStatusChange} from '@infrastructure/signalr/production-order-lite/production-order-lite-status-change';\nimport {REALTIME_PRODUCTION_ORDER_LITE, RealtimeProductionOrderLite} from '@infrastructure/signalr/production-order-lite/realtime-production-order-lite';\nimport {ProductionOrderStatusChange} from '@infrastructure/signalr/production-order/production-order-status-change';\nimport {REALTIME_PRODUCTION_ORDER, RealtimeProductionOrder} from '@infrastructure/signalr/production-order/realtime-production-order';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {\n ArrayUtils,\n AssertionUtils,\n BaseComponent,\n DateTimeFormat,\n DateTimePipe,\n DragDropData,\n ObjectActionType,\n PlanningGridComponent,\n TimeUtils,\n ToastHelperService,\n TranslateService,\n UuidUtils\n} from '@vdw/angular-component-library';\nimport {UUID} from 'crypto';\nimport {DateTime} from 'luxon';\nimport {buffer, combineLatest, concatMap, debounceTime, distinctUntilChanged, filter, finalize, interval, map, merge, Observable, of, startWith, switchMap, take, takeUntil, tap} from 'rxjs';\nimport {MachineGroupFilterComponent} from './machine-group-filter/machine-group-filter.component';\nimport {NavigationPlanningPrototype} from './navigation-planning-prototype.interface';\nimport {PlanningFilterService} from './utilities/planning-filter.service';\nimport {PlanningItemDragDropService} from './utilities/planning-item-drag-drop.service';\nimport {PlanningPrototypeContextService} from './utilities/planning-prototype-context.service';\n\nexport interface DeferredAction {\n action: () => void;\n}\n@Component({\n selector: 'app-planning-prototype',\n templateUrl: './planning-prototype.component.html',\n styleUrls: ['./planning-prototype.component.scss']\n})\nexport class PlanningPrototypeComponent extends BaseComponent implements OnInit {\n @ViewChild(PlanningGridComponent)\n public planningGrid: PlanningGridComponent;\n\n public get machines(): PlanningEquipment[] {\n return this.planningContext.machines;\n }\n\n public readonly NEW_RUN_TEXT = this.translate.instant('GENERAL.ACTIONS.NEW_OBJECT', {object: 'PLANNING.ADD_ITEM.TYPES.RUN'}).toUpperCase();\n public readonly FILTER_SETTINGS_COMPONENT = MachineGroupFilterComponent;\n public updatedPlanningLines: PlanningLine[] = [];\n public loading = true;\n public regimes: Regime[] = [];\n public startDate: Date;\n public endDate: Date;\n public machineOverviewSettings: PropertyValue[];\n public rootGroup: OverviewMachineGroup;\n public storedFilter: PlanningFilter;\n\n private currentSubscription: Subscription;\n private translationForUnknownItem = 'UNKNOWN';\n\n private readonly INTERVAL_WAIT_ON_INITIALIZED = 200;\n private readonly INTERVAL_AGGREGATE_BACKEND_UPDATES = 3000;\n private readonly INTERVAL_AUTO_REFRESH_FORECASTS = 30000;\n private readonly DEBOUNCE_AGGREGATE_TO_PLAN_UPDATES = 200;\n\n public constructor(\n private readonly planning: HttpPlanningPrototypeService,\n private readonly planningContext: PlanningPrototypeContextService,\n private readonly translate: TranslateService,\n private readonly planningDragDrop: PlanningItemDragDropService,\n private readonly planningUpdates: SignalRPlanningPrototypeService,\n private readonly planningFilterService: PlanningFilterService,\n private readonly toastHelper: ToastHelperService,\n private readonly navigationService: NavigationHelperService,\n private readonly unsavedChangesNotifierService: UnsavedChangesNotifierService,\n private readonly router: Router,\n @Inject(REALTIME_PRODUCTION_ORDER) private readonly realtimeProductionOrder: RealtimeProductionOrder,\n @Inject(REALTIME_PRODUCTION_ORDER_LITE) private readonly realtimeProductionOrderLite: RealtimeProductionOrderLite,\n @Inject(MACHINE_OVERVIEW) private readonly machineOverview: MachineOverview,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly dateTimePipe: DateTimePipe\n ) {\n super();\n planningContext.reset();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.translationForUnknownItem = this.translate.instant('PLANNING.UNKNOWN');\n\n this.loadInitialData();\n this.fetchUpdatedForecastsWhenPlanningLinesAreUpdated();\n this.trackUpdatedPlanningLines();\n this.listenToSaveEventEmitter();\n this.applyRequiredChangesOnBackendUpdates();\n }\n\n public loadHistoryData(range: {startDate: DateTime; endDate: DateTime}): void {\n if (AssertionUtils.isNullOrUndefined(range.startDate) || AssertionUtils.isNullOrUndefined(range.endDate)) {\n return;\n }\n\n interval(this.INTERVAL_WAIT_ON_INITIALIZED)\n .pipe(\n startWith(-1),\n filter(() => !AssertionUtils.isNullOrUndefined(this.planningContext.planningForecast)),\n take(1),\n switchMap(() => this.planning.getPlanningHistory(range.startDate.toJSDate(), range.endDate.toJSDate())),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((history: {[ids: number]: PlanningItem[]}) => this.planningContext.mergeHistoryData(history));\n }\n\n public getIconForMachineType(type: MachineType): string {\n return MachineType.getIconNameForMachineType(type);\n }\n\n public getPlanningItemsForMachine(machine: PlanningEquipment): PlanningItem[] {\n return this.planningContext.planningItemsByMachine[machine.id];\n }\n\n public canShowFixedSchedules(): boolean {\n return !AssertionUtils.isEmpty(this.planningContext.fixedSchedulesToPlan) && this.currentSubscription?.hasPermission(Permission.FIXED_SCHEDULE_EDIT);\n }\n\n public getHistoryForMachine(machine: PlanningEquipment): PlanningItem[] {\n const planningLine = this.planningContext.planningLinesByMachine[machine.id];\n if (AssertionUtils.isNullOrUndefined(planningLine)) {\n return [];\n }\n\n return this.planningContext.planningHistory[planningLine.id];\n }\n\n public getPlanningItemIsGroup(planningItem: PlanningItem): boolean {\n return PlanningItemHelper.isRunItem(planningItem);\n }\n\n public getForecastForPlanningItem(item: PlanningItem): PlanningItemForecast {\n return this.planningContext.sortedPlanningItemForecasts[item.draftId];\n }\n\n public getPlanningItemDisplayName(item: PlanningItem): string {\n if (item instanceof RunCarpet) {\n return `${item.creel?.name ?? this.translationForUnknownItem}/${item.quality?.name ?? this.translationForUnknownItem}`;\n }\n\n return PlanningItemHelper.getItemName(item) ?? this.translationForUnknownItem;\n }\n\n public getIsDifferentConfig(item: PlanningItem): boolean {\n return this.planningContext.productChanges.includes(item.draftId);\n }\n\n public selectMachine(machine: PlanningEquipment): void {\n this.planningContext.selectItem(machine);\n }\n\n public selectItem(item: PlanningItem): void {\n this.planningContext.selectItem(item);\n }\n\n public getTimelineStartDate(item: PlanningItem): Date {\n return PlanningItemHelper.getTimelineStartDate(item, this.getForecastForPlanningItem(item));\n }\n\n public getTimelineEndDate(item: PlanningItem): Date {\n return PlanningItemHelper.getTimelineEndDate(item, this.getForecastForPlanningItem(item));\n }\n\n public getOrderIsPastDue(item: PlanningItem): boolean {\n if (PlanningItemHelper.isOrderItem(item) && !AssertionUtils.isNullOrUndefined(item.productionOrder?.dueDate)) {\n return this.getTimelineEndDate(item) > item.productionOrder.dueDate;\n }\n return false;\n }\n\n public openToPlan(): void {\n this.planningContext.selectItem(this.planningContext.ordersToPlan);\n }\n\n public openFixedSchedules(): void {\n this.planningContext.selectItem(this.planningContext.fixedSchedulesToPlan);\n }\n\n public onDragStart(): void {\n this.planningContext.selectItem(null);\n }\n\n public onDragEnd(data: DragDropData): void {\n this.planningDragDrop.onDragEnd(data);\n }\n\n public onDragMove(data: DragDropData): void {\n this.planningDragDrop.onDragMove(data);\n }\n\n public saveChanges(navigateToSelectedRoute?: string): void {\n if (AssertionUtils.isEmpty(this.updatedPlanningLines)) {\n return;\n }\n this.saving = true;\n this.planning\n .patchPlanningLines(this.updatedPlanningLines)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving()))\n .subscribe((ids: {[draftId: UUID]: number}) => {\n this.planningContext.updatePlanningItemIds(ids);\n this.toastHelper.showToastForObjectAction(ObjectActionType.SAVE, 'PLANNING.PLANNING', undefined);\n this.updatedPlanningLines = [];\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n if (!AssertionUtils.isNullOrUndefined(navigateToSelectedRoute)) {\n this.router.navigateByUrl(navigateToSelectedRoute);\n }\n });\n }\n\n public openNewItemForm({event, rowIndex, date}: {event: PointerEvent; rowIndex: number; date: Date}): void {\n if (this.planningContext.selectedItem || date < new Date()) {\n return;\n }\n event?.stopImmediatePropagation();\n const machine = this.machines[rowIndex];\n const draftId = UuidUtils.generateV4Uuid() as UUID;\n this.planningContext.itemCreationPlaceholder = new Maintenance(\n {\n draftId,\n sequenceNumber: -1,\n minimumDuration: '01:00:00',\n earliestStartDate: date\n },\n MaintenanceType.MAINTENANCE\n );\n this.planningContext.sortedPlanningItemForecasts[draftId] = new PlanningItemForecast(draftId, date, new Date(date.getTime() + TimeUtils.HOUR_IN_MS));\n this.planningContext.machinesByPlanningItem[draftId] = machine;\n this.planningContext.selectItem(this.planningContext.itemCreationPlaceholder);\n }\n\n public getItemCreationPlaceholder(machine: PlanningEquipment): PlanningItem {\n if (this.planningContext.itemCreationPlaceholder && this.planningContext.machinesByPlanningItem[this.planningContext.itemCreationPlaceholder.draftId] === machine) {\n return this.planningContext.itemCreationPlaceholder;\n }\n return null;\n }\n\n public getShiftName(shift: Shift, regime: Regime): string {\n return `Shift: ${shift.name} ${this.dateTimePipe.transform(DateTime.fromISO(shift.shiftStart).toJSDate(), DateTimeFormat.TIME_SIMPLE)} - ${this.dateTimePipe.transform(DateTime.fromISO(shift.shiftEnd).toJSDate(), DateTimeFormat.TIME_SIMPLE)} (regime: ${regime.name})`;\n }\n\n public dateRangeChanged({startDate, endDate}: {startDate: DateTime; endDate: DateTime}): void {\n if (AssertionUtils.isNullOrUndefined(startDate) || AssertionUtils.isNullOrUndefined(endDate)) {\n return;\n }\n this.startDate = startDate.toJSDate();\n this.endDate = endDate.toJSDate();\n this.loadHistoryData({startDate, endDate});\n }\n\n public planningItemIsFixedSchedulePlaceholder(item: PlanningItem): item is FixedSchedulePlaceholder {\n return item instanceof FixedSchedulePlaceholder;\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationService.savePartialState({\n planningForecast: this.planningContext.planningForecast,\n ordersToPlan: this.planningContext.ordersToPlan,\n fixedSchedulesToPlan: this.planningContext.fixedSchedulesToPlan,\n machineOverviewSettings: this.machineOverviewSettings,\n updatedPlanningLines: this.updatedPlanningLines,\n startDate: this.startDate,\n endDate: this.endDate,\n planningGrid: this.planningGrid,\n rootGroup: this.rootGroup,\n storedFilter: this.storedFilter,\n selectedItem: this.planningContext.selectedItem,\n sortedPlanningItemForecastsNew: this.planningContext.sortedPlanningItemForecasts\n });\n }\n\n private loadInitialData(): void {\n let storedData: NavigationPlanningPrototype = this.navigationService.getPartialState(Object.keys(this.planningContext.getEmptyDataForNavigationHelper()));\n if (!AssertionUtils.isNullOrUndefined(storedData)) {\n this.initPlanningObservable(of(undefined)).subscribe(({action}: DeferredAction) => action());\n\n this.loading = false;\n this.planningGrid = storedData.planningGrid;\n this.updatedPlanningLines = storedData.updatedPlanningLines;\n this.planningContext.init(storedData.planningForecast, storedData.ordersToPlan, storedData.fixedSchedulesToPlan);\n this.planningDragDrop.init(this.planningGrid, this.NEW_RUN_TEXT);\n this.rootGroup = storedData.rootGroup;\n this.storedFilter = storedData.storedFilter;\n this.initRegimes(storedData.machineOverviewSettings);\n this.planningContext.sortedPlanningItemForecasts = storedData.sortedPlanningItemForecastsNew;\n this.planningFilterService.init(this.rootGroup, this.storedFilter);\n if (!AssertionUtils.isNullOrUndefined(storedData.selectedItem)) {\n this.planningContext.selectItem(storedData.selectedItem);\n }\n } else {\n this.planningFilterService.filterChanged\n .pipe(\n distinctUntilChanged(ArrayUtils.haveSameContent),\n switchMap((equipmentGroupIds: number[]) =>\n combineLatest([\n this.planning.getForecast(equipmentGroupIds),\n this.planning.getProductionOrdersToPlan(equipmentGroupIds),\n this.currentSubscription?.hasPermission(Permission.FIXED_SCHEDULE_VIEW) ? this.planning.getFixedSchedulesToPlan() : of([]),\n this.planning.setFilter(new PlanningFilter(equipmentGroupIds))\n ])\n ),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(([forecast, ordersToPlan, fixedSchedulesToPlan, _]: [PlanningForecast, ProductionOrderToPlan[], FixedScheduleToPlan[], void]) => {\n this.loading = false;\n this.planningContext.init(forecast, ordersToPlan, fixedSchedulesToPlan);\n this.planningDragDrop.init(this.planningGrid, this.NEW_RUN_TEXT);\n });\n\n combineLatest([this.machineOverview.getRootGroup(), this.planning.getFilter()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([rootGroup, storedFilter]: [OverviewMachineGroup, PlanningFilter]) => {\n this.rootGroup = rootGroup;\n this.storedFilter = storedFilter;\n this.planningFilterService.init(rootGroup, storedFilter);\n });\n\n this.machineOverview\n .getListOfCustomSettings()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineOverviewSettings: PropertyValue[]) => this.initRegimes(machineOverviewSettings));\n }\n }\n\n private listenToSaveEventEmitter(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (!AssertionUtils.isNullOrUndefined(res) && res.action) {\n this.saveChanges(res.navigateToSelectedRoute);\n }\n });\n }\n\n private trackUpdatedPlanningLines(): void {\n this.planningContext.planningLineChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((planningLine: PlanningLine) => {\n this.updatedPlanningLines = ArrayUtils.distinctBy([planningLine, ...this.updatedPlanningLines], (line: PlanningLine) => line.id);\n if (!AssertionUtils.isEmpty(this.updatedPlanningLines)) {\n this.unsavedChangesNotifierService.notifyChangesToOthers();\n }\n });\n }\n\n private fetchUpdatedForecastsWhenPlanningLinesAreUpdated(): void {\n const allChanges = this.planningContext.planningLineChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy));\n allChanges\n .pipe(\n buffer(allChanges.pipe(debounceTime(10))),\n filter((planningLines: PlanningLine[]) => !AssertionUtils.isEmpty(planningLines)),\n tap((planningLines: PlanningLine[]) => planningLines.forEach((line: PlanningLine) => this.planningContext.removeEmptyItems(line.planningItems))),\n concatMap((planningLines: PlanningLine[]) => this.planning.getForecastForDraft(planningLines)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((forecasts: PlanningItemForecast[]) => this.planningContext.updateForecasts(forecasts));\n\n interval(this.INTERVAL_AUTO_REFRESH_FORECASTS)\n .pipe(\n filter(() => !AssertionUtils.isNullOrUndefined(this.planningContext.planningForecast)),\n switchMap(() => this.planning.getForecastForDraft(this.planningContext.planningForecast.planningLines)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((forecasts: PlanningItemForecast[]) => this.planningContext.updateForecasts(forecasts));\n }\n\n private applyRequiredChangesOnBackendUpdates(): void {\n const poChanges = this.realtimeProductionOrder.getProductionOrdersStatusChanges().pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n map(\n (update: ProductionOrderStatusChange) =>\n ({\n action: (): void => {\n const itemToUpdate = this.planningContext\n .getFlatListOfPlanningItems()\n .find((item: PlanningItem): item is OrderCarpet => item instanceof OrderCarpet && item.productionOrder?.id === update.id);\n if (!AssertionUtils.isNullOrUndefined(itemToUpdate)) {\n itemToUpdate.productionOrder.status = update.status;\n }\n\n const orderToUpdate = this.planningContext.ordersToPlan.find((order: ProductionOrderToPlan) => order.productionOrder.id === update.id && order.type === ProductionOrderType.CARPET);\n if (!AssertionUtils.isNullOrUndefined(orderToUpdate)) {\n orderToUpdate.productionOrder.status = update.status;\n }\n }\n }) as DeferredAction\n )\n );\n\n const poLiteChanges = this.realtimeProductionOrderLite.getProductionOrdersLiteStatusChanges().pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n map(\n (update: ProductionOrderLiteStatusChange) =>\n ({\n action: (): void => {\n const itemToUpdate = this.planningContext\n .getFlatListOfPlanningItems()\n .find((item: PlanningItem): item is PlanningOrderLite => PlanningItemHelper.isOrderLiteItem(item) && item.productionOrder?.id === update.id);\n if (!AssertionUtils.isNullOrUndefined(itemToUpdate)) {\n itemToUpdate.productionOrder.status = update.status;\n }\n\n const orderToUpdate = this.planningContext.ordersToPlan.find((order: ProductionOrderToPlan) => order.productionOrder.id === update.id && order.type !== ProductionOrderType.CARPET);\n if (!AssertionUtils.isNullOrUndefined(orderToUpdate)) {\n orderToUpdate.productionOrder.status = update.status;\n }\n }\n }) as DeferredAction\n )\n );\n\n const sequenceChanges = this.initPlanningObservable(this.planningUpdates.itemsToPlanChanged().pipe(debounceTime(this.DEBOUNCE_AGGREGATE_TO_PLAN_UPDATES)));\n\n const timing = interval(this.INTERVAL_AGGREGATE_BACKEND_UPDATES).pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n filter(() => !this.planningDragDrop.dragActive)\n );\n\n merge(poChanges, poLiteChanges, sequenceChanges)\n .pipe(\n buffer(timing),\n filter((actions: DeferredAction[]) => !AssertionUtils.isEmpty(actions))\n )\n .subscribe((actions: DeferredAction[]) => actions.forEach(({action}: DeferredAction) => action()));\n }\n\n private initRegimes(machineOverviewSettings: PropertyValue[]): void {\n this.machineOverviewSettings = machineOverviewSettings;\n const regimesValue = machineOverviewSettings.find((propertyValue: PropertyValue) => propertyValue.propertyName === 'regimes');\n if (!AssertionUtils.isNullOrUndefined(regimesValue)) {\n this.regimes = regimesValue.propertyValue;\n }\n }\n\n private initPlanningObservable(observable: Observable): Observable {\n return observable.pipe(\n switchMap(() =>\n combineLatest([this.planning.getForecast(this.planningFilterService.selectedMachineGroups), this.planning.getProductionOrdersToPlan(this.planningFilterService.selectedMachineGroups)])\n ),\n takeUntil(this.unSubscribeOnViewDestroy),\n map(\n ([forecast, ordersToPlan]: [PlanningForecast, ProductionOrderToPlan[]]) =>\n ({\n action: (): void => {\n if (this.updatedPlanningLines.length > 0) {\n this.planningContext.mergeUpdatedPlanning(forecast, ordersToPlan);\n } else {\n this.planningContext.init(forecast, ordersToPlan, this.planningContext.fixedSchedulesToPlan);\n }\n this.loadHistoryData({\n startDate: DateTime.now().minus({days: 1}).startOf('day'),\n endDate: DateTime.now()\n });\n }\n }) as DeferredAction\n )\n );\n }\n}\n","@if (selectedItemIsMachine) {\n \n} @else if (selectedItemIsPlanningItem) {\n \n} @else if (showOrdersToPlan) {\n \n} @else if (showFixedSchedulesToPlan) {\n \n}\n","import {Component, HostListener, OnInit} from '@angular/core';\nimport {MatSidenav} from '@angular/material/sidenav';\nimport {isClickOutsideGivenElements} from '@application/helper/is-click-outside-given-elements';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {PlanningEquipment} from '@domain/planning-prototype/planning-equipment';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {PlanningPrototypeContextService, SelectedItemType} from '../utilities/planning-prototype-context.service';\nimport {NavigationPlanningPrototypeSidebar} from './planning-order-sidebar/navigation-planning-prototype-sidebar.interface';\n\n@Component({\n selector: 'app-planning-prototype-sidebar',\n templateUrl: './planning-prototype-sidebar.component.html'\n})\nexport class PlanningPrototypeSidebarComponent extends BaseComponent implements OnInit {\n private readonly CLASSES_THAT_SHOULD_NOT_CLOSE_SIDEBAR = [\n 'maintenance',\n 'mat-sidebar',\n 'needs-attention',\n 'fixed-schedules',\n 'order',\n 'row-indicator',\n 'run',\n 'mat-drawer-inner-container',\n 'cdk-overlay-container'\n ];\n\n public selectedItemIsMachine = false;\n public selectedItemIsPlanningItem = false;\n public showOrdersToPlan = false;\n public showItemCreation = false;\n public showFixedSchedulesToPlan = false;\n\n public constructor(\n private readonly planningContext: PlanningPrototypeContextService,\n private readonly sideNav: MatSidenav,\n private readonly navigationService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.planningContext.selectedItemChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(this.onSelectedItemChanged);\n let obj = {\n selectedItemIsMachine: null,\n selectedItemIsPlanningItem: null,\n showOrdersToPlan: null,\n showItemCreation: null,\n showFixedSchedulesToPlan: null\n };\n let prevState = this.navigationService.getPartialState(Object.keys(obj));\n if (!AssertionUtils.isNullOrUndefined(prevState)) {\n this.selectedItemIsMachine = prevState.selectedItemIsMachine;\n this.selectedItemIsPlanningItem = prevState.selectedItemIsPlanningItem;\n this.showOrdersToPlan = prevState.showOrdersToPlan;\n this.showItemCreation = prevState.showItemCreation;\n this.showFixedSchedulesToPlan = prevState.showFixedSchedulesToPlan;\n }\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationService.savePartialState({\n selectedItemIsMachine: this.selectedItemIsMachine,\n selectedItemIsPlanningItem: this.selectedItemIsPlanningItem,\n showOrdersToPlan: this.showOrdersToPlan,\n showItemCreation: this.showItemCreation,\n showFixedSchedulesToPlan: this.showFixedSchedulesToPlan\n });\n }\n\n @HostListener('document:click', ['$event'])\n public onClickOutsideSidebar(event: MouseEvent): void {\n if (isClickOutsideGivenElements(event.target as HTMLElement, this.CLASSES_THAT_SHOULD_NOT_CLOSE_SIDEBAR)) {\n this.planningContext.selectItem(null);\n }\n }\n\n private onSelectedItemChanged = (selectedItem: SelectedItemType): void => {\n if (AssertionUtils.isNullOrUndefined(selectedItem)) {\n this.sideNav.close();\n } else {\n if (document.activeElement instanceof HTMLElement) {\n document.activeElement.blur();\n }\n this.sideNav.open();\n }\n this.selectedItemIsMachine = selectedItem instanceof PlanningEquipment;\n this.selectedItemIsPlanningItem = selectedItem instanceof PlanningItem;\n this.showOrdersToPlan = selectedItem === this.planningContext.ordersToPlan;\n this.showItemCreation = selectedItem === this.planningContext.itemCreationPlaceholder;\n this.showFixedSchedulesToPlan = selectedItem === this.planningContext.fixedSchedulesToPlan;\n if (!this.showItemCreation) {\n this.planningContext.itemCreationPlaceholder = null;\n }\n };\n}\n","import {Injectable, OnDestroy} from '@angular/core';\nimport {PlanningFilter} from '@domain/planning-prototype/custom-settings/planning-filter';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {Observable, Subject} from 'rxjs';\n\nexport interface FormattedMachineGroup {\n hierarchy: string[];\n id: number;\n name: string;\n}\n\n@Injectable()\nexport class PlanningFilterService implements OnDestroy {\n private readonly _filterChanged = new Subject();\n\n public formattedMachineGroups: FormattedMachineGroup[] = [];\n public selectedMachineGroups: number[] = [];\n\n public get filterChanged(): Observable {\n return this._filterChanged;\n }\n\n public constructor() {\n this._filterChanged.subscribe((selectedMachineGroups: number[]) => {\n this.selectedMachineGroups = selectedMachineGroups;\n });\n }\n\n public ngOnDestroy(): void {\n this._filterChanged.complete();\n }\n\n public init(rootGroup: OverviewMachineGroup, storedFilter: PlanningFilter): void {\n storedFilter ??= new PlanningFilter([]);\n const flattenedGroup = PlanningFilterService.flattenGroup(rootGroup);\n const filter = storedFilter.equipmentGroupIds.filter((id: number) => flattenedGroup.includes(id));\n this._filterChanged.next(filter);\n this.formattedMachineGroups = PlanningFilterService.formatMachineGroups(rootGroup);\n }\n\n public updateSelectedMachineGroups = (selectedMachineGroups: number[]): void => {\n this._filterChanged.next(selectedMachineGroups);\n };\n\n private static flattenGroup(group: OverviewMachineGroup): number[] {\n return [group.id, ...group.groups.flatMap(PlanningFilterService.flattenGroup)];\n }\n\n private static formatMachineGroups(group: OverviewMachineGroup, hierarchy: string[] = []): FormattedMachineGroup[] {\n hierarchy.push(group.id.toString());\n return [\n {\n hierarchy,\n id: group.id,\n name: group.name\n },\n ...group.groups.flatMap((subGroup: OverviewMachineGroup) => PlanningFilterService.formatMachineGroups(subGroup, [...hierarchy]))\n ];\n }\n}\n","import {Injectable, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {FixedSchedulePlaceholder} from '@domain/planning-prototype/carpet/fixed-schedule-placeholder';\nimport {RunCarpet} from '@domain/planning-prototype/carpet/run-carpet';\nimport {GenericOrder} from '@domain/planning-prototype/generic-order.interface';\nimport {Maintenance} from '@domain/planning-prototype/maintenance';\nimport {PlanningEquipment} from '@domain/planning-prototype/planning-equipment';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {PlanningItemFactory} from '@domain/planning-prototype/planning-item-factory';\nimport {PlanningItemForecast} from '@domain/planning-prototype/planning-item-forecast';\nimport {PlanningLine} from '@domain/planning-prototype/planning-line';\nimport {CompatibleMachine} from '@domain/planning-prototype/to-plan/compatible-machine';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {ArrayUtils, AssertionUtils, DragDropData, PlanningDragDropService, PlanningGridComponent, PlanningGroupData, PlanningItemData, Point} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {take, takeUntil} from 'rxjs';\nimport {PlanningPrototypeContextService} from './planning-prototype-context.service';\n\n@Injectable()\nexport class PlanningItemDragDropService {\n public get dragActive(): boolean {\n return this.planningDragDrop.dragActive;\n }\n\n private planningGrid: PlanningGridComponent;\n private newRunText: string;\n\n public constructor(\n private readonly planningContext: PlanningPrototypeContextService,\n private readonly planningDragDrop: PlanningDragDropService\n ) {}\n\n public init(grid: PlanningGridComponent, newRunText: string): void {\n this.planningGrid = grid;\n this.newRunText = newRunText;\n }\n\n public onDragStart(event: DragEvent, toPlan: ProductionOrderToPlan | FixedScheduleToPlan, template: TemplateRef, viewContainer: ViewContainerRef): void {\n let planningItem: PlanningItem;\n let duration: string;\n if (toPlan instanceof ProductionOrderToPlan) {\n planningItem = PlanningItemFactory.createOrderForToPlan(toPlan);\n duration = (planningItem as GenericOrder).estimatedProductionTime;\n } else {\n planningItem = PlanningItemFactory.createPlaceholderForFixedSchedule(toPlan.fixedSchedule);\n duration = planningItem.minimumDuration;\n }\n\n this.planningContext.sortedPlanningItemForecasts[planningItem.draftId] = new PlanningItemForecast(planningItem.draftId, new Date(0), new Date(moment.duration(duration).asMilliseconds()));\n const planningItemData = new PlanningItemData();\n planningItemData.template = template;\n planningItemData.draggable = true;\n planningItemData.dataTransfer = planningItem;\n\n const planningGroupData = new PlanningGroupData();\n planningGroupData.draggable = true;\n planningGroupData.class = 'run';\n\n const startPositionInContainer: Point = {\n x: event.clientX - this.planningGrid.bodyContainer.nativeElement.parentElement.getBoundingClientRect().x + this.planningGrid.bodyContainer.nativeElement.parentElement.scrollLeft,\n y: event.clientY - this.planningGrid.bodyContainerOffset.y + this.planningGrid.bodyContainer.nativeElement.parentElement.scrollTop\n };\n\n const dragEndEvent = this.planningDragDrop.dragEnd.pipe(take(1));\n this.planningDragDrop.drag.pipe(takeUntil(dragEndEvent)).subscribe((data: DragDropData) => this.onDragMove(data));\n\n dragEndEvent.subscribe((data: DragDropData) => this.onDragEnd(data));\n this.planningDragDrop.onDragStart(event, planningItemData, planningGroupData, null, 250, startPositionInContainer, this.newRunText, this.planningGrid, viewContainer);\n }\n\n public onDragEnd(data: DragDropData): void {\n if (!data.dropAllowed || AssertionUtils.isNullOrUndefined(data.draggedItem) || AssertionUtils.isNullOrUndefined(data.targetRow)) {\n return;\n }\n\n let {draggedItem, sourceList, targetList, sourceLine, targetLine, targetItem} = this.readDragDropData(data);\n\n targetList = this.addNewRunIfRequired(draggedItem, targetItem, targetList, data, targetLine);\n if (!AssertionUtils.isEmpty(sourceList)) {\n this.planningContext.removeItemFromList(draggedItem, sourceList);\n }\n this.planningContext.addItemToList(draggedItem, targetList, data.targetTime);\n this.updateEstimatedProductionTime(draggedItem, targetLine.parentEquipment);\n this.setEarliestStartDate(draggedItem, data.shiftKey, data.targetTime);\n\n this.reduceFlickeringBySettingATemporaryForecastOnDropLocation(draggedItem, data.targetTime, this.planningContext.sortedPlanningItemForecasts[draggedItem.draftId]);\n const updatedMachines = ArrayUtils.distinctBy(\n [sourceLine, targetLine].filter((line: PlanningLine) => !AssertionUtils.isNullOrUndefined(line)),\n (line: PlanningLine) => line.id\n ).map((line: PlanningLine) => line.parentEquipment);\n\n for (const machine of updatedMachines) {\n this.planningContext.markAsChanged(machine);\n }\n }\n\n public onDragMove(data: DragDropData): void {\n if (AssertionUtils.isNullOrUndefined(data.targetRow)) {\n return;\n }\n const {draggedItem, targetLine, targetItem, sourceLine} = this.readDragDropData(data);\n data.dropAllowed &&= this.isItemCompatible(draggedItem, targetLine, targetItem, sourceLine);\n this.setDragIcon(data);\n }\n\n private readDragDropData(data: DragDropData): {\n draggedItem: PlanningItem;\n sourceList: PlanningItem[];\n targetList: PlanningItem[];\n sourceLine: PlanningLine;\n targetLine: PlanningLine;\n targetItem?: PlanningItem;\n } {\n const draggedItem = data.draggedItem.dataTransfer as PlanningItem;\n const targetMachine = data.targetRow.dataTransfer as PlanningEquipment;\n const sourceMachine = data.sourceRow?.dataTransfer as PlanningEquipment;\n const targetItem = data.targetItem?.dataTransfer as PlanningItem;\n const sourceItem = data.sourceGroup?.dataTransfer as PlanningItem;\n\n const sourceLine = this.planningContext.planningForecast.planningLines.find((line: PlanningLine) => line.parentEquipment.id === sourceMachine?.id);\n const targetLine = this.planningContext.planningForecast.planningLines.find((line: PlanningLine) => line.parentEquipment.id === targetMachine.id);\n\n let sourceList = sourceItem?.planningItems ?? sourceLine?.planningItems;\n let targetList = targetItem?.planningItems ?? targetLine.planningItems;\n if (!PlanningItemHelper.canBeInRun(draggedItem)) {\n sourceList = sourceLine?.planningItems;\n targetList = targetLine.planningItems;\n }\n\n return {draggedItem, sourceList, targetList, sourceLine, targetLine, targetItem};\n }\n\n private setEarliestStartDate(draggedItem: PlanningItem, shiftKey: boolean, targetTime: Date): void {\n if (PlanningItemHelper.isOrderItem(draggedItem)) {\n return;\n }\n draggedItem.earliestStartDate = shiftKey ? targetTime : null;\n }\n\n private setDragIcon(data: DragDropData): void {\n if (data.dropAllowed) {\n data.dropEffect = data.shiftKey ? 'link' : 'move';\n }\n }\n\n private isItemCompatible(item: PlanningItem, targetLine: PlanningLine, targetItem: PlanningItem, sourceLine: PlanningLine): boolean {\n if (item instanceof Maintenance) {\n return PlanningItemHelper.getMaintenanceTypesForMachineType(targetLine.parentEquipment.equipmentKind).includes(item.maintenanceType);\n }\n if (!PlanningItemHelper.getMachineTypesForItem(item).includes(targetLine.parentEquipment.equipmentKind)) {\n return false;\n }\n\n if (item instanceof FixedSchedulePlaceholder) {\n return this.isFixedScheduleCompatibleWithTarget(item, targetLine, targetItem, sourceLine);\n }\n\n if (!AssertionUtils.isEmpty(item.planningItems) && item.planningItems.some((child: GenericOrder) => !this.isTargetMachineCompatible(child, targetLine, sourceLine))) {\n return false;\n }\n\n if (!PlanningItemHelper.isOrderItem(item)) {\n return true;\n }\n\n if (!this.isTargetMachineCompatible(item, targetLine, sourceLine)) {\n return false;\n }\n\n return PlanningItemHelper.isTargetItemCompatible(item, targetItem);\n }\n\n private isTargetMachineCompatible(item: GenericOrder, targetLine: PlanningLine, sourceLine: PlanningLine): boolean {\n if (sourceLine === targetLine) {\n return true;\n }\n const toPlan = this.planningContext.ordersToPlan.find(\n (order: ProductionOrderToPlan) => order.productionOrder.constructor === item.productionOrder.constructor && order.productionOrder.id === item.productionOrder.id\n );\n return !toPlan || toPlan.compatibleMachines.some((compatibleMachine: CompatibleMachine) => compatibleMachine.machine.id === targetLine.parentEquipment.id);\n }\n\n private reduceFlickeringBySettingATemporaryForecastOnDropLocation(item: PlanningItem, targetTime: Date, oldForecast: PlanningItemForecast): void {\n const tempEnd = new Date(targetTime.getTime() + (oldForecast.estimatedEnd.getTime() - oldForecast.estimatedStart.getTime()));\n this.planningContext.sortedPlanningItemForecasts[item.draftId] = new PlanningItemForecast(item.draftId, targetTime, tempEnd);\n const difference = targetTime.getTime() - oldForecast.estimatedStart.getTime();\n if (AssertionUtils.isEmpty(item.planningItems)) {\n return;\n }\n for (const child of item.planningItems) {\n const forecast = this.planningContext.sortedPlanningItemForecasts[child.draftId];\n const newStart = new Date(forecast.estimatedStart.getTime() + difference);\n const newEnd = new Date(forecast.estimatedEnd.getTime() + difference);\n this.planningContext.sortedPlanningItemForecasts[child.draftId] = new PlanningItemForecast(child.draftId, newStart, newEnd);\n }\n }\n\n private addNewRunIfRequired(draggedItem: PlanningItem, targetItem: PlanningItem, targetList: PlanningItem[], data: DragDropData, targetLine: PlanningLine): PlanningItem[] {\n if (!AssertionUtils.isNullOrUndefined(targetItem) || !PlanningItemHelper.canBeInRun(draggedItem)) {\n return targetList;\n }\n\n if (draggedItem instanceof FixedSchedulePlaceholder) {\n const toPlan = this.planningContext.fixedSchedulesToPlan.find((fixedScheduleToPlan: FixedScheduleToPlan) => fixedScheduleToPlan.fixedSchedule.id === draggedItem.fixedSchedule.id);\n targetItem = PlanningItemFactory.createRunForFixedSchedulePlaceholder(draggedItem, toPlan, targetLine.parentEquipment.id);\n } else {\n targetItem = PlanningItemFactory.createRunForPlanningItem(draggedItem);\n }\n this.planningContext.addItemToList(targetItem, targetList, data.targetTime);\n const forecast = this.planningContext.sortedPlanningItemForecasts[draggedItem.draftId];\n this.setEarliestStartDate(targetItem, data.shiftKey, data.targetTime);\n this.reduceFlickeringBySettingATemporaryForecastOnDropLocation(targetItem, data.targetTime, forecast);\n return targetItem.planningItems;\n }\n\n private updateEstimatedProductionTime(item: PlanningItem, machine: PlanningEquipment): void {\n if (!PlanningItemHelper.isOrderItem(item)) {\n return;\n }\n const toPlan = this.planningContext.ordersToPlan.find(\n (order: ProductionOrderToPlan) => order.productionOrder.constructor === item.productionOrder.constructor && order.productionOrder.id === item.productionOrder.id\n );\n if (toPlan) {\n item.estimatedProductionTime = PlanningItemHelper.getEstimatedProductionTime(toPlan, machine);\n }\n }\n\n private isFixedScheduleCompatibleWithTarget(item: FixedSchedulePlaceholder, targetLine: PlanningLine, targetItem: PlanningItem, sourceLine: PlanningLine): boolean {\n if (!AssertionUtils.isNullOrUndefined(sourceLine) && sourceLine !== targetLine) {\n return false;\n }\n\n const toPlan = this.planningContext.fixedSchedulesToPlan.find((fixedScheduleToPlan: FixedScheduleToPlan) => fixedScheduleToPlan.fixedSchedule.id === item.fixedSchedule.id);\n const targetMachine = this.planningContext.machines.find((machine: PlanningEquipment) => machine.id === targetLine.parentEquipment.id);\n if (AssertionUtils.isNullOrUndefined(targetMachine)) {\n return false;\n }\n const targetRun = this.planningContext.planningItemsByMachine[targetMachine.id].find((target: PlanningItem) => target.draftId === targetItem?.draftId) as RunCarpet;\n\n return PlanningItemHelper.isFixedScheduleCompatible(toPlan, targetMachine, targetRun?.creel, targetRun?.quality);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {PlanningItemHelper} from '@application/helper/planning-prototype/planning-item-helper';\nimport {GenericOrder} from '@domain/planning-prototype/generic-order.interface';\nimport {PlanningEquipment} from '@domain/planning-prototype/planning-equipment';\nimport {PlanningForecast} from '@domain/planning-prototype/planning-forecast';\nimport {PlanningItem} from '@domain/planning-prototype/planning-item';\nimport {PlanningItemForecast} from '@domain/planning-prototype/planning-item-forecast';\nimport {PlanningItemType} from '@domain/planning-prototype/planning-item-type';\nimport {PlanningLine} from '@domain/planning-prototype/planning-line';\nimport {CompatibleMachine} from '@domain/planning-prototype/to-plan/compatible-machine';\nimport {FixedScheduleToPlan} from '@domain/planning-prototype/to-plan/fixed-schedule-to-plan';\nimport {ProductionOrderToPlan} from '@domain/planning-prototype/to-plan/production-order-to-plan';\nimport {ProductionOrderType} from '@domain/planning-prototype/to-plan/production-order-type';\nimport {ArrayUtils, AssertionUtils} from '@vdw/angular-component-library';\nimport {UUID} from 'crypto';\nimport moment from 'moment';\nimport {BehaviorSubject, Observable, Subject, map} from 'rxjs';\nimport {NavigationPlanningItemSidebar} from '../sidebars/planning-item-sidebar/navigation-item-sidebar.interface';\n\nexport type SelectedItemType = PlanningEquipment | PlanningItem | ProductionOrderToPlan[] | FixedScheduleToPlan[];\n\n@Injectable()\nexport class PlanningPrototypeContextService {\n public planningForecast: PlanningForecast;\n public ordersToPlan: ProductionOrderToPlan[];\n public fixedSchedulesToPlan: FixedScheduleToPlan[] = [];\n public machines: PlanningEquipment[];\n public planningItemsByMachine: {[id: number]: PlanningItem[]} = {};\n public machinesByPlanningItem: {[draftId: UUID]: PlanningEquipment} = {};\n public sortedPlanningItemForecasts: {[draftId: UUID]: PlanningItemForecast} = {};\n public productChanges: UUID[] = [];\n public planningLinesByMachine: {[id: number]: PlanningLine} = {};\n public planningHistory: {[planningLineId: number]: PlanningItem[]} = {};\n public itemCreationPlaceholder: PlanningItem;\n\n public get selectedItem(): SelectedItemType {\n return this._selectedItemChanges.value;\n }\n\n public get selectedItemChanges(): Observable {\n return this._selectedItemChanges.asObservable();\n }\n\n public get planningLineChanges(): Observable {\n return this._machineChanges.pipe(map((machine: PlanningEquipment) => this.planningForecast.planningLines.find((line: PlanningLine) => line.parentEquipment.id === machine.id)));\n }\n\n private readonly _machineChanges = new Subject();\n private readonly _selectedItemChanges = new BehaviorSubject(null);\n\n public init(forecast: PlanningForecast, ordersToPlan: ProductionOrderToPlan[], fixedSchedulesToPlan: FixedScheduleToPlan[]): void {\n this.planningForecast = forecast;\n this.ordersToPlan = ordersToPlan;\n this.fixedSchedulesToPlan = fixedSchedulesToPlan;\n\n this.getMachinesFromForecast();\n this.getPlanningItemsByMachine();\n this.updateForecasts(forecast.forecasts);\n this.recalculateProductChanges();\n this.getMachinesByPlanningItem();\n }\n\n public reset(): void {\n this.selectItem(null);\n this.planningForecast = null;\n this.ordersToPlan = [];\n this.fixedSchedulesToPlan = [];\n this.machines = [];\n this.planningItemsByMachine = {};\n this.machinesByPlanningItem = {};\n this.sortedPlanningItemForecasts = {};\n this.productChanges = [];\n this.planningLinesByMachine = {};\n this.planningHistory = {};\n this.itemCreationPlaceholder = null;\n }\n\n public mergeUpdatedPlanning(forecast: PlanningForecast, ordersToPlan: ProductionOrderToPlan[]): void {\n const flatList = this.getFlatListOfPlanningItems();\n\n flatList\n .filter((item: PlanningItem) => PlanningItemHelper.isOrderLiteItem(item))\n .forEach((item: GenericOrder) => {\n const plannedOrder = ordersToPlan.find((order: ProductionOrderToPlan) => order.type !== ProductionOrderType.CARPET && order.productionOrder.id === item.productionOrder.id);\n\n if (!AssertionUtils.isNullOrUndefined(plannedOrder)) {\n item.productionOrder = plannedOrder.productionOrder;\n item.estimatedProductionTime = plannedOrder.compatibleMachines.find((mach: CompatibleMachine) => mach.machine.id === this.machinesByPlanningItem[item.draftId].id)?.estimatedProductionTime;\n }\n });\n\n for (const planningLine of this.planningForecast.planningLines) {\n const updatedPlanningLine = forecast.planningLines.find((line: PlanningLine) => line.id === planningLine.id);\n this.mergeUpdatedPlanningLine(planningLine, updatedPlanningLine, flatList);\n this.removeItemsNotToPlan(planningLine, ordersToPlan);\n }\n\n this.planningForecast.forecasts.push(...forecast.forecasts);\n\n this.init(this.planningForecast, ordersToPlan, this.fixedSchedulesToPlan);\n }\n\n public selectItem(item: SelectedItemType): void {\n this._selectedItemChanges.next(item);\n }\n\n public getFlatListOfPlanningItems(parent?: PlanningItem): PlanningItem[] {\n if (AssertionUtils.isNullOrUndefined(parent)) {\n return (this.planningForecast?.planningLines ?? [])\n .flatMap((planningLine: PlanningLine) => planningLine.planningItems)\n .flatMap((planningItem: PlanningItem) => this.getFlatListOfPlanningItems(planningItem));\n }\n return [parent, ...(parent.planningItems?.flatMap((planningItem: PlanningItem) => this.getFlatListOfPlanningItems(planningItem)) ?? [])];\n }\n\n public mergeHistoryData(history: {[ids: number]: PlanningItem[]}): void {\n const updatedPlanningLines = Object.keys(history).map((key: string) => Number(key));\n for (const planningLineId of updatedPlanningLines) {\n const historyUpdate = history[planningLineId];\n const itemsToUpdate: PlanningItem[] = this.planningHistory[planningLineId] ?? [];\n\n const result = itemsToUpdate.filter((item: PlanningItem) => !historyUpdate.some((itemUpdate: PlanningItem) => item.id === itemUpdate.id));\n result.push(...historyUpdate);\n this.planningHistory[planningLineId] = result;\n\n const planningLine = (this.planningForecast?.planningLines ?? []).find((line: PlanningLine) => line.id === planningLineId);\n if (!AssertionUtils.isNullOrUndefined(planningLine)) {\n this.setMachineForPlanningItems(planningLine.parentEquipment, result);\n }\n }\n }\n\n public updateForecasts(forecasts: PlanningItemForecast[]): void {\n for (const forecast of forecasts) {\n this.sortedPlanningItemForecasts[forecast.draftId] = forecast;\n }\n this.recalculateProductChanges();\n this.getMachinesByPlanningItem();\n }\n\n public markAsChanged(machine: PlanningEquipment): void {\n this._machineChanges.next(machine);\n }\n\n public removeItemFromList(itemToRemove: PlanningItem, list: PlanningItem[]): void {\n const draggedItemIndex = list.indexOf(itemToRemove);\n const itemsToUpdate = list.filter((item: PlanningItem) => item.sequenceNumber > itemToRemove.sequenceNumber);\n for (const item of itemsToUpdate) {\n item.sequenceNumber--;\n }\n list.splice(draggedItemIndex, 1);\n }\n\n public removeEmptyItems(list: PlanningItem[]): void {\n const itemsToRemove = list.filter(\n (item: PlanningItem) => AssertionUtils.isNullOrUndefined(item.actualStartDate) && AssertionUtils.isEmpty(item.planningItems) && moment.duration(item.minimumDuration).asHours() === 0\n );\n for (const item of itemsToRemove) {\n this.removeItemFromList(item, list);\n }\n }\n\n public delete(item: PlanningItem, parentList: PlanningItem[], machine: PlanningEquipment): void {\n this.selectItem(null);\n this.removeItemFromList(item, parentList);\n this.markAsChanged(machine);\n }\n\n public addItemToList(itemToAdd: PlanningItem, list: PlanningItem[], targetTime: Date): void {\n const itemsBeforeTarget = list.filter(\n (item: PlanningItem) => !AssertionUtils.isNullOrUndefined(item.actualStartDate) || targetTime >= PlanningItemHelper.getTimelineEndDate(item, this.sortedPlanningItemForecasts[item.draftId])\n );\n itemsBeforeTarget.sort(PlanningItem.compareBySequenceNumber);\n const itemBeforeTarget = !AssertionUtils.isEmpty(itemsBeforeTarget) ? itemsBeforeTarget[itemsBeforeTarget.length - 1] : null;\n const itemsAfterTarget = list.filter((item: PlanningItem) => item.sequenceNumber > (itemBeforeTarget?.sequenceNumber ?? 0));\n for (const item of itemsAfterTarget) {\n item.sequenceNumber++;\n }\n itemToAdd.sequenceNumber = (itemBeforeTarget?.sequenceNumber ?? 0) + 1;\n list.push(itemToAdd);\n }\n\n public updatePlanningItemIds(update: {[draftId: UUID]: number}): void {\n const planningItems = this.getFlatListOfPlanningItems().filter((item: PlanningItem) => item.draftId in update);\n for (const item of planningItems) {\n item.id = update[item.draftId];\n }\n }\n\n public getEmptyDataForNavigationHelper(): any {\n return {\n planningForecast: null,\n ordersToPlan: null,\n fixedSchedulesToPlan: null,\n machineOverviewSettings: null,\n startDate: null,\n endDate: null,\n updatedPlanningLines: null,\n planningGrid: null,\n rootGroup: null,\n storedFilter: null,\n selectedItem: null,\n sortedPlanningItemForecastsNew: null\n };\n }\n\n public getEmptyDataOfPlanningItemSidebarForNavigationHelper(): NavigationPlanningItemSidebar {\n return {planningItem: null, machine: null, createItemMode: null, maintenanceTypes: null};\n }\n\n private getMachinesFromForecast(): void {\n const machinesWithDuplicates = this.planningForecast.planningLines.map((planningLine: PlanningLine) => planningLine.parentEquipment);\n this.machines = ArrayUtils.distinctBy(machinesWithDuplicates, (equipment: PlanningEquipment) => equipment.id);\n }\n\n private getPlanningItemsByMachine(): void {\n for (const planningLine of this.planningForecast.planningLines) {\n this.planningLinesByMachine[planningLine.parentEquipment.id] = planningLine;\n this.planningItemsByMachine[planningLine.parentEquipment.id] = planningLine.planningItems;\n }\n }\n\n private recalculateProductChanges(): void {\n this.productChanges = [];\n for (const planningLine of this.planningForecast.planningLines) {\n const runs = planningLine.planningItems.filter((item: PlanningItem) => item.type !== PlanningItemType.MAINTENANCE && AssertionUtils.isNullOrUndefined(item.actualEndDate));\n runs.sort(PlanningItem.compareBySequenceNumber);\n\n let lastRun: PlanningItem;\n for (const run of runs) {\n if (PlanningItemHelper.isDifferentConfig(lastRun, run)) {\n this.productChanges.push(run.draftId);\n if (!AssertionUtils.isEmpty(run.planningItems)) {\n this.productChanges.push(...run.planningItems.map((order: PlanningItem) => order.draftId));\n }\n }\n lastRun = run;\n }\n }\n }\n\n private getMachinesByPlanningItem(): void {\n for (const planningLine of this.planningForecast.planningLines) {\n this.setMachineForPlanningItems(planningLine.parentEquipment, planningLine.planningItems);\n }\n }\n\n private setMachineForPlanningItems(machine: PlanningEquipment, items: PlanningItem[]): void {\n for (const item of items) {\n this.machinesByPlanningItem[item.draftId] = machine;\n if (!AssertionUtils.isEmpty(item.planningItems)) {\n this.setMachineForPlanningItems(machine, item.planningItems);\n }\n }\n }\n\n private mergeUpdatedPlanningLine(planningLine: PlanningLine, update: PlanningLine, flatList: PlanningItem[]): void {\n const updatedItems = update.planningItems.filter((item: PlanningItem) => item.isActive);\n for (const updatedChild of updatedItems.flatMap((item: PlanningItem) => item.planningItems)) {\n if (!PlanningItemHelper.isOrderItem(updatedChild)) {\n continue;\n }\n const existingItem = flatList.find(\n (item: PlanningItem): item is GenericOrder =>\n PlanningItemHelper.isOrderItem(item) &&\n ProductionOrderToPlan.getType(item.productionOrder) === ProductionOrderToPlan.getType(updatedChild.productionOrder) &&\n item.productionOrder.id === updatedChild.productionOrder.id\n );\n\n if (AssertionUtils.isNullOrUndefined(existingItem)) {\n continue;\n }\n\n const existingItemParent = flatList.find((item: PlanningItem) => item.planningItems.includes(existingItem));\n this.removeItemFromList(existingItem, existingItemParent.planningItems);\n }\n for (const activeItem of planningLine.planningItems.filter((item: PlanningItem) => item.isActive)) {\n this.removeItemFromList(activeItem, planningLine.planningItems);\n }\n\n planningLine.planningItems = planningLine.planningItems.filter((item: PlanningItem) => !item.isActive);\n planningLine.planningItems.push(...updatedItems);\n this.removeEmptyItems(planningLine.planningItems);\n this.markAsChanged(planningLine.parentEquipment);\n }\n\n private removeItemsNotToPlan(planningLine: PlanningLine, ordersToPlan: ProductionOrderToPlan[]): void {\n for (const topLevelItem of planningLine.planningItems) {\n const itemsToRemove = topLevelItem.planningItems.filter(\n (item: PlanningItem) =>\n AssertionUtils.isNullOrUndefined(item.actualStartDate) &&\n PlanningItemHelper.isOrderItem(item) &&\n !ordersToPlan.some((order: ProductionOrderToPlan) => order.productionOrder.id === item.productionOrder?.id && order.type === ProductionOrderToPlan.getType(order.productionOrder))\n );\n for (const itemToRemove of itemsToRemove) {\n this.removeItemFromList(itemToRemove, topLevelItem.planningItems);\n }\n }\n this.removeEmptyItems(planningLine.planningItems);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Command} from '@application/command/command';\nimport {AlertDialogResult, DialogBuilderFactoryService, DialogType} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {Observable, of as observableOf} from 'rxjs';\nimport {filter, switchMap} from 'rxjs/operators';\nimport {ConfirmProductionOrderDeletionParameters} from './confirm-production-order-deletion-parameters';\n\n@Injectable()\nexport class ConfirmProductionOrderDeletionCommand implements Command {\n public constructor(private readonly dialogBuilderFactoryService: DialogBuilderFactoryService) {}\n\n public execute({title, message}: ConfirmProductionOrderDeletionParameters): Observable {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: title,\n messageText: message,\n type: DialogType.DELETE\n })\n .pipe(\n filter((result: AlertDialogResult) => {\n return isEqual(result, AlertDialogResult.CONFIRM);\n }),\n switchMap(() => observableOf(void 0))\n );\n }\n}\n","import {Component, Inject, OnDestroy} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {DialogData, SelectionListContainerData, SelectionListItem} from '@vdw/angular-component-library';\nimport {Observable, Subject} from 'rxjs';\n\n@Component({\n templateUrl: './machine-filter-settings.component.html',\n styleUrls: ['./machine-filter-settings.component.scss']\n})\nexport class MachineFilterSettingsComponent implements DialogData, OnDestroy {\n private readonly filterOptionsChanges = new Subject();\n public readonly selectListOptions: SelectionListItem[];\n public containerTitle: string;\n public maxHeight: string;\n\n public constructor(@Inject(MAT_DIALOG_DATA) data: SelectionListContainerData) {\n this.selectListOptions = data.options;\n this.containerTitle = data.containerTitle ?? 'PLANNING.SHOW_PLANNING_GROUPS';\n this.maxHeight = data.maxHeight ?? '300px';\n }\n\n public ngOnDestroy(): void {\n this.filterOptionsChanges.complete();\n }\n\n public getValue(): Observable {\n return this.filterOptionsChanges.asObservable();\n }\n\n public onFilterOptionChanged(update: SelectionListItem[]): void {\n this.filterOptionsChanges.next(update);\n }\n}\n","\n","import {InjectionToken} from '@angular/core';\nimport {DateRange} from '@domain/date-range';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {Observable} from 'rxjs';\n\nexport const PLANNING_SCHEDULER = new InjectionToken('PlanningScheduler');\n\nexport interface PlanningScheduler {\n isUpdating: boolean;\n onPlanningChanges(): Observable;\n\n getPlanning(selectedDateRange: DateRange, onSuccess?: () => void): void;\n\n rescheduleItems(planningItem: PlanningItem, sourceMachine: PlanningMachine, destinationGroupedCalendarItem: CalendarItemGroup, destinationMachine: PlanningMachine): void;\n\n reschedulePlanningOrder(\n draggedPlanningOrder: PlanningOrder,\n sourceRun: PlanningMachineRun,\n destinationRun: PlanningMachineRun,\n planningOrderNewPosition: number,\n destinationMachine: PlanningMachine,\n sourceMachineId: number\n ): void;\n\n addNewPlanningItem(newPlanningItem: PlanningItem, destinationGroupedCalendarItem: CalendarItemGroup): void;\n\n resetPlanning(): void;\n\n getCachedGroupedCalendarItem(machineId: number): CalendarItemGroup;\n\n setGroupedCalendarItems(groupedCalendarItems: CalendarItemGroup[]): void;\n\n addUnplannedPlanningOrderToRun(unplannedPlanningOrder: PlanningOrder, run: PlanningMachineRun, planningOrderPosition: number, machine: PlanningMachine, onSuccess: () => void);\n\n addUnplannedPlanningOrderToNewRun(unplannedPlanningOrder: PlanningOrder, machine: PlanningMachine, onSuccess: () => void);\n\n addPlannedPlanningOrderToNewRun(plannedPlanningOrder: PlanningOrder, sourceRun: PlanningMachineRun, sourceMachineId: number, destinationMachine: PlanningMachine): void;\n}\n","import {Command} from '@application/command/command';\nimport {CalendarItem} from '@domain/planning/calendar-item';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {moment, TimeUtils} from '@vdw/angular-component-library';\nimport {each, isEmpty, isEqual, remove} from 'lodash-es';\nimport {RemovePlanningOrderParameters} from './remove-planning-order-parameters';\n\nexport class RemovePlanningOrderCommand implements Command {\n public execute(commandArgs: RemovePlanningOrderParameters): CalendarItemGroup[] {\n const {sourceGroupedCalendarItem, groupedCalendarItems, planningOrder, run} = commandArgs;\n\n const adjustRunRunningTime = !!commandArgs.adjustRunRunningTime;\n\n const [removedPlanningOrder] = remove(run.planningOrders, {id: planningOrder.id});\n const runEndDate: Date =\n adjustRunRunningTime && !isEmpty(run.planningOrders) ? moment(run.endDate).subtract(removedPlanningOrder.totalRunningTimeInMs, TimeUtils.MILLISECONDS_UNIT).toDate() : run.endDate;\n\n run.reschedule(run.startDate, runEndDate);\n\n each(sourceGroupedCalendarItem.items, (item: CalendarItem, index: number) => {\n if (isEqual(item.id, run.id)) {\n sourceGroupedCalendarItem.items[index] = run;\n return false;\n }\n });\n\n each(groupedCalendarItems, (groupedCalendarItem: CalendarItemGroup, index: number) => {\n if (isEqual(groupedCalendarItem.machineId, sourceGroupedCalendarItem.machineId)) {\n groupedCalendarItems[index] = sourceGroupedCalendarItem;\n return false;\n }\n });\n\n return groupedCalendarItems;\n }\n}\n","import {PlanningCreel} from '@domain/planning/carpet/planning-creel';\nimport {PlanningMachineQuality} from '@domain/planning/carpet/planning-machine-quality';\nimport {ProductionOrderCarpetForPlanningOrder} from '@domain/planning/carpet/production-order-carpet-for-planning-order';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\n\nexport class ProductionOrderCarpetForPlanningOrderStubFactory {\n public static getRandomProductionOrder(): ProductionOrderCarpetForPlanningOrder {\n const productionOrder = new ProductionOrderCarpetForPlanningOrder(1, 'ProductionOrder_1', new Date(), ProductionScheduleStatus.ARRIVED);\n\n productionOrder.machineQuality = new PlanningMachineQuality(1, 'MQ 01', 1);\n productionOrder.creel = new PlanningCreel(1, 'Creel 01');\n return productionOrder;\n }\n\n public static getRandomWithIdAndDueDate(id: number, dueDate: Date): ProductionOrderCarpetForPlanningOrder {\n return new ProductionOrderCarpetForPlanningOrder(id, `ProductionOrder_${id}`, dueDate, ProductionScheduleStatus.ARRIVED);\n }\n\n public static getRandomProductionOrderWithStatusValue(status: ProductionScheduleStatus): ProductionOrderCarpetForPlanningOrder {\n return new ProductionOrderCarpetForPlanningOrder(1, 'ProductionOrder_1', new Date(), status);\n }\n\n public static getRandomProductionOrderWithIdAndStatusValue(id: number, status: ProductionScheduleStatus): ProductionOrderCarpetForPlanningOrder {\n return new ProductionOrderCarpetForPlanningOrder(id, `ProductionOrder_${id}`, new Date(), status);\n }\n\n public static getRandomProductionOrderWithIdMachineQualityIdAndCreelId(id: number, machineQualityId: number, creelId: number): ProductionOrderCarpetForPlanningOrder {\n const productionOrder = new ProductionOrderCarpetForPlanningOrder(id, `ProductionOrder_${id}`, new Date(), ProductionScheduleStatus.TO_PLAN);\n\n productionOrder.machineQuality = new PlanningMachineQuality(machineQualityId, `MQ ${id}`, 1);\n productionOrder.creel = new PlanningCreel(creelId, `Creel ${id}`);\n\n return productionOrder;\n }\n\n public static getRandomWithIdAndName(id: number, name: string): ProductionOrderCarpetForPlanningOrder {\n return new ProductionOrderCarpetForPlanningOrder(id, name, new Date(), ProductionScheduleStatus.ARRIVED);\n }\n}\n","import {ProductionOrderYield} from '@domain/planning/production-order-yield';\nimport {PlanningTuftProduct} from '@domain/planning/tufting/planning-tuft-product';\nimport {ProductionOrderTuftingForPlanningOrder} from '@domain/planning/tufting/production-order-tufting-for-planning-order';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\n\nexport class ProductionOrderTuftingForPlanningOrderStubFactory {\n public static getRandomProductionOrderTuft(): ProductionOrderTuftingForPlanningOrder {\n return this.getRandomProductionOrderTuftWithIdAndStatus(0, ProductionScheduleStatus.ARRIVED);\n }\n\n public static getRandomProductionOrderTuftWithIdAndStatus(id: number, status: ProductionScheduleStatus): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(id, '', status, new PlanningTuftProduct(1, ''), null, null);\n }\n\n public static getRandomProductionOrderTuftWithIdAndTuftProductId(id: number, tuftProductId: number): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(id, '', ProductionScheduleStatus.TO_PLAN, new PlanningTuftProduct(tuftProductId, ''), null, null);\n }\n\n public static getRandomProductionOrderTuftWithIdAndDueDate(id: number, dueDate: Date): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(id, '', ProductionScheduleStatus.TO_PLAN, new PlanningTuftProduct(1, ''), null, dueDate);\n }\n\n public static getRandomProductionOrderTuftWithYield(productYield: ProductionOrderYield): ProductionOrderTuftingForPlanningOrder {\n return new ProductionOrderTuftingForPlanningOrder(0, '', ProductionScheduleStatus.EXECUTING, new PlanningTuftProduct(1, ''), productYield, null);\n }\n}\n","import {PlanningWeaveProduct} from '@domain/planning/weaving/planning-weave-product';\nimport {ProductionOrderWeavingForPlanningOrder} from '@domain/planning/weaving/production-order-weaving-for-planning-order';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\n\nexport class ProductionOrderWeavingForPlanningOrderStubFactory {\n public static getRandomProductionOrderLiteWithIdAndStatusValue(id: number, status: ProductionScheduleStatus): ProductionOrderWeavingForPlanningOrder {\n return new ProductionOrderWeavingForPlanningOrder(id, `ProductionOrderLite_${id}`, status, this.getRandomPlanningWeaveProduct(), {current: 0, planned: 1000}, null);\n }\n\n public static getRandomProductionOrderLiteWithStatusValue(status: ProductionScheduleStatus): ProductionOrderWeavingForPlanningOrder {\n return this.getRandomProductionOrderLiteWithIdAndStatusValue(1, status);\n }\n\n public static getRandomProductionOrderLiteWithIdAndDueDate(id: number, dueDate: Date): ProductionOrderWeavingForPlanningOrder {\n return new ProductionOrderWeavingForPlanningOrder(id, `ProductionOrderLite_${id}`, ProductionScheduleStatus.TO_PLAN, this.getRandomPlanningWeaveProduct(), {current: 0, planned: 1000}, dueDate);\n }\n\n public static getRandomProductionOrderLite(): ProductionOrderWeavingForPlanningOrder {\n return this.getRandomProductionOrderLiteWithStatusValue(ProductionScheduleStatus.CREATED);\n }\n\n public static getRandomPlanningWeaveProduct(): PlanningWeaveProduct {\n return new PlanningWeaveProduct(0, 'WeaveProduct_0');\n }\n\n public static getRandomProductionOrderLiteWithIdAndWeaveProductId(id: number, weaveProductId: number): ProductionOrderWeavingForPlanningOrder {\n return new ProductionOrderWeavingForPlanningOrder(\n id,\n `productionOrderLite_${id}`,\n ProductionScheduleStatus.TO_PLAN,\n new PlanningWeaveProduct(weaveProductId, `weaveProduct_${weaveProductId}`),\n {current: 0, planned: 1000},\n null\n );\n }\n}\n","import {PlanningOrder} from '@domain/planning/planning-order';\nimport {PlanningOrderData} from '@domain/planning/planning-order-data';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ProductionOrderCarpetForPlanningOrderStubFactory} from './production-order-carpet-for-planning-order-stub-factory';\nimport {ProductionOrderTuftingForPlanningOrderStubFactory} from './production-order-tufting-for-planning-order-stub-factory';\nimport {ProductionOrderWeavingForPlanningOrderStubFactory} from './production-order-weaving-for-planning-order-stub-factory';\n\nexport class PlanningOrderStubFactory {\n public static getRandomPlanningOrder(): PlanningOrder {\n return this.getRandomPlanningOrderWithId(1);\n }\n\n public static getRandomPlanningOrderWithId(id: number): PlanningOrder {\n return new PlanningOrder(id, new Date(), new Date(), null, ProductionOrderCarpetForPlanningOrderStubFactory.getRandomProductionOrder());\n }\n\n public static getRandomWithIdStartDateEndDateAndProductionOrderWithDueDate(id: number, startDate: Date, endDate: Date, dueDate: Date): PlanningOrder {\n return new PlanningOrder(id, startDate, endDate, null, ProductionOrderCarpetForPlanningOrderStubFactory.getRandomWithIdAndDueDate(id, dueDate));\n }\n\n public static getRandomWeavingWithIdStartDateEndDateAndProductionOrderWithDueDate(id: number, startDate: Date, endDate: Date, dueDate: Date): PlanningOrder {\n return new PlanningOrder(id, startDate, endDate, null, ProductionOrderWeavingForPlanningOrderStubFactory.getRandomProductionOrderLiteWithIdAndDueDate(id, dueDate));\n }\n\n public static getRandomTuft(): PlanningOrder {\n return new PlanningOrder(1, new Date(), new Date(), null, ProductionOrderTuftingForPlanningOrderStubFactory.getRandomProductionOrderTuft());\n }\n\n public static getRandomTuftingWithIdStartDateEndDateAndProductionOrderWithDueDate(id: number, startDate: Date, endDate: Date, dueDate: Date): PlanningOrder {\n return new PlanningOrder(id, startDate, endDate, null, ProductionOrderTuftingForPlanningOrderStubFactory.getRandomProductionOrderTuftWithIdAndDueDate(id, dueDate));\n }\n\n public static getRandomPlanningOrderThatContainsProductionOrderWithStatusValue(productionOrderStatus: ProductionScheduleStatus): PlanningOrder {\n return new PlanningOrder(1, new Date(), new Date(), null, ProductionOrderCarpetForPlanningOrderStubFactory.getRandomProductionOrderWithStatusValue(productionOrderStatus));\n }\n\n public static getRandomPlanningOrderThatContainsProductionOrderLiteWithStatusValue(productionOrderStatus: ProductionScheduleStatus): PlanningOrder {\n return new PlanningOrder(1, new Date(), new Date(), null, ProductionOrderWeavingForPlanningOrderStubFactory.getRandomProductionOrderLiteWithStatusValue(productionOrderStatus));\n }\n\n public static getRandomPlanningOrderWithEfficiency(efficiency: number): PlanningOrder {\n return new PlanningOrder(1, new Date(), new Date(), efficiency, ProductionOrderCarpetForPlanningOrderStubFactory.getRandomProductionOrder());\n }\n\n public static getRandomPlanningOrderWithProductionOrder(productionOrder: PlanningOrderData): PlanningOrder {\n return this.getRandomPlanningOrderWithIdAndProductionOrder(1, productionOrder);\n }\n\n public static getRandomPlanningOrderWithIdAndProductionOrder(id: number, productionOrder: PlanningOrderData): PlanningOrder {\n return new PlanningOrder(id, new Date(), new Date(), null, productionOrder);\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {PlanningOrderStubFactory} from '@application/helper/planning/planning-order-stub-factory';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningItemType} from '@domain/planning/planning-item-type.enum';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {PlanningGridComponent, TimezoneUtils} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {PLANNING_SCHEDULER, PlanningScheduler} from '../../planning/planning-scheduler/planning-scheduler';\n\n@Injectable()\nexport class PlanningContextService {\n public selectedPlanningOrderId: number;\n public selectedMachine: PlanningMachine;\n public selectedPlanningItem: PlanningItem;\n public selectedPlaceholder: PlanningItem;\n\n public machines: PlanningMachine[] = [];\n public machinesForSelectedPlanningGroups: PlanningMachine[] = [];\n public groupedCalendarItems: CalendarItemGroup[] = [];\n\n public unplannedOrderItem: PlanningOrder;\n public planningGridDisplay: PlanningGridComponent;\n\n public isOnboardingRunning = false;\n public isDragAndDropActive = false;\n\n private currentSubscription: Subscription;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(PLANNING_SCHEDULER) private readonly planningScheduler: PlanningScheduler\n ) {\n this.unplannedOrderItem = PlanningOrderStubFactory.getRandomPlanningOrder();\n this.unplannedOrderItem.endDate = moment(new Date()).add(12, 'h').toDate();\n this.currentSubscription = this.authentication.getCurrentSubscription();\n }\n\n public resetSelectedVariables(): void {\n this.selectedMachine = null;\n this.selectedPlanningItem = null;\n this.selectedPlanningOrderId = null;\n }\n\n public canEditPlanningItem(planningItem: PlanningItem): boolean {\n return this.canEdit() && !planningItem.isNew() && this.canReschedulePlanningItem(planningItem);\n }\n\n public canEdit(): boolean {\n return !this.isOnboardingRunning && !this.planningScheduler.isUpdating;\n }\n\n public canEditPlanningOrder(planningOrder: PlanningOrder): boolean {\n if (!this.hasPermissionToEditOrder(planningOrder)) {\n return false;\n }\n\n return (\n this.canEdit() &&\n planningOrder.productionOrder.status !== ProductionScheduleStatus.EXECUTED &&\n planningOrder.productionOrder.status !== ProductionScheduleStatus.EXECUTING &&\n planningOrder.productionOrder.status !== ProductionScheduleStatus.EXECUTED_PARTIAL &&\n planningOrder.productionOrder.status !== ProductionScheduleStatus.EXECUTED_COMPLETE\n );\n }\n\n public canEditMachineRun(machineRun: PlanningMachineRun): boolean {\n return !machineRun.planningOrders?.some((order: PlanningOrder) => !this.canEditPlanningOrder(order));\n }\n\n public getCurrentDateForSubscriptionTimezone(): Date {\n return TimezoneUtils.convertToDateWithCurrentOffset(new Date().toISOString(), this.authentication.getCurrentSubscription().timeZone.code);\n }\n\n public hasMachinePlanningItemPlaceholder(machineId: number): boolean {\n return this.selectedMachine?.id === machineId && this.selectedPlaceholder != null && !(this.selectedPlaceholder instanceof PlanningMachineRun);\n }\n\n public hasMachineMachineRunPlaceholder(machineId: number): boolean {\n return this.selectedMachine?.id === machineId && this.selectedPlaceholder instanceof PlanningMachineRun;\n }\n\n private canReschedulePlanningItem(planningItem: PlanningItem): boolean {\n if (planningItem instanceof PlanningMachineRun) {\n return this.canEditMachineRun(planningItem);\n }\n\n const currentDate = this.getCurrentDateForSubscriptionTimezone();\n const isPlanningItemExecuting = moment(planningItem.startDate).isSameOrBefore(currentDate);\n const isMaintenance = planningItem.type === PlanningItemType.CREEL_CHANGE || planningItem.type === PlanningItemType.WARP_CHANGE || planningItem.type === PlanningItemType.MACHINE_UNAVAILABLE;\n\n return isMaintenance || !isPlanningItemExecuting;\n }\n\n private hasPermissionToEditOrder(planningOrder: PlanningOrder): boolean {\n return (\n (planningOrder.isCarpetOrder && this.currentSubscription?.hasPermission(Permission.TEXFAB_CARPET_QUEUE)) ||\n (planningOrder.isWeavingOrder && this.currentSubscription?.hasPermission(Permission.TEXFAB_WEAVE_QUEUE)) ||\n (planningOrder.isTuftingOrder && this.currentSubscription?.hasPermission(Permission.TEXFAB_TUFT_QUEUE))\n );\n }\n}\n","import {Inject, Injectable, OnDestroy, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {CalendarItem} from '@domain/planning/calendar-item';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningMachineCarpetRun} from '@domain/planning/carpet/planning-machine-carpet-run';\nimport {ProductionOrderCarpetForPlanningOrder} from '@domain/planning/carpet/production-order-carpet-for-planning-order';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {PlanningOrderData} from '@domain/planning/planning-order-data';\nimport {PlanningMachineTuftingRun} from '@domain/planning/tufting/planning-machine-tufting-run';\nimport {ProductionOrderTuftingForPlanningOrder} from '@domain/planning/tufting/production-order-tufting-for-planning-order';\nimport {PlanningMachineWeavingRun} from '@domain/planning/weaving/planning-machine-weaving-run';\nimport {ProductionOrderWeavingForPlanningOrder} from '@domain/planning/weaving/production-order-weaving-for-planning-order';\nimport {AssertionUtils, DragDropData, PlanningDragDropService, PlanningGroupData, PlanningItemData, Point, TranslateService} from '@vdw/angular-component-library';\nimport {filter, Subject, takeUntil} from 'rxjs';\nimport {PlanningScheduler, PLANNING_SCHEDULER} from '../../planning/planning-scheduler/planning-scheduler';\nimport {NeedsAttentionSidebarComponent} from '../../planning/sidebars/needs-attention-sidebar/needs-attention-sidebar.component';\nimport {PlanningContextService} from './planning-context.service';\n\n@Injectable()\nexport class PlanningDragDropChangesService implements OnDestroy {\n private unsubscribeOnViewDestroy = new Subject();\n public needsAttentionSidebar: NeedsAttentionSidebarComponent;\n\n private readonly NEW_RUN_TEXT = this.translate.instant('GENERAL.ACTIONS.NEW_OBJECT', {object: 'PLANNING.ADD_ITEM.TYPES.RUN'}).toUpperCase();\n\n public constructor(\n private readonly translate: TranslateService,\n private readonly planningContext: PlanningContextService,\n private readonly planningDragDrop: PlanningDragDropService,\n @Inject(PLANNING_SCHEDULER) private readonly planningScheduler: PlanningScheduler\n ) {\n this.planningDragDrop.dragEnd\n .pipe(\n takeUntil(this.unsubscribeOnViewDestroy),\n filter((eventData: DragDropData) => eventData.draggedItem.dataTransfer === this.planningContext.unplannedOrderItem)\n )\n .subscribe((eventData: DragDropData) => this.unplannedOrderDragEnd(eventData));\n\n this.planningDragDrop.drag\n .pipe(\n takeUntil(this.unsubscribeOnViewDestroy),\n filter((eventData: DragDropData) => eventData.draggedItem.dataTransfer === this.planningContext.unplannedOrderItem)\n )\n .subscribe((eventData: DragDropData) => this.unplannedOrderDrag(eventData));\n }\n\n public ngOnDestroy(): void {\n this.unsubscribeOnViewDestroy.next(undefined);\n this.unsubscribeOnViewDestroy.complete();\n }\n\n public onPlanningItemDragStart(dragDropData: DragDropData): void {\n const draggedPlanningItem = dragDropData.draggedItem.dataTransfer as PlanningItem;\n this.planningContext.isDragAndDropActive = true;\n this.planningContext.selectedPlanningItem = draggedPlanningItem;\n }\n\n public onPlanningOrderDragStart(dragDropData: DragDropData): void {\n const draggedPlanningOrder = dragDropData.draggedItem.dataTransfer as PlanningOrder;\n const originalParentRun = dragDropData.sourceGroup.dataTransfer as PlanningMachineRun;\n this.planningContext.isDragAndDropActive = true;\n this.planningContext.selectedPlanningItem = originalParentRun;\n this.planningContext.selectedPlanningOrderId = draggedPlanningOrder.id;\n }\n\n public planningItemDragEnd(dragDropData: DragDropData): void {\n const draggedPlanningItem = dragDropData.draggedItem.dataTransfer as PlanningItem;\n this.planningContext.isDragAndDropActive = false;\n if (!dragDropData.dropAllowed || !this.planningContext.canEditPlanningItem(draggedPlanningItem)) {\n this.planningContext.selectedPlanningItem = undefined;\n return;\n }\n\n const sourceMachine = dragDropData.sourceRow.dataTransfer as PlanningMachine;\n const destinationMachine = dragDropData.targetRow.dataTransfer as PlanningMachine;\n const destinationGroup = this.planningContext.groupedCalendarItems?.find((group: CalendarItemGroup) => group.machineId === destinationMachine.id);\n\n const executingRun = this.executingRunForPlanningGroup(destinationGroup);\n const newStartDate = executingRun != null && executingRun.endDate > dragDropData.targetTime ? executingRun.endDate : dragDropData.targetTime;\n\n draggedPlanningItem.updateStartWhilePreservingDuration(newStartDate);\n if (draggedPlanningItem instanceof PlanningMachineRun) {\n draggedPlanningItem.fitOrders();\n }\n this.planningScheduler.rescheduleItems(draggedPlanningItem, sourceMachine, destinationGroup, destinationMachine);\n\n this.planningContext.selectedPlanningItem = undefined;\n }\n\n public onPlanningOrderDragEnd(dragDropData: DragDropData): void {\n this.planningContext.isDragAndDropActive = false;\n const draggedPlanningOrder = dragDropData.draggedItem.dataTransfer as PlanningOrder;\n if (!dragDropData.dropAllowed || !draggedPlanningOrder.canBeRescheduled()) {\n this.planningContext.selectedPlanningOrderId = undefined;\n return;\n }\n\n const originalParentRun = dragDropData.sourceGroup.dataTransfer as PlanningMachineRun;\n const sourceMachine = dragDropData.sourceRow.dataTransfer as PlanningMachine;\n const destinationMachine = dragDropData.targetRow.dataTransfer as PlanningMachine;\n const destinationRun = dragDropData.targetItem?.dataTransfer as PlanningMachineRun;\n\n if (destinationRun == null) {\n const destinationGroup = this.planningContext.groupedCalendarItems?.find((group: CalendarItemGroup) => group.machineId === destinationMachine.id);\n\n const executingRun = this.executingRunForPlanningGroup(destinationGroup);\n const newStartDate = executingRun != null && executingRun.endDate > dragDropData.targetTime ? executingRun.endDate : dragDropData.targetTime;\n\n draggedPlanningOrder.updateStartWhilePreservingDuration(newStartDate);\n this.planningScheduler.addPlannedPlanningOrderToNewRun(draggedPlanningOrder, originalParentRun, sourceMachine.id, destinationMachine);\n } else {\n const position = this.getPlanningOrderPositionOnDragEnd(dragDropData);\n this.planningScheduler.reschedulePlanningOrder(draggedPlanningOrder, originalParentRun, destinationRun, position, destinationMachine, sourceMachine.id);\n }\n\n this.planningContext.selectedPlanningOrderId = undefined;\n }\n\n public planningOrderDragEnter(dragDropData: DragDropData): void {\n if (!dragDropData.dropAllowed) {\n return;\n }\n const targetMachine = dragDropData.targetRow?.dataTransfer as PlanningMachine;\n const draggedPlanningItem = dragDropData.draggedItem.dataTransfer as PlanningOrder;\n\n if (targetMachine && !draggedPlanningItem.isCompatibleWithMachineType(targetMachine.machineType)) {\n dragDropData.dropAllowed = false;\n return;\n }\n\n const targetRun = dragDropData.targetItem?.dataTransfer as PlanningMachineRun;\n const sourceRun = dragDropData.sourceGroup?.dataTransfer as PlanningMachineRun;\n\n dragDropData.dropAllowed = this.validateTargetRun(sourceRun, targetRun, dragDropData.dropAllowed);\n }\n\n public planningRunDragEnter(dragDropData: DragDropData): void {\n if (!dragDropData.dropAllowed) {\n return;\n }\n const targetMachine = dragDropData.targetRow?.dataTransfer as PlanningMachine;\n const draggedPlanningItem = dragDropData.draggedItem.dataTransfer as PlanningMachineRun;\n\n dragDropData.dropAllowed = targetMachine != null && draggedPlanningItem.isCompatibleWithMachineType(targetMachine.machineType);\n }\n\n public sidebarUnplannedOrderDragStart({event, unplannedOrder}: {event: DragEvent; unplannedOrder: PlanningOrderData}, template: TemplateRef, viewContainerRef: ViewContainerRef): void {\n this.planningContext.isDragAndDropActive = true;\n if (!this.planningContext.canEdit()) {\n return;\n }\n\n const grid = this.planningContext.planningGridDisplay;\n this.planningContext.unplannedOrderItem = new PlanningOrder(0, null, null, 0, unplannedOrder);\n\n const planningItemData = new PlanningItemData();\n planningItemData.template = template;\n planningItemData.draggable = true;\n planningItemData.dataTransfer = this.planningContext.unplannedOrderItem;\n\n const planningGroupData = new PlanningGroupData();\n planningGroupData.draggable = true;\n planningGroupData.class = 'planning-run';\n\n const startPositionInContainer: Point = {\n x: event.clientX - grid.bodyContainer.nativeElement.parentElement.getBoundingClientRect().x + grid.bodyContainer.nativeElement.parentElement.scrollLeft,\n y: event.clientY - grid.bodyContainerOffset.y + grid.bodyContainer.nativeElement.parentElement.scrollTop\n };\n\n this.planningDragDrop.onDragStart(event, planningItemData, planningGroupData, null, 250, startPositionInContainer, this.NEW_RUN_TEXT, grid, viewContainerRef);\n }\n\n public unplannedOrderDrag(eventData: DragDropData): void {\n if (!eventData.dropAllowed) {\n return;\n }\n const draggedOrderData = eventData.draggedItem.dataTransfer as PlanningOrder;\n const targetMachine = eventData.targetRow?.dataTransfer as PlanningMachine;\n if (!targetMachine || !draggedOrderData.isCompatibleWithMachineType(targetMachine.machineType)) {\n eventData.dropAllowed = false;\n return;\n }\n const targetRun = eventData.targetItem?.dataTransfer as PlanningMachineRun;\n eventData.dropAllowed = this.validateTargetRunForOrder(targetRun, draggedOrderData.productionOrder);\n }\n\n public unplannedOrderDragEnd(dragDropData: DragDropData): void {\n this.planningContext.isDragAndDropActive = false;\n if (!dragDropData.dropAllowed || !this.planningContext.unplannedOrderItem.canBeRescheduled()) {\n this.planningContext.unplannedOrderItem = undefined;\n return;\n }\n\n const destinationMachine = dragDropData.targetRow?.dataTransfer as PlanningMachine;\n const destinationRun = dragDropData.targetItem?.dataTransfer as PlanningMachineRun;\n\n const destinationGroup = this.planningContext.groupedCalendarItems?.find((group: CalendarItemGroup) => group.machineId === destinationMachine.id);\n const executingRun = this.executingRunForPlanningGroup(destinationGroup);\n\n const newStartDate = executingRun != null && executingRun.endDate > dragDropData.targetTime ? executingRun.endDate : dragDropData.targetTime;\n this.planningContext.unplannedOrderItem.updateStartWhilePreservingDuration(newStartDate);\n\n if (destinationRun == null) {\n this.planningScheduler.addUnplannedPlanningOrderToNewRun(this.planningContext.unplannedOrderItem, destinationMachine, this.removeUnplannedOrderFromNeedsAttentionSidebar());\n } else {\n const pos = this.getPlanningOrderPositionOnDragEnd(dragDropData);\n this.planningScheduler.addUnplannedPlanningOrderToRun(this.planningContext.unplannedOrderItem, destinationRun, pos, destinationMachine, this.removeUnplannedOrderFromNeedsAttentionSidebar());\n }\n\n this.planningScheduler.resetPlanning();\n }\n\n private executingRunForPlanningGroup(group: CalendarItemGroup): PlanningMachineRun {\n return group?.items.find((item: CalendarItem) => item instanceof PlanningMachineRun && item.executing) as PlanningMachineRun;\n }\n\n private removeUnplannedOrderFromNeedsAttentionSidebar(): () => void {\n return (): void => {\n if (this.planningContext.unplannedOrderItem.isWeavingOrder) {\n this.needsAttentionSidebar?.removeProductionOrderWeaving(this.planningContext.unplannedOrderItem.productionOrder.id);\n } else if (this.planningContext.unplannedOrderItem.isCarpetOrder) {\n this.needsAttentionSidebar?.removeProductionOrderCarpet(this.planningContext.unplannedOrderItem.productionOrder.id);\n } else if (this.planningContext.unplannedOrderItem.isTuftingOrder) {\n this.needsAttentionSidebar?.removeProductionOrderTufting(this.planningContext.unplannedOrderItem.productionOrder.id);\n }\n };\n }\n\n private getPlanningOrderPositionOnDragEnd(dragDropData: DragDropData): number {\n const targetGroup = dragDropData.targetItem as PlanningGroupData;\n\n if (AssertionUtils.isNullOrUndefined(targetGroup)) {\n return 0;\n }\n\n if (AssertionUtils.isNullOrUndefined(dragDropData.targetChildItem)) {\n return targetGroup.items.length;\n }\n\n const foundIndex = targetGroup.items.findIndex((itemData: PlanningItemData) => itemData === dragDropData.targetChildItem);\n return Math.max(0, dragDropData.targetChildItem?.endDate === dragDropData.targetTime ? foundIndex + 1 : foundIndex);\n }\n\n private validateTargetRun(sourceRun: PlanningMachineRun, targetRun: PlanningMachineRun, defaultResult: boolean): boolean {\n if (sourceRun === targetRun) {\n return true;\n }\n if (sourceRun instanceof PlanningMachineWeavingRun && targetRun instanceof PlanningMachineWeavingRun) {\n return sourceRun.weaveProduct != null && sourceRun.weaveProduct.id === targetRun.weaveProduct?.id;\n }\n if (sourceRun instanceof PlanningMachineCarpetRun && targetRun instanceof PlanningMachineCarpetRun) {\n return sourceRun.machineQuality != null && sourceRun.creel != null && sourceRun.creel.id === targetRun.creel?.id && sourceRun.machineQuality.id === targetRun.machineQuality?.id;\n }\n if (sourceRun instanceof PlanningMachineTuftingRun && targetRun instanceof PlanningMachineTuftingRun) {\n return sourceRun.tuftProduct != null && sourceRun.tuftProduct.id === targetRun.tuftProduct?.id;\n }\n return defaultResult;\n }\n\n private validateTargetRunForOrder(targetRun: PlanningMachineRun, order: PlanningOrderData): boolean {\n if (order instanceof ProductionOrderCarpetForPlanningOrder && targetRun instanceof PlanningMachineCarpetRun) {\n return order.creel.id === targetRun.creel?.id && order.machineQuality.id === targetRun.machineQuality?.id;\n }\n\n if (order instanceof ProductionOrderWeavingForPlanningOrder && targetRun instanceof PlanningMachineWeavingRun) {\n return order.weaveProduct.id === targetRun.weaveProduct?.id;\n }\n\n if (order instanceof ProductionOrderTuftingForPlanningOrder && targetRun instanceof PlanningMachineTuftingRun) {\n return order.tuftProduct.id === targetRun.tuftProduct?.id;\n }\n\n return !targetRun;\n }\n}\n","import {ElementRef, Inject, Injectable} from '@angular/core';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningCreel} from '@domain/planning/carpet/planning-creel';\nimport {PlanningMachineCarpetRun} from '@domain/planning/carpet/planning-machine-carpet-run';\nimport {PlanningMachineQuality} from '@domain/planning/carpet/planning-machine-quality';\nimport {ProductionOrderCarpetForPlanningOrder} from '@domain/planning/carpet/production-order-carpet-for-planning-order';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ONBOARDING, Onboarding} from '@infrastructure/onboarding/onboarding';\nimport {OnboardingPlanningStep} from '@presentation/components/onboarding-dialog/onboarding-planning-step.enum';\nimport {OnboardingType} from '@presentation/components/onboarding-dialog/onboarding-type';\nimport {EnumUtils, PlanningDragDropService, PlanningGridComponent, PlanningItemData, TranslateService} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {PlanningSidebarsComponent} from '../sidebars/planning-sidebars.component';\nimport {PlanningContextService} from './planning-context.service';\n\n@Injectable()\nexport class PlanningOnboardingService {\n public readonly DEMO_ITEM_ID = -1;\n public demoPlanningItem: ElementRef;\n public currentOnboardingStep: OnboardingPlanningStep;\n\n private gridDisplay: PlanningGridComponent;\n private planningSidebars: PlanningSidebarsComponent;\n\n public constructor(\n private readonly translate: TranslateService,\n private readonly planningDragDrop: PlanningDragDropService,\n @Inject(ONBOARDING) private readonly onboarding: Onboarding,\n private readonly planningContext: PlanningContextService\n ) {}\n\n public initializeOnboarding(gridDisplay: PlanningGridComponent, planningSidebars: PlanningSidebarsComponent): void {\n this.gridDisplay = gridDisplay;\n this.planningSidebars = planningSidebars;\n }\n\n public startOnboarding(): void {\n if (!this.onboarding.canStartOnboarding(OnboardingType.PLANNING)) {\n return;\n }\n\n this.planningContext.isOnboardingRunning = true;\n const dialogDate = moment().startOf('day').add(45, 'h').toDate();\n\n this.onboarding.start({\n sourceElement: this.createStubHtmlElement(414, dialogDate),\n type: OnboardingType.PLANNING,\n position: PositionOfDialog.RIGHT,\n steps: EnumUtils.getEnumValues(OnboardingPlanningStep),\n onNextStep: (updateOnboardingDialog: (targetElement: HTMLElement, leftPositionInPx?: number) => void, currentOnboardingStep: OnboardingPlanningStep) => {\n this.currentOnboardingStep = currentOnboardingStep;\n\n if (currentOnboardingStep === OnboardingPlanningStep.ADD_ITEM) {\n this.handleOnboardingAddItemStep(updateOnboardingDialog);\n } else if (currentOnboardingStep === OnboardingPlanningStep.VIEW_DETAILS) {\n this.handleOnboardingViewDetailsStep(updateOnboardingDialog);\n } else if (currentOnboardingStep === OnboardingPlanningStep.DRAG_AND_DROP) {\n this.handleOnboardingDragAndDropStep(updateOnboardingDialog);\n }\n },\n onCompleted: () => {\n this.handleOnboardingCompletion();\n }\n });\n }\n\n private handleOnboardingAddItemStep(updateOnboardingDialog: (targetElement: HTMLElement) => void): void {\n this.planningContext.machines.unshift(\n new PlanningMachine({\n id: this.DEMO_ITEM_ID,\n name: this.getDemoEntityTranslation('MACHINE.MACHINE'),\n machineType: MachineType.CARPET_LOOM,\n group: this.planningContext.machines.find((machine: PlanningMachine) => machine?.group).group,\n activeQuality: null,\n activeCreel: null,\n activeWeaveProduct: null,\n activeTuftProduct: null,\n messages: []\n })\n );\n\n const dialogDate = moment().startOf('day').add(45, 'h').toDate();\n updateOnboardingDialog(this.createStubHtmlElement(320, dialogDate));\n }\n\n private handleOnboardingViewDetailsStep(updateOnboardingDialog: (targetElement: HTMLElement) => void): void {\n const endDate = moment().startOf('day').add(3, 'days').toDate();\n const startDate = moment().startOf('day').add(1, 'days').toDate();\n\n const creelName = this.getDemoEntityTranslation('TEXTILE_DATA.CREEL.CREEL');\n const orderName = this.getDemoEntityTranslation('PLANNING.PLANNING_ORDER');\n const machineQualityName = this.getDemoEntityTranslation('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY');\n\n const creelForDemoMachine = new PlanningCreel(this.DEMO_ITEM_ID, creelName);\n const machineQualityForDemoMachine = new PlanningMachineQuality(this.DEMO_ITEM_ID, machineQualityName, 1);\n const productionOrderForDemoMachine = new ProductionOrderCarpetForPlanningOrder(this.DEMO_ITEM_ID, orderName, null, ProductionScheduleStatus.EXECUTED);\n\n const planningOrderForDemoMachine = new PlanningOrder(this.DEMO_ITEM_ID, startDate, endDate, null, productionOrderForDemoMachine);\n const planningItemForDemoMachine = new PlanningMachineCarpetRun(this.DEMO_ITEM_ID, machineQualityForDemoMachine, creelForDemoMachine, [planningOrderForDemoMachine], startDate, endDate, true);\n const calendarItemGroupForDemoMachine = new CalendarItemGroup(this.DEMO_ITEM_ID, [planningItemForDemoMachine]);\n\n this.planningContext.groupedCalendarItems.push(calendarItemGroupForDemoMachine);\n\n const demoMachine = this.planningContext.machines.find((machine: PlanningMachine) => machine.id === this.DEMO_ITEM_ID);\n this.planningSidebars.openPlanningItemDetails(demoMachine, planningItemForDemoMachine);\n\n const dialogDate = moment(startDate).add(1, 'd').toDate();\n updateOnboardingDialog(this.createStubHtmlElement(320, dialogDate));\n }\n\n private handleOnboardingDragAndDropStep(updateOnboardingDialog: (targetElement: HTMLElement) => void): void {\n const hourInterval = 6;\n const demoMachineGroup = this.planningContext.groupedCalendarItems.find((group: CalendarItemGroup) => group.machineId === this.DEMO_ITEM_ID);\n const demoPlanningItem = demoMachineGroup.items[0] as PlanningMachineRun;\n\n const newEndDate = moment(demoPlanningItem.endDate).add(hourInterval, 'hours').toDate();\n const newStartDate = moment(demoPlanningItem.startDate).add(hourInterval, 'hours').toDate();\n\n this.planningSidebars.closeSidebar();\n demoPlanningItem.reschedule(newStartDate, newEndDate);\n\n const planningItemData = new PlanningItemData();\n planningItemData.dataTransfer = demoPlanningItem;\n\n const stopPropagation = (): void => {\n return;\n };\n\n const dialogDate = moment(newStartDate).add(1, 'd').toDate();\n updateOnboardingDialog(this.createStubHtmlElement(320, dialogDate));\n\n const positionX = (this.gridDisplay.getLeftPercentForDate(newStartDate) / 100) * this.gridDisplay.rowWidth + this.gridDisplay.ROW_INDICATOR_WIDTH;\n const positionY = this.gridDisplay.bodyContainerOffset.y + this.gridDisplay.COLUMN_HEADER_HEIGHT + 12;\n\n const dragEvent = {clientX: 0, clientY: positionY, offsetX: 0, offsetY: 0, stopPropagation} as any as DragEvent;\n\n this.planningDragDrop.onDragStart(dragEvent, planningItemData, null, null, 250, {x: positionX, y: 0}, undefined, this.gridDisplay);\n }\n\n private handleOnboardingCompletion(): void {\n this.planningContext.isOnboardingRunning = false;\n this.planningSidebars.closeSidebar(true);\n\n (this.planningDragDrop as any).hourIndicator?.hide();\n\n this.planningContext.machines = this.planningContext.machines.filter((machine: PlanningMachine) => machine.id !== this.DEMO_ITEM_ID);\n this.planningContext.machinesForSelectedPlanningGroups = this.planningContext.machinesForSelectedPlanningGroups.filter((machine: PlanningMachine) => machine.id !== this.DEMO_ITEM_ID);\n\n this.planningContext.groupedCalendarItems = this.planningContext.groupedCalendarItems.filter((group: CalendarItemGroup) => group.machineId !== this.DEMO_ITEM_ID);\n }\n\n private getDemoEntityTranslation(entityKey: string): string {\n return this.translate.instant('GENERAL.DEMO_ENTITY', {entity: this.translate.instant(entityKey, {count: 1}).toLowerCase()});\n }\n\n private createStubHtmlElement(top: number, date: Date): HTMLElement {\n this.gridDisplay.calculateRowWidth();\n this.gridDisplay.calculateBodyContainerOffset();\n const right = this.gridDisplay.bodyContainerOffset.x + (this.gridDisplay.getLeftPercentForDate(date) / 100) * this.gridDisplay.rowWidth + this.gridDisplay.ROW_INDICATOR_WIDTH;\n\n return {\n getBoundingClientRect(): DOMRect {\n return {top, right, width: 10, height: 10} as DOMRect;\n },\n scrollIntoView(_: boolean): void {\n return;\n }\n } as any as HTMLElement;\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {DateRange} from '@domain/date-range';\nimport {CalendarItem} from '@domain/planning/calendar-item';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningItemType} from '@domain/planning/planning-item-type.enum';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {DeletedPlanningItem} from '@infrastructure/signalr/planning/deleted-planning-item';\nimport {moment, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {PLANNING_SCHEDULER, PlanningScheduler} from '../planning-scheduler/planning-scheduler';\nimport {PlanningSidebarManager} from '../sidebars/planning-sidebar-manager';\nimport {PlanningSidebarsComponent} from '../sidebars/planning-sidebars.component';\nimport {PlanningContextService} from './planning-context.service';\n\n@Injectable()\nexport class PlanningRealtimeChangesService {\n public selectedDateRange: DateRange;\n private planningSideBars: PlanningSidebarsComponent;\n private planningSidebarManager: PlanningSidebarManager;\n\n public constructor(\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly planningContext: PlanningContextService,\n @Inject(PLANNING_SCHEDULER) private readonly planningScheduler: PlanningScheduler\n ) {}\n\n public initialize(dateRange: DateRange, sidebarManager: PlanningSidebarManager, sideBars: PlanningSidebarsComponent): void {\n this.planningSideBars = sideBars;\n this.selectedDateRange = dateRange;\n this.planningSidebarManager = sidebarManager;\n }\n\n public updateGroupedCalendarItems(updatedGroupedCalendarItems: CalendarItemGroup[]): void {\n for (const updatedGroupedCalendarItem of updatedGroupedCalendarItems) {\n const calendarItems = updatedGroupedCalendarItem.items.map((item: CalendarItem) => item as PlanningItem);\n\n for (const planningItem of calendarItems) {\n if (this.isItemSelectedItem(planningItem)) {\n continue;\n }\n\n if (this.isItemInSelectedRange(planningItem)) {\n this.removeOutdatedPlanningItem(planningItem.uniqueId, (group: CalendarItemGroup) => group.machineId !== updatedGroupedCalendarItem.machineId);\n const groupedCalendarItemToUpdate = this.planningContext.groupedCalendarItems.find((group: CalendarItemGroup) => group.machineId === updatedGroupedCalendarItem.machineId);\n\n if (groupedCalendarItemToUpdate != null) {\n this.updateItemInCalendarItemGroup(groupedCalendarItemToUpdate, planningItem);\n }\n } else {\n this.removeOutdatedPlanningItem(planningItem.uniqueId, () => true);\n }\n }\n }\n this.planningScheduler.setGroupedCalendarItems(this.planningContext.groupedCalendarItems);\n }\n\n public removeOutdatedPlanningItem(planningItemUniqueId: string, predicate: (groupedCalendarItem: CalendarItemGroup) => boolean): void {\n for (const groupedCalendarItem of this.planningContext.groupedCalendarItems) {\n if (predicate(groupedCalendarItem)) {\n groupedCalendarItem.items = groupedCalendarItem.items.filter((item: PlanningItem) => item.uniqueId !== planningItemUniqueId);\n }\n }\n }\n\n public updateItemInCalendarItemGroup(groupedCalendarItem: CalendarItemGroup, updateItem: PlanningItem): void {\n groupedCalendarItem.items = groupedCalendarItem.items.filter((item: CalendarItem) => item.id != null);\n const planningItemIndex = groupedCalendarItem.items.findIndex((item: PlanningItem) => item.uniqueId === updateItem.uniqueId);\n\n if (planningItemIndex === -1) {\n groupedCalendarItem.items.push(updateItem);\n } else {\n groupedCalendarItem.items[planningItemIndex] = updateItem;\n }\n }\n\n public removePlanningItemFromGroupedCalendarItems(deletedItem: DeletedPlanningItem): void {\n for (const calendarItemGroup of this.planningContext.groupedCalendarItems) {\n const originalSize = calendarItemGroup.items.length;\n calendarItemGroup.items = calendarItemGroup.items.filter((item: PlanningItem) => PlanningItemType[item.type] !== deletedItem.type || item.id !== deletedItem.id);\n\n if (originalSize > calendarItemGroup.items.length) {\n break;\n }\n }\n\n if (this.planningSidebarManager.isSidebarTypePlanningItem()) {\n this.planningSideBars.closeSidebar();\n }\n\n this.planningScheduler.setGroupedCalendarItems(this.planningContext.groupedCalendarItems);\n this.planningContext.groupedCalendarItems = this.planningContext.groupedCalendarItems.slice();\n }\n\n public showToastForDeletedPlanningItem(type: string): void {\n this.toastService.showInfo({\n timeOut: 3000,\n tapToDismiss: false,\n message: this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT', {object: this.translate.instant(`PLANNING.ADD_ITEM.TYPES.${type}`)})\n });\n }\n\n public updatePlanningOrderStatus(id: number, status: ProductionScheduleStatus, isWeaving: boolean): void {\n const calendarItems = this.planningContext.groupedCalendarItems.flatMap((group: CalendarItemGroup) => group.items);\n\n for (const calendarItem of calendarItems) {\n const planningItem = calendarItem as PlanningItem;\n\n if (planningItem instanceof PlanningMachineRun) {\n const ordersFilteredByType = planningItem.planningOrders.filter((order: PlanningOrder) => order.isWeavingOrder === isWeaving);\n const foundPlanningOrder = ordersFilteredByType.find((order: PlanningOrder) => order.productionOrder.id === id);\n\n if (foundPlanningOrder) {\n foundPlanningOrder.productionOrder.status = status;\n }\n }\n }\n }\n\n private isItemInSelectedRange(planningItem: PlanningItem): boolean {\n return moment.range(this.selectedDateRange).overlaps(moment.range(planningItem.startDate, planningItem.endDate));\n }\n\n private isItemSelectedItem(planningItem: PlanningItem): boolean {\n return planningItem.id === this.planningContext.selectedPlanningItem?.id;\n }\n}\n","import {SidebarSize} from '@application/sidebar/sidebar-size.enum';\nimport {isEqual} from 'lodash-es';\nimport {PlanningSidebarType} from './planning-sidebar-type.enum';\n\nexport class PlanningSidebarManager {\n private _opened: boolean;\n private _type: PlanningSidebarType;\n private _size: SidebarSize;\n\n public constructor() {\n this.initialize();\n }\n\n public get opened(): boolean {\n return this._opened;\n }\n\n public get type(): PlanningSidebarType {\n return this._type;\n }\n\n public get size(): SidebarSize {\n return this._size;\n }\n\n public open(type: PlanningSidebarType, size: SidebarSize = SidebarSize.SMALL): void {\n this._opened = true;\n this._type = type;\n\n if (isEqual(size, SidebarSize.SMALL)) {\n this.setSidebarSizeAsSmall();\n } else {\n this.setSidebarSizeAsLarge();\n }\n }\n\n public close(): void {\n this.initialize();\n }\n\n public setSidebarSizeAsSmall(): void {\n this._size = SidebarSize.SMALL;\n }\n\n public setSidebarSizeAsLarge(): void {\n this._size = SidebarSize.LARGE;\n }\n\n public isSidebarTypeMachine(): boolean {\n return isEqual(this._type, PlanningSidebarType.MACHINE);\n }\n\n public isSidebarTypePlanningItem(): boolean {\n return isEqual(this._type, PlanningSidebarType.PLANNING_ITEM);\n }\n\n public isSidebarTypePlanningOrder(): boolean {\n return isEqual(this._type, PlanningSidebarType.PLANNING_ORDER);\n }\n\n public isSidebarTypeNeedsAttention(): boolean {\n return isEqual(this._type, PlanningSidebarType.NEEDS_ATTENTION);\n }\n\n private initialize(): void {\n this._opened = false;\n this._type = null;\n this._size = SidebarSize.SMALL;\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","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {DateRange} from '@domain/date-range';\nimport {MachineGroup} from '@domain/machine/machine-group';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {Regime} from '@domain/machine/regime';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineMaintenance} from '@domain/planning/planning-machine-maintenance';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {MACHINE_OVERVIEW, MachineOverview} from '@infrastructure/http/machine-overview/machine-overview';\nimport {PLANNING, Planning} from '@infrastructure/http/planning/planning';\nimport {DeletedPlanningItem} from '@infrastructure/signalr/planning/deleted-planning-item';\nimport {REALTIME_PLANNING, RealtimePlanning} from '@infrastructure/signalr/planning/realtime-planning';\nimport {ProductionOrderLiteStatusChange} from '@infrastructure/signalr/production-order-lite/production-order-lite-status-change';\nimport {REALTIME_PRODUCTION_ORDER_LITE, RealtimeProductionOrderLite} from '@infrastructure/signalr/production-order-lite/realtime-production-order-lite';\nimport {ProductionOrderStatusChange} from '@infrastructure/signalr/production-order/production-order-status-change';\nimport {REALTIME_PRODUCTION_ORDER, RealtimeProductionOrder} from '@infrastructure/signalr/production-order/realtime-production-order';\nimport {ArrayUtils, AssertionUtils, BaseComponent, LocalStorageService, moment, SelectionListItem, TranslateService} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {takeUntil} from 'rxjs';\nimport {MachineFilterSettingsComponent} from './machine-filter-settings/machine-filter-settings.component';\nimport {NavigationPlanningData} from './navigation-planning-data.type';\nimport {PlanningDateRangeData} from './planning-date-rage-data.interface';\nimport {PLANNING_SCHEDULER, PlanningScheduler} from './planning-scheduler/planning-scheduler';\nimport {PlanningContextService} from './planning-services/planning-context.service';\nimport {PlanningOnboardingService} from './planning-services/planning-onboarding.service';\nimport {PlanningRealtimeChangesService} from './planning-services/planning-realtime-changes.service';\nimport {PlanningSidebarManager} from './sidebars/planning-sidebar-manager';\nimport {PlanningSidebarsComponent} from './sidebars/planning-sidebars.component';\n\n@Component({\n selector: 'app-planning',\n templateUrl: './planning.component.html',\n styleUrls: ['./planning.component.scss']\n})\nexport class PlanningComponent extends BaseComponent implements OnInit {\n @ViewChild(PlanningSidebarsComponent) public planningSideBars: PlanningSidebarsComponent;\n\n public regimes: Regime[];\n public loadingMachines = true;\n public fallbackMachineGroupId: number;\n public planningSidebarManager = new PlanningSidebarManager();\n public selectedDateRange: DateRange = [moment().startOf('day').toDate(), moment().endOf('day').add(4, 'days').toDate()];\n public readonly machineFilterSettingsComponent = MachineFilterSettingsComponent;\n private planningGroupFilter: SelectionListItem[] = [];\n private currentSubscription: Subscription;\n private readonly MACHINES_FILTER_KEY = 'planning.machineFilter';\n private readonly CARPET_QUEUE_PERMISSION = Permission.TEXFAB_CARPET_QUEUE;\n private readonly WEAVE_QUEUE_PERMISSION = Permission.TEXFAB_WEAVE_QUEUE;\n private readonly TUFT_QUEUE_PERMISSION = Permission.TEXFAB_TUFT_QUEUE;\n\n public constructor(\n private readonly router: Router,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(PLANNING) private readonly planning: Planning,\n public readonly planningContext: PlanningContextService,\n private readonly planningOnboarding: PlanningOnboardingService,\n private readonly realtimeChanges: PlanningRealtimeChangesService,\n private readonly localStorage: LocalStorageService,\n private readonly translate: TranslateService,\n @Inject(MACHINE_OVERVIEW) private readonly machineOverview: MachineOverview,\n @Inject(REALTIME_PLANNING) private readonly realtimePlanning: RealtimePlanning,\n @Inject(PLANNING_SCHEDULER) private readonly planningScheduler: PlanningScheduler,\n @Inject(REALTIME_PRODUCTION_ORDER) private readonly realtimeProductionOrder: RealtimeProductionOrder,\n @Inject(REALTIME_PRODUCTION_ORDER_LITE) private readonly realtimeProductionOrderLite: RealtimeProductionOrderLite,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.getRegimes();\n this.getMachines();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({\n dateRange: this.selectedDateRange\n });\n }\n\n public canShowNoDataOverlay(): boolean {\n return !this.loadingMachines && this.planningContext.machines.length === 0;\n }\n\n public onMachineFilterChanged(selectedGroups: SelectionListItem[]): void {\n this.storePlanningGroupFilter(selectedGroups);\n this.planningGroupFilter = selectedGroups;\n this.updateMachinesForSelectedPlanningGroupsList();\n }\n\n public getMachineFilterDialogData(): {options: SelectionListItem[]} {\n return {options: this.planningGroupFilter};\n }\n\n public showMachineFilterButton(): boolean {\n return this.planningGroupFilter?.length > 1;\n }\n\n public canShowOpenNeedsAttentionOrders(): boolean {\n const permissions = [this.CARPET_QUEUE_PERMISSION, this.WEAVE_QUEUE_PERMISSION, this.TUFT_QUEUE_PERMISSION];\n return this.currentSubscription.hasAtLeastOneOfThePermissions(permissions);\n }\n\n private getMachines(): void {\n this.planning\n .getMachines()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (machines: PlanningMachine[]) => {\n if (AssertionUtils.isEmpty(machines)) {\n this.planningGroupFilter = [];\n this.planningContext.machines = machines;\n this.loadingMachines = false;\n this.updatePlanningGroupFilter();\n return;\n }\n\n this.planningContext.machines = machines;\n\n this.subscribeToPlanningChanges();\n this.planningScheduler.getPlanning([this.selectedDateRange[0], this.selectedDateRange[1]]);\n\n const reverseMachines: PlanningMachine[] = [].concat(this.planningContext.machines).reverse();\n const lastMachineWithGroup = reverseMachines.find((machine: PlanningMachine) => !AssertionUtils.isNullOrUndefined(machine.group));\n this.fallbackMachineGroupId = lastMachineWithGroup != null ? lastMachineWithGroup.group.id + 1 : 0;\n\n this.planningContext.machines.sort(PlanningMachine.compare);\n this.loadingMachines = false;\n this.updatePlanningGroupFilter();\n },\n error: () => (this.loadingMachines = false)\n });\n }\n\n private subscribeToPlanningChanges(): void {\n let initialized = false;\n let onboardingStarted = false;\n\n this.planningScheduler\n .onPlanningChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((groupedCalendarItems: CalendarItemGroup[]) => {\n if (AssertionUtils.isEmpty(groupedCalendarItems)) {\n return;\n }\n\n this.planningContext.groupedCalendarItems = groupedCalendarItems;\n const planningGridDisplayParentXPosition = this.planningContext.planningGridDisplay.bodyContainer.nativeElement.parentElement.getBoundingClientRect().x;\n\n if (!initialized) {\n this.initializeRealtimeChangesService();\n\n if (planningGridDisplayParentXPosition > 0) {\n this.initializeAndStartOnboarding();\n onboardingStarted = true;\n }\n\n initialized = true;\n }\n\n if (planningGridDisplayParentXPosition > 0 && !onboardingStarted) {\n this.initializeAndStartOnboarding();\n onboardingStarted = true;\n }\n });\n }\n\n private initializeAndStartOnboarding(): void {\n this.planningOnboarding.initializeOnboarding(this.planningContext.planningGridDisplay, this.planningSideBars);\n this.planningOnboarding.startOnboarding();\n }\n\n private getRegimes(): void {\n this.machineOverview\n .getListOfCustomSettings()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineOverviewSettings: PropertyValue[]) => {\n const regimesValue = machineOverviewSettings.find((propertyValue: PropertyValue) => propertyValue.propertyName === 'regimes');\n this.regimes = regimesValue.propertyValue;\n });\n }\n\n public navigateToTexFab(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.absolutePath);\n }\n\n public selectedDateRangeChanged(dateRange: DateRange): void {\n if (dateRange[0].getTime() !== this.selectedDateRange[0].getTime() || dateRange[1].getTime() !== this.selectedDateRange[1].getTime()) {\n this.selectedDateRange = dateRange;\n this.realtimeChanges.selectedDateRange = dateRange;\n this.planningScheduler.getPlanning(this.selectedDateRange);\n }\n }\n\n public addPlaceholder({event, rowIndex, date}: {event: PointerEvent; rowIndex: number; date: Date}): void {\n const selectedMachine = this.planningContext.machinesForSelectedPlanningGroups[rowIndex];\n const canAddItem = selectedMachine != null && !this.planningSidebarManager.opened && date > this.planningContext.getCurrentDateForSubscriptionTimezone();\n\n if (canAddItem && this.canAddItemForMachineType(selectedMachine.machineType)) {\n this.planningContext.selectedPlaceholder = new PlanningMachineMaintenance(null, date, moment(date).add(1, 'h').toDate());\n this.planningSideBars.openPlanningItemDetails(selectedMachine, this.planningContext.selectedPlaceholder);\n event?.stopImmediatePropagation();\n }\n }\n\n private canAddItemForMachineType(machineType: MachineType): boolean {\n switch (machineType) {\n case MachineType.CARPET_LOOM:\n case MachineType.VELVET:\n return this.currentSubscription?.hasPermission(this.CARPET_QUEUE_PERMISSION);\n case MachineType.TUFT:\n return this.currentSubscription?.hasPermission(this.TUFT_QUEUE_PERMISSION);\n case MachineType.WEAVING_MACHINE:\n return this.currentSubscription?.hasPermission(this.WEAVE_QUEUE_PERMISSION);\n default:\n return true;\n }\n }\n\n private initializeRealtimeChangesService(): void {\n this.realtimeChanges.initialize(this.selectedDateRange, this.planningSidebarManager, this.planningSideBars);\n\n this.subscribeToRealtimePlanningChanges();\n this.subscribeToRealtimeDeletedPlanningItems();\n this.subscribeToRealtimeProductionOrderStatusChanges();\n this.subscribeToRealtimeProductionOrderLiteStatusChanges();\n }\n\n private subscribeToRealtimePlanningChanges(): void {\n this.realtimePlanning\n .getPlanningChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((updatedGroupedCalendarItems: CalendarItemGroup[]) => {\n if (!this.planningContext.isOnboardingRunning) {\n this.realtimeChanges.updateGroupedCalendarItems(updatedGroupedCalendarItems);\n }\n });\n }\n\n private subscribeToRealtimeDeletedPlanningItems(): void {\n this.realtimePlanning\n .getDeletedPlanningItem()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((deletedPlanningItem: DeletedPlanningItem) => {\n if (!this.planningContext.isDragAndDropActive || deletedPlanningItem.id !== this.planningContext.selectedPlanningItem?.id) {\n this.realtimeChanges.removePlanningItemFromGroupedCalendarItems(deletedPlanningItem);\n this.realtimeChanges.showToastForDeletedPlanningItem(deletedPlanningItem.type);\n }\n });\n }\n\n private subscribeToRealtimeProductionOrderStatusChanges(): void {\n this.realtimeProductionOrder\n .getProductionOrdersStatusChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionOrderStatusChange: ProductionOrderStatusChange) => {\n this.realtimeChanges.updatePlanningOrderStatus(productionOrderStatusChange.id, productionOrderStatusChange.status, false);\n });\n }\n\n private subscribeToRealtimeProductionOrderLiteStatusChanges(): void {\n this.realtimeProductionOrderLite\n .getProductionOrdersLiteStatusChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionOrderLiteStatusChange: ProductionOrderLiteStatusChange) =>\n this.realtimeChanges.updatePlanningOrderStatus(productionOrderLiteStatusChange.id, productionOrderLiteStatusChange.status, true)\n );\n }\n\n private updatePlanningGroupFilter(): void {\n const storedFilter = this.getStoredPlanningGroupFilter();\n let allGroups = ArrayUtils.distinctBy(\n this.planningContext.machines.map((machine: PlanningMachine) => machine.group),\n (group: MachineGroup) => group?.id\n );\n allGroups.sort(MachineGroup.compare);\n const undefinedIndex = allGroups.findIndex((group: MachineGroup) => AssertionUtils.isNullOrUndefined(group));\n if (undefinedIndex > -1) {\n allGroups[undefinedIndex] = new MachineGroup(this.fallbackMachineGroupId, this.translate.instant('PLANNING.NO_PLANNING_GROUP'));\n }\n\n allGroups = allGroups.filter((group: MachineGroup) => !AssertionUtils.isNullOrUndefined(group.name));\n\n this.planningGroupFilter = allGroups.map((group: MachineGroup) => ({\n name: group.name,\n value: storedFilter?.find((selectionItem: SelectionListItem) => selectionItem.name === group.name)?.value ?? false\n }));\n this.updateMachinesForSelectedPlanningGroupsList();\n }\n\n private updateMachinesForSelectedPlanningGroupsList(): void {\n const enabledGroups = this.planningGroupFilter?.filter((item: SelectionListItem) => item.value).map((item: SelectionListItem) => item.name);\n if (enabledGroups?.length <= 0) {\n this.planningContext.machinesForSelectedPlanningGroups = this.planningContext.machines;\n\n this.getNavigationData();\n return;\n }\n\n const fallbackGroupName = this.translate.instant('PLANNING.NO_PLANNING_GROUP');\n this.planningContext.machinesForSelectedPlanningGroups = this.planningContext.machines?.filter((machine: PlanningMachine) => enabledGroups.includes(machine.group?.name ?? fallbackGroupName));\n }\n\n private getStoredPlanningGroupFilter(): SelectionListItem[] {\n return this.localStorage.get(this.MACHINES_FILTER_KEY);\n }\n\n private storePlanningGroupFilter(value: SelectionListItem[]): void {\n this.localStorage.set(this.MACHINES_FILTER_KEY, value);\n }\n\n private getNavigationData(): void {\n const emptyDateRangeState = {dateRange: null} as PlanningDateRangeData;\n const dateRangeState = this.navigationHelperService.getPartialState(Object.keys(emptyDateRangeState));\n\n if (dateRangeState && !isEqual(emptyDateRangeState, dateRangeState)) {\n this.selectedDateRangeChanged(dateRangeState.dateRange);\n }\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {PlanningComponent} from './planning.component';\n\nexport const planningRoutes = [Factory.createPrototypeComponentRoute(PlanningComponent, {route: '', requiredPermission: null, id: NavigationId.PLANNING, parentId: NavigationId.PLANNING_MODULE})];\n\nexport const planningRouting: ModuleWithProviders = RouterModule.forChild(planningRoutes);\n","

\n\n

\n\n

\n

\n {{ plannedAmountText }}\n

\n","import {Component, Input} from '@angular/core';\nimport {ProductionOrderCarpetForPlanningOrder} from '@domain/planning/carpet/production-order-carpet-for-planning-order';\nimport {PlanningOrderData} from '@domain/planning/planning-order-data';\nimport {ProductionOrderTuftingForPlanningOrder} from '@domain/planning/tufting/production-order-tufting-for-planning-order';\nimport {ProductionOrderWeavingForPlanningOrder} from '@domain/planning/weaving/production-order-weaving-for-planning-order';\nimport {DateTimeFormat, DateTimePipe, TranslateService} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-order-info',\n templateUrl: './order-info.component.html',\n styleUrls: ['./order-info.component.scss']\n})\nexport class OrderInfoComponent {\n @Input() public orderData: PlanningOrderData;\n\n public constructor(\n private readonly translate: TranslateService,\n private readonly dateTimePipe: DateTimePipe\n ) {}\n\n public get productionOrderCarpet(): ProductionOrderCarpetForPlanningOrder {\n return this.orderData instanceof ProductionOrderCarpetForPlanningOrder && this.orderData;\n }\n\n public get productionOrderWeaving(): ProductionOrderWeavingForPlanningOrder {\n return this.orderData instanceof ProductionOrderWeavingForPlanningOrder && this.orderData;\n }\n\n public get productionOrderTufting(): ProductionOrderTuftingForPlanningOrder {\n return this.orderData instanceof ProductionOrderTuftingForPlanningOrder && this.orderData;\n }\n\n public get yieldUnit(): string {\n if (this.productionOrderCarpet) {\n return 'GENERAL.UNIT.PICKS';\n }\n if (this.productionOrderWeaving || this.productionOrderTufting) {\n return 'GENERAL.UNIT.METER';\n }\n return '';\n }\n\n public get yieldUnitShouldHaveASpace(): boolean {\n return !!this.productionOrderCarpet;\n }\n\n public get plannedAmountText(): string {\n return `${this.orderData.yield.planned}${this.yieldUnitShouldHaveASpace ? ' ' : ''}${this.translate.instant(this.yieldUnit)}`;\n }\n\n public get dueDateAndPlannedAmountText(): string {\n const dueDateText = this.translate.instant('PLANNING.NEEDS_ATTENTION.DUE_AT', this.dateTimePipe.transform(this.orderData.dueDate, DateTimeFormat.DATE_SHORT));\n return `${dueDateText} - ${this.plannedAmountText}`;\n }\n\n public get ellipsisLabelText(): string {\n if (this.productionOrderCarpet) {\n return `${this.productionOrderCarpet.machineQuality.technicalName}/${this.productionOrderCarpet.creel.name}`;\n }\n if (this.productionOrderWeaving) {\n return this.productionOrderWeaving.weaveProduct.name;\n }\n return this.productionOrderTufting.tuftProduct.name;\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ProductionOrderCarpetForPlanningOrder} from '@domain/planning/carpet/production-order-carpet-for-planning-order';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {ConfirmProductionScheduleOnDesktopCommand} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-command';\nimport {ConfirmProductionScheduleOnDesktopResult} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result';\nimport {AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {finalize, takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-planned-order-card',\n templateUrl: './planned-order-card.component.html',\n styleUrls: ['./planned-order-card.component.scss']\n})\nexport class PlannedOrderCardComponent extends BaseComponent {\n @Input() public plannedOrder: ProductionOrderCarpetForPlanningOrder;\n @Output() public plannedOrderReconfirmed: EventEmitter = new EventEmitter();\n @Output() public viewPlannedOrderDetails: EventEmitter = new EventEmitter();\n\n private productionOrdersCustomSettings: ProductionOrderCustomSettings;\n private reconfirming = false;\n\n private readonly confirmProductionScheduleOnDesktopCommand: ConfirmProductionScheduleOnDesktopCommand;\n\n public constructor(\n private readonly httpProductionOrderCustomSettings: HttpProductionOrdersCustomSettingsService,\n confirmProductionScheduleOnDesktopCommand: ConfirmProductionScheduleOnDesktopCommand\n ) {\n super();\n\n this.confirmProductionScheduleOnDesktopCommand = confirmProductionScheduleOnDesktopCommand;\n }\n\n public reconfirm(): void {\n if (!this.reconfirming) {\n this.reconfirming = true;\n if (AssertionUtils.isNullOrUndefined(this.productionOrdersCustomSettings)) {\n this.httpProductionOrderCustomSettings\n .get()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionOrderCustomSettings: ProductionOrderCustomSettings) => {\n this.productionOrdersCustomSettings = productionOrderCustomSettings;\n this.getAndReconfirmProductionOrder();\n });\n } else {\n this.getAndReconfirmProductionOrder();\n }\n }\n }\n\n public viewDetails(): void {\n this.viewPlannedOrderDetails.emit();\n }\n\n private getAndReconfirmProductionOrder(): void {\n this.confirmProductionScheduleOnDesktopCommand\n .getAndConfirmProductionSchedule(this.plannedOrder.id, this.productionOrdersCustomSettings)\n .pipe(\n finalize(() => (this.reconfirming = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((confirmProductionScheduleOnDesktopResult: ConfirmProductionScheduleOnDesktopResult) => {\n if (isEqual(confirmProductionScheduleOnDesktopResult, ConfirmProductionScheduleOnDesktopResult.CONFIRMED)) {\n this.plannedOrderReconfirmed.emit();\n }\n });\n }\n}\n","
\n \n

{{ 'PLANNING.ACTIONS.RECONFIRM' | bmsTranslate }}

\n \n
\n","import {Component, EventEmitter, HostBinding, Input, Output} from '@angular/core';\nimport {PlanningOrderData} from '@domain/planning/planning-order-data';\n\n@Component({\n selector: 'app-unplanned-order-card',\n templateUrl: './unplanned-order-card.component.html',\n styleUrls: ['./unplanned-order-card.component.scss']\n})\nexport class UnplannedOrderCardComponent {\n @Input() public unplannedOrder: PlanningOrderData;\n @Output() public deleteUnplannedOrder: EventEmitter = new EventEmitter();\n @Output() public unplannedOrderDragStart: EventEmitter = new EventEmitter();\n @Output() public unplannedOrderDrag: EventEmitter = new EventEmitter();\n @Output() public unplannedOrderDragEnd: EventEmitter = new EventEmitter();\n\n @HostBinding('class.is-being-dragged') public isBeingDragged = false;\n\n public delete(): void {\n this.deleteUnplannedOrder.emit();\n }\n\n public onDragStart(event: DragEvent): void {\n this.isBeingDragged = true;\n this.unplannedOrderDragStart.emit(event);\n }\n\n public onDrag(event: DragEvent): void {\n this.unplannedOrderDrag.emit(event);\n }\n\n public onDragEnd(): void {\n this.isBeingDragged = false;\n this.unplannedOrderDragEnd.emit();\n }\n}\n","
\n \n
\n
\n \n

\n {{ 'PLANNING.NEEDS_ATTENTION.TO_PLAN' | bmsTranslate | uppercase }}\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","import {Component, EventEmitter, Inject, OnInit, Output, ViewChild} from '@angular/core';\nimport {AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {NeedsAttentionItem} from '@domain/planning/needs-attention-item';\nimport {PlanningOrderData} from '@domain/planning/planning-order-data';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {PropertyValue} from '@domain/property-value';\nimport {PLANNING, Planning} from '@infrastructure/http/planning/planning';\nimport {PRODUCTION_ORDERS_WEAVING, ProductionOrdersWeaving} from '@infrastructure/http/production-order-weaving/production-orders-weaving';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {HttpTuftProductionOrdersService} from '@infrastructure/http/tuft-production-order/http-tuft-production-orders.service';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {AdvancedSearchDialogComponent} from '@presentation/components/search-filters/advanced-search/dialog/advanced-search-dialog.component';\nimport {SearchFiltersComponent} from '@presentation/components/search-filters/search-filters.component';\nimport {ConfirmProductionOrderDeletionCommand} from '@presentation/pages/texfab/planning/confirm-production-order-deletion/confirm-production-order-deletion-command';\nimport {AssertionUtils, BaseComponent, DialogBuilderFactoryService, FilterComponent, TranslateService} from '@vdw/angular-component-library';\nimport {cloneDeep, find, isEmpty} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {debounceTime, finalize, takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-needs-attention-sidebar',\n templateUrl: './needs-attention-sidebar.component.html',\n styleUrls: ['./needs-attention-sidebar.component.scss']\n})\nexport class NeedsAttentionSidebarComponent extends BaseComponent implements OnInit {\n @Output() public closeNeedsAttentionSidebar: EventEmitter = new EventEmitter();\n @Output() public unplannedOrderDragStart: EventEmitter<{event: DragEvent; unplannedOrder: PlanningOrderData}> = new EventEmitter<{\n event: DragEvent;\n unplannedOrder: PlanningOrderData;\n }>();\n\n @Output() public unplannedOrderDrag: EventEmitter = new EventEmitter();\n @Output() public unplannedOrderDragEnd: EventEmitter = new EventEmitter();\n @Output() public selectPlanningOrder: EventEmitter = new EventEmitter();\n @ViewChild('nameFilter') public nameFilter: FilterComponent;\n @ViewChild('searchFilters') public searchFilters: SearchFiltersComponent;\n\n public filteredNeedsAttentionItems: NeedsAttentionItem[];\n public loadingProductionOrders = true;\n public advancedSearchFilters: PropertyValue[] = [\n {propertyName: AdvancedSearchInput.NAME},\n {propertyName: AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS, possiblePropertyValues: [ProductionScheduleStatus.TO_PLAN, ProductionScheduleStatus.TO_RECONFIRM]},\n {propertyName: AdvancedSearchInput.MACHINE_QUALITY},\n {propertyName: AdvancedSearchInput.CREEL},\n {propertyName: AdvancedSearchInput.WEAVE_PRODUCT},\n {propertyName: AdvancedSearchInput.TUFT_PRODUCT}\n ];\n\n private nameFilterChangeSubject: Subject = new Subject();\n private needsAttentionItems: NeedsAttentionItem[];\n\n public constructor(\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n @Inject(PLANNING) private readonly planning: Planning,\n @Inject(PRODUCTION_ORDERS_WEAVING) private readonly productionOrdersWeaving: ProductionOrdersWeaving,\n private readonly productionOrdersTufting: HttpTuftProductionOrdersService,\n private readonly confirmProductionOrderDeletionCommand: ConfirmProductionOrderDeletionCommand,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.planning\n .getOrdersThatRequireAttention()\n .pipe(\n finalize(() => (this.loadingProductionOrders = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((items: NeedsAttentionItem[]): void => {\n this.needsAttentionItems = items;\n this.filteredNeedsAttentionItems = items;\n });\n this.subscribeToNameFilterChanges();\n }\n\n public close(): void {\n this.closeNeedsAttentionSidebar.emit();\n }\n\n public hasProductionOrders(): boolean {\n return !isEmpty(this.needsAttentionItems);\n }\n\n public deleteUnplannedOrder(unplannedItem: NeedsAttentionItem): void {\n const title = this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {\n object: unplannedItem.productionOrderCarpet?.name || unplannedItem.productionOrderWeaving?.name || unplannedItem.productionOrderTufting?.name\n });\n const message = this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION');\n\n this.confirmProductionOrderDeletionCommand\n .execute({\n title,\n message\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n if (unplannedItem.isCarpetOrder) {\n this.productionSchedules\n .delete(unplannedItem.productionOrderCarpet.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.removeProductionOrderCarpet(unplannedItem.productionOrderCarpet.id));\n }\n if (unplannedItem.isWeavingOrder) {\n this.productionOrdersWeaving\n .delete(unplannedItem.productionOrderWeaving.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.removeProductionOrderWeaving(unplannedItem.productionOrderWeaving.id));\n }\n if (unplannedItem.isTuftingOrder) {\n this.productionOrdersTufting\n .delete(unplannedItem.productionOrderTufting.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.removeProductionOrderTufting(unplannedItem.productionOrderTufting.id));\n }\n });\n }\n\n public onUnplannedOrderDragStart(event: DragEvent, unplannedItem: NeedsAttentionItem): void {\n this.unplannedOrderDragStart.emit({event, unplannedOrder: unplannedItem.productionOrderCarpet || unplannedItem.productionOrderWeaving || unplannedItem.productionOrderTufting});\n }\n\n public onUnplannedOrderDrag(event: DragEvent): void {\n this.unplannedOrderDrag.emit(event);\n }\n\n public onUnplannedOrderDragEnd(): void {\n this.unplannedOrderDragEnd.emit();\n }\n\n public removeProductionOrderCarpet(orderId: number): void {\n const filterFn = (needsAttentionItem: NeedsAttentionItem): boolean => needsAttentionItem.productionOrderCarpet?.id !== orderId;\n this.needsAttentionItems = this.needsAttentionItems.filter(filterFn);\n this.filteredNeedsAttentionItems = this.filteredNeedsAttentionItems.filter(filterFn);\n }\n\n public removeProductionOrderWeaving(orderId: number): void {\n const filterFn = (needsAttentionItem: NeedsAttentionItem): boolean => needsAttentionItem.productionOrderWeaving?.id !== orderId;\n this.needsAttentionItems = this.needsAttentionItems.filter(filterFn);\n this.filteredNeedsAttentionItems = this.filteredNeedsAttentionItems.filter(filterFn);\n }\n\n public removeProductionOrderTufting(orderId: number): void {\n const filterFn = (needsAttentionItem: NeedsAttentionItem): boolean => needsAttentionItem.productionOrderTufting?.id !== orderId;\n this.needsAttentionItems = this.needsAttentionItems.filter(filterFn);\n this.filteredNeedsAttentionItems = this.filteredNeedsAttentionItems.filter(filterFn);\n }\n\n public viewPlannedOrderDetails(planningOrderId: number): void {\n this.selectPlanningOrder.emit(planningOrderId);\n }\n\n public showAdvancedSearch(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass(['reposition-dialog', 'needs-attention-advanced-search'])\n .withWidth('650px')\n .withMaxHeight('100%')\n .openDialog(RepositionDialogComponent, {\n advancedSearchFilters: cloneDeep(this.advancedSearchFilters),\n component: AdvancedSearchDialogComponent,\n sourceElement: this.nameFilter.iconElement.nativeElement,\n positionOfDialog: PositionOfDialog.BOTTOM\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((advancedSearchFilters: PropertyValue[]) => {\n if (!isEmpty(advancedSearchFilters)) {\n this.advancedSearchFilters = advancedSearchFilters;\n this.filterNeedsAttentionProductionOrders();\n }\n });\n }\n\n public nameFilterTextChanged(filterText: string): void {\n this.nameFilterChangeSubject.next(filterText);\n }\n\n public getNameFilterValue(): string {\n return find(this.advancedSearchFilters, {propertyName: AdvancedSearchInput.NAME}).propertyValue;\n }\n\n public filterNeedsAttentionProductionOrders(): void {\n this.filteredNeedsAttentionItems = this.needsAttentionItems.filter(this.filterNeedsAttentionItem);\n this.searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n }\n\n public hasFilteredProductionOrders(): boolean {\n return !AssertionUtils.isEmpty(this.filteredNeedsAttentionItems);\n }\n\n private subscribeToNameFilterChanges(): void {\n this.nameFilterChangeSubject\n .asObservable()\n .pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((filterText: string) => {\n find(this.advancedSearchFilters, {propertyName: AdvancedSearchInput.NAME}).propertyValue = filterText;\n this.filterNeedsAttentionProductionOrders();\n });\n }\n\n private filterNeedsAttentionItem = (needsAttentionItem: NeedsAttentionItem): boolean => {\n const orderData = needsAttentionItem.productionOrderCarpet || needsAttentionItem.productionOrderWeaving || needsAttentionItem.productionOrderTufting;\n let result = true;\n\n for (const advancedSearchFilter of this.advancedSearchFilters) {\n if (!result) {\n return false;\n }\n if (!AdvancedSearchUtils.hasValue(advancedSearchFilter)) {\n continue;\n }\n result = this.applySearchFilter(needsAttentionItem, orderData, advancedSearchFilter);\n }\n\n return result;\n };\n\n private applySearchFilter(needsAttentionItem: NeedsAttentionItem, orderData: PlanningOrderData, advancedSearchFilter: PropertyValue): boolean {\n switch (advancedSearchFilter.propertyName) {\n case AdvancedSearchInput.NAME:\n return orderData.name?.toLowerCase().includes(advancedSearchFilter.propertyValue?.toLowerCase());\n\n case AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS:\n return orderData.status === advancedSearchFilter.propertyValue;\n\n case AdvancedSearchInput.MACHINE_QUALITY:\n return needsAttentionItem.isCarpetOrder && needsAttentionItem.productionOrderCarpet.machineQuality.id === advancedSearchFilter.propertyValue.id;\n\n case AdvancedSearchInput.CREEL:\n return needsAttentionItem.isCarpetOrder && needsAttentionItem.productionOrderCarpet.creel.id === advancedSearchFilter.propertyValue.id;\n\n case AdvancedSearchInput.WEAVE_PRODUCT:\n return needsAttentionItem.isWeavingOrder && needsAttentionItem.productionOrderWeaving.weaveProduct.id === advancedSearchFilter.propertyValue.id;\n\n case AdvancedSearchInput.TUFT_PRODUCT:\n return needsAttentionItem.isTuftingOrder && needsAttentionItem.productionOrderTufting.tuftProduct.id === advancedSearchFilter.propertyValue.id;\n }\n }\n}\n","export enum PlanningSidebarType {\n MACHINE,\n PLANNING_ITEM,\n PLANNING_ORDER,\n NEEDS_ATTENTION\n}\n","\n\n\n\n\n\n\n \n\n","import {Component, HostListener, Inject, Input, OnInit, ViewChild, ViewContainerRef} from '@angular/core';\nimport {isClickOutsideGivenElements} from '@application/helper/is-click-outside-given-elements';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {SidebarSize} from '@application/sidebar/sidebar-size.enum';\nimport {CalendarItemGroup} from '@domain/planning/calendar-item-group';\nimport {PlanningItem} from '@domain/planning/planning-item';\nimport {PlanningItemType} from '@domain/planning/planning-item-type.enum';\nimport {PlanningMachine} from '@domain/planning/planning-machine';\nimport {PlanningMachineRun} from '@domain/planning/planning-machine-run';\nimport {PlanningOrder} from '@domain/planning/planning-order';\nimport {PLANNING, Planning} from '@infrastructure/http/planning/planning';\nimport {AssertionUtils, BaseComponent, DialogBuilderFactoryService, DialogType, ObjectUtils, TranslateService} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {takeUntil} from 'rxjs';\nimport {NavigationPlanningData} from '../navigation-planning-data.type';\nimport {PLANNING_SCHEDULER, PlanningScheduler} from '../planning-scheduler/planning-scheduler';\nimport {RemovePlanningOrderCommand} from '../planning-scheduler/remove-planning-order/remove-planning-order-command';\nimport {PlanningContextService} from '../planning-services/planning-context.service';\nimport {PlanningDragDropChangesService} from '../planning-services/planning-drag-drop-changes.service';\nimport {PlanningSidebarData} from '../planning-sidebar-data.interface';\nimport {NeedsAttentionSidebarComponent} from './needs-attention-sidebar/needs-attention-sidebar.component';\nimport {PlanningSidebarManager} from './planning-sidebar-manager';\nimport {PlanningSidebarType} from './planning-sidebar-type.enum';\n\n@Component({\n selector: 'app-planning-sidebars',\n templateUrl: './planning-sidebars.component.html'\n})\nexport class PlanningSidebarsComponent extends BaseComponent implements OnInit {\n @Input() public sidebarManager: PlanningSidebarManager;\n\n @ViewChild(NeedsAttentionSidebarComponent)\n public set needsAttentionSidebar(sidebar: NeedsAttentionSidebarComponent) {\n this.planningDragDropChanges.needsAttentionSidebar = sidebar;\n }\n\n private readonly removePlanningOrderCommand = new RemovePlanningOrderCommand();\n\n private readonly classesThatShouldNotCloseSidebar = [\n 'row-indicator',\n 'sidebar',\n 'planning-group',\n 'needs-attention',\n 'inactivity-card',\n 'machine-run-card',\n 'cdk-overlay-container',\n 'planning-item-container'\n ];\n\n public constructor(\n @Inject(PLANNING) private readonly planning: Planning,\n @Inject(PLANNING_SCHEDULER) private readonly planningScheduler: PlanningScheduler,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n public readonly planningContext: PlanningContextService,\n public readonly planningDragDropChanges: PlanningDragDropChangesService,\n public readonly viewContainerRef: ViewContainerRef,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const emptyState = {sidebarType: null, sidebarPlanningItem: null, sidebarPlanningMachine: null, sidebarPlanningOrderId: null} as PlanningSidebarData;\n const previousState = this.navigationHelperService.getPartialState(Object.keys(emptyState));\n if (previousState && !ObjectUtils.isDeepEqual(emptyState, previousState)) {\n if (previousState.sidebarType === PlanningSidebarType.PLANNING_ITEM) {\n setTimeout(() => this.openPlanningItemDetails(previousState.sidebarPlanningMachine, previousState.sidebarPlanningItem));\n } else if (previousState.sidebarType === PlanningSidebarType.MACHINE) {\n setTimeout(() => this.openMachineDetails(previousState.sidebarPlanningMachine));\n } else if (previousState.sidebarType === PlanningSidebarType.PLANNING_ORDER) {\n setTimeout(() => this.openPlanningOrderDetails(previousState.sidebarPlanningOrderId));\n }\n }\n }\n\n @HostListener('document:click', ['$event'])\n public onOutsideSidebarClick(event: MouseEvent): void {\n if (\n !AssertionUtils.isNullOrUndefined(this.sidebarManager) &&\n this.sidebarManager.opened &&\n !this.planningContext.isOnboardingRunning &&\n isClickOutsideGivenElements(event.target as HTMLElement, this.classesThatShouldNotCloseSidebar)\n ) {\n this.closeSidebar(this.sidebarManager.isSidebarTypePlanningItem());\n }\n }\n\n public onSidebarOpenedChange(closed: boolean): void {\n if (closed) {\n this.closeSidebar(this.sidebarManager.isSidebarTypePlanningItem());\n }\n }\n\n public closeSidebar(resetPlanning: boolean = false): void {\n if (resetPlanning) {\n this.planningScheduler.resetPlanning();\n }\n\n this.planningContext.selectedPlaceholder = null;\n this.planningContext.resetSelectedVariables();\n\n this.sidebarManager.close();\n }\n\n public openNeedsAttentionOrders(): void {\n this.resetSidebar();\n this.sidebarManager.open(PlanningSidebarType.NEEDS_ATTENTION, SidebarSize.SMALL);\n }\n\n public openMachineDetails(machine: PlanningMachine): void {\n this.resetSidebar();\n this.planningContext.selectedMachine = machine;\n this.sidebarManager.open(PlanningSidebarType.MACHINE, SidebarSize.SMALL);\n }\n\n public openPlanningItemDetails(machine: PlanningMachine, planningItem: PlanningItem): void {\n if (this.sidebarManager.isSidebarTypePlanningItem() && planningItem.id !== this.planningContext.selectedPlanningItem.id) {\n this.planningScheduler.resetPlanning();\n }\n\n this.planningContext.resetSelectedVariables();\n if (planningItem !== this.planningContext.selectedPlaceholder) {\n this.planningContext.selectedPlaceholder = null;\n }\n\n this.planningContext.selectedMachine = machine;\n this.planningContext.selectedPlanningItem = planningItem;\n\n this.sidebarManager.open(PlanningSidebarType.PLANNING_ITEM, this.sidebarShouldBeLarge(planningItem) ? SidebarSize.LARGE : SidebarSize.SMALL);\n }\n\n public openPlanningOrderDetails(planningOrderId: number): void {\n if (planningOrderId == null) {\n return;\n }\n\n this.resetSidebar();\n this.planningContext.selectedPlanningOrderId = planningOrderId;\n this.sidebarManager.open(PlanningSidebarType.PLANNING_ORDER, SidebarSize.SMALL);\n }\n\n public onPlanningItemChange(planningItem: PlanningItem): void {\n this.sidebarShouldBeLarge(planningItem) ? this.sidebarManager.setSidebarSizeAsLarge() : this.sidebarManager.setSidebarSizeAsSmall();\n\n if (planningItem.startDate <= this.planningContext.getCurrentDateForSubscriptionTimezone() && (!(planningItem instanceof PlanningMachineRun) || planningItem.canBeRescheduled())) {\n planningItem.startDate = moment(this.planningContext.getCurrentDateForSubscriptionTimezone()).add(1, 'm').toDate();\n }\n\n if (planningItem.isNew()) {\n this.planningContext.selectedPlaceholder = planningItem;\n } else {\n const groupedCalendarItem = this.planningContext.groupedCalendarItems.find((itemGroup: CalendarItemGroup) => itemGroup.machineId === this.planningContext.selectedMachine.id);\n this.replacePlanningItemInGroupedCalendarItem(planningItem, groupedCalendarItem);\n\n this.planningContext.selectedPlanningItem = planningItem;\n }\n }\n\n public deletePlanningItem(): void {\n this.planning\n .deletePlanningItem(this.planningContext.selectedPlanningItem)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.closeSidebar();\n },\n error: () => {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('GENERAL.ERRORS.SOMETHING_WRONG'),\n messageText: this.translate.instant('PLANNING.ERRORS.DELETE_PLANNING_ITEM', {planningItemType: PlanningItemType[this.planningContext.selectedPlanningItem.type].toLowerCase()}),\n type: DialogType.ERROR\n });\n }\n });\n }\n\n public savePlanningItem(planningItem: PlanningItem): void {\n const groupedCalendarItem = this.planningScheduler.getCachedGroupedCalendarItem(this.planningContext.selectedMachine.id);\n\n if (planningItem.isNew()) {\n this.planningScheduler.addNewPlanningItem(planningItem, groupedCalendarItem);\n } else {\n this.replacePlanningItemInGroupedCalendarItem(planningItem, groupedCalendarItem);\n this.planningScheduler.rescheduleItems(planningItem, this.planningContext.selectedMachine, groupedCalendarItem, this.planningContext.selectedMachine);\n }\n\n this.closeSidebar(false);\n this.planningScheduler.setGroupedCalendarItems(this.planningContext.groupedCalendarItems);\n }\n\n public deletePlanningOrder(): void {\n const foundOrder = this.findSelectedPlanningOrder();\n\n if (foundOrder?.order != null) {\n this.planningContext.groupedCalendarItems = this.removePlanningOrderCommand.execute({\n run: foundOrder.machineRun,\n adjustRunRunningTime: false,\n planningOrder: foundOrder.order,\n groupedCalendarItems: this.planningContext.groupedCalendarItems,\n sourceGroupedCalendarItem: foundOrder.groupedCalendarItem\n });\n\n this.planningScheduler.setGroupedCalendarItems(this.planningContext.groupedCalendarItems);\n }\n\n this.closeSidebar(false);\n }\n\n private resetSidebar(): void {\n if (this.sidebarManager.isSidebarTypePlanningItem()) {\n this.planningScheduler.resetPlanning();\n }\n\n this.planningContext.resetSelectedVariables();\n this.planningContext.selectedPlaceholder = null;\n }\n\n private sidebarShouldBeLarge(planningItem: PlanningItem): boolean {\n return planningItem instanceof PlanningMachineRun && (planningItem.canBeRescheduled() || planningItem.executing);\n }\n\n private replacePlanningItemInGroupedCalendarItem(updatedPlanningItem: PlanningItem, groupedCalendarItem: CalendarItemGroup): void {\n if (groupedCalendarItem != null) {\n const index = groupedCalendarItem.items.findIndex((planningItem: PlanningItem) => planningItem.uniqueId === updatedPlanningItem.uniqueId);\n groupedCalendarItem.items.splice(index, 1, updatedPlanningItem);\n }\n }\n\n private findSelectedPlanningOrder(): {order: PlanningOrder; machineRun: PlanningMachineRun; groupedCalendarItem: CalendarItemGroup} {\n for (const groupedItem of this.planningContext.groupedCalendarItems) {\n for (const planningItem of groupedItem.items) {\n if (planningItem instanceof PlanningMachineRun) {\n const planningOrder = planningItem.planningOrders.find((order: PlanningOrder) => order.id === this.planningContext.selectedPlanningOrderId);\n\n if (planningOrder != null) {\n return {order: planningOrder, machineRun: planningItem, groupedCalendarItem: groupedItem};\n }\n }\n }\n }\n\n return {order: undefined, machineRun: undefined, groupedCalendarItem: undefined};\n }\n}\n","import {HttpClient} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\r\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\r\nimport {PlasticProductionOrder} from '@domain/texfab/plastic-production-order/plastic-production-order';\r\nimport {map, Observable} from 'rxjs';\r\nimport {DefaultCustomSettingsRepository} from '../default-custom-settings-repository';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class HttpPlasticProductionOrdersCustomSettingsService extends DefaultCustomSettingsRepository {\r\n public constructor(\r\n httpClient: HttpClient,\r\n private readonly backendConfiguration: BackendConfiguration\r\n ) {\r\n super(httpClient, `${backendConfiguration.getProductionOrderEndpoint()}production-orders/plastic/custom-settings`);\r\n }\r\n\r\n public override getNameGenerationProperties(): Observable {\r\n return this.httpClient\r\n .get(`${this.backendConfiguration.getProductionOrderEndpoint(2)}production-orders/plastic/custom-settings/name-generation-properties`)\r\n .pipe(map((json: any[]) => json.map((jsonElement: any) => NameGeneratorProperty.fromJSON(jsonElement))));\r\n }\r\n}\r\n","import {Component, OnInit} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {CustomSettings} from '@domain/custom-settings/custom-settings';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {HttpPlasticProductionOrdersCustomSettingsService} from '@infrastructure/http/plastic-production-order/http-plastic-production-orders-custom-settings.service';\nimport {BaseComponent, NavigationHelperPrototypeService, TabsMenuItem, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './plastic-production-order-custom-settings.component.html'\n})\nexport class PlasticProductionOrderCustomSettingsComponent extends BaseComponent implements OnInit {\n protected nameGenerationProperties: NameGeneratorProperty[] = [];\n protected generalTab: TabsMenuItem;\n protected selectedTab: TabsMenuItem;\n protected settingsForm = new FormGroup({\n nameGenerator: new FormControl(null)\n });\n\n public constructor(\n private readonly plasticProductionOrderCustomSettings: HttpPlasticProductionOrdersCustomSettingsService,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setTabs();\n this.getCustomSettings();\n }\n\n protected closeDialog(): void {\n this.navigationHelper.navigateBack();\n }\n\n protected save(): void {\n this.plasticProductionOrderCustomSettings\n .save(new CustomSettings(undefined, this.settingsForm.value.nameGenerator))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.closeDialog();\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.UPDATED_OBJECT_WITHOUT_NAME', {object: 'GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS'})\n });\n });\n }\n\n private setTabs(): void {\n this.generalTab = {\n value: 'generalTab',\n translationKey: 'GENERAL.GENERAL',\n form: this.settingsForm\n };\n this.selectedTab = this.generalTab;\n }\n\n private getCustomSettings(): void {\n forkJoin([this.plasticProductionOrderCustomSettings.get(), this.plasticProductionOrderCustomSettings.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([customSettings, nameGenerationProperties]: [CustomSettings, NameGeneratorProperty[]]) => {\n this.settingsForm.controls.nameGenerator.patchValue(customSettings.nameGenerator);\n this.nameGenerationProperties = nameGenerationProperties;\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 {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT' | bmsTranslate: {count: 1} }}\n \n \n \n \n \n \n {{ 'GENERAL.QUANTITY' | bmsTranslate }}\n \n @if (addPlasticProductionOrderGeneralForm.controls?.quantity.value !== null && !addPlasticProductionOrderGeneralForm.controls?.quantity.disabled) {\n \n }\n \n {{ getQuantitySuffixTranslationKey() | bmsTranslate | lowercase }}\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n \n {{ 'MACHINE.MACHINE' | bmsTranslate: {count: 1} }}\n \n \n \n {{ 'PLANNING.MACHINE_GROUP' | bmsTranslate }}\n \n \n
\n
\n \n {{ 'UTILITIES.TOOL.TOOL' | bmsTranslate: {count: 1} }}\n \n \n
\n
\n
\n \n {{ 'PLASTIC_PRODUCTION_ORDER.PLANNED_SPEED' | bmsTranslate }}\n \n @if (addPlasticProductionOrderGeneralForm.controls?.plannedSpeed.value !== null) {\n \n }\n {{ 'UTILITIES.TOOL.SPEED_UNIT.' + (addPlasticProductionOrderGeneralForm.controls?.product.value?.speedUnit ?? 'CYCLE_TIME') | bmsTranslate }}\n \n \n \n \n \n {{ 'PLASTIC_PRODUCTION_ORDER.PLANNED_EFFICIENCY' | bmsTranslate }}\n \n @if (addPlasticProductionOrderGeneralForm.controls?.plannedEfficiency.value !== null) {\n \n }\n \n {{ 'GENERAL.UNIT.PERCENTAGE' | bmsTranslate }}\n \n \n \n \n \n \n \n \n
\n
\n
\n
\n \n {{ 'PLASTIC_PRODUCTION_ORDER.ORDER_STATUS' | bmsTranslate }}\n \n \n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {IdName} from '@domain/id-name';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {IdNameUnitOfMeasurement} from '@domain/texfab/plastic-production-order/id-name-unit-of-measurement';\nimport {PlasticProductionOrder} from '@domain/texfab/plastic-production-order/plastic-production-order';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {UnitOfMeasurement} from '@domain/textile-data/plastic-product/unit-of-measurement.enum';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {MACHINE_OVERVIEW, MachineOverview} from '@infrastructure/http/machine-overview/machine-overview';\nimport {MACHINES, Machines} from '@infrastructure/http/machine/machines.interface';\nimport {HttpPlasticProductionOrdersCustomSettingsService} from '@infrastructure/http/plastic-production-order/http-plastic-production-orders-custom-settings.service';\nimport {HttpPlasticProductionOrdersService} from '@infrastructure/http/plastic-production-order/http-plastic-production-orders.service';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {MachineOverviewService} from '@presentation/pages/machine-overview/overview-machines-views/overview-machines-list/machine-overview.service';\nimport {flattenMachineGroup} from '@presentation/pages/machine-overview/sidebar/group-editor/machine-group-utils';\nimport {PlasticProductSelectionService} from '@presentation/pages/textile-data/plastic-product/plastic-product-selection.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {MatchingCriteriaOverviewService} from '@presentation/pages/utilities/tool/add/matching-criteria/matching-criteria-overview.service';\nimport {ToolSelectionService} from '@presentation/pages/utilities/tool/tool-selection.service';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n SaveType,\n skeletonViewAnimation,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef} from 'ag-grid-community';\nimport {DateTime} from 'luxon';\nimport {finalize, map, Observable, Subject, takeUntil} from 'rxjs';\nimport {PlasticProductionOrderCustomSettingsComponent} from '../custom-settings/plastic-production-order-custom-settings.component';\n\ntype CrudOverviewDataConfigType = PlasticProduct | MachineOverviewList | Tool | OverviewMachineGroup;\n\n@Component({\n templateUrl: './add-plastic-production-order-page.component.html',\n styleUrls: ['./add-plastic-production-order-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .button-skeleton-wrapper')]\n})\nexport class AddPlasticProductionOrderPageComponent extends BaseComponent implements OnInit {\n public addPlasticProductionOrderGeneralForm: FormGroup<{\n name: FormControl;\n dueDate: FormControl;\n product: FormControl;\n quantity: FormControl;\n machine: FormControl;\n machineGroup: FormControl;\n tool: FormControl;\n plannedSpeed: FormControl;\n plannedEfficiency: FormControl;\n }>;\n\n public selectedMenuItem: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL'};\n\n private machineConfig: CrudOverviewDataConfig;\n private machineGroupConfig: CrudOverviewDataConfig;\n\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_PLASTIC_PRODUCTION_ORDER;\n public readonly MIN_DUE_DATE = DateTime.now();\n\n private plasticProductionOrderId: number;\n protected currentProductionOrder: PlasticProductionOrder;\n protected customSettingsUpdated: Subject = new Subject();\n\n private readonly TRANSLATION_KEY = 'PLASTIC_PRODUCTION_ORDER.PLASTIC_PRODUCTION_ORDER';\n\n public constructor(\n @Inject(MACHINES) private readonly machines: Machines,\n @Inject(MACHINE_OVERVIEW) private readonly machineOverview: MachineOverview,\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly router: Router,\n private readonly formBuilder: FormBuilder,\n private readonly plasticProductionOrders: HttpPlasticProductionOrdersService,\n protected readonly plasticProductionOrdersCustomSettings: HttpPlasticProductionOrdersCustomSettingsService,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly toolSelectionService: ToolSelectionService,\n private readonly plasticProductSelectionService: PlasticProductSelectionService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly machineOverviewService: MachineOverviewService,\n private readonly matchingCriteriaOverviewService: MatchingCriteriaOverviewService\n ) {\n super();\n this.plasticProductSelectionService.init(false);\n }\n\n public ngOnInit(): void {\n this.setGeneralFormFields();\n this.setBuilderConfigForMachine();\n this.setBuilderConfigForMachineGroup();\n\n this.plasticProductionOrderId = !AssertionUtils.isNullOrUndefined(this.activatedRoute.snapshot.params.id) ? Number(this.activatedRoute.snapshot.params.id) : undefined;\n\n this.addPlasticProductionOrderGeneralForm.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => this.setCurrentProductionOrder());\n\n if (this.plasticProductionOrderId) {\n this.plasticProductionOrders\n .getById(this.plasticProductionOrderId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((plasticProductionOrder: PlasticProductionOrder) => {\n this.setFormValues(plasticProductionOrder);\n this.currentProductionOrder.status = plasticProductionOrder.status;\n });\n }\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.addPlasticProductionOrderGeneralForm], this.document);\n if (isValid) {\n const plasticProductionOrderToSave = this.currentProductionOrder;\n this.saving = true;\n\n const request: Observable = this.isEditingPlasticProductionOrder()\n ? this.plasticProductionOrders.update(plasticProductionOrderToSave)\n : this.plasticProductionOrders.save(plasticProductionOrderToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) =>\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.PLASTIC_PRODUCTION_ORDER,\n this.TRANSLATION_KEY,\n this.isEditingPlasticProductionOrder(),\n plasticProductionOrderToSave.name,\n id\n ),\n error: (errorMessage: BackendError) =>\n this.showErrorDialogForBackendError(this.isEditingPlasticProductionOrder() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public isEditingPlasticProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === NavigationUtils.getNavigationRoute(NavigationId.EDIT_PLASTIC_ORDER).path;\n }\n\n public duplicatePlasticProductionOrder(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.plastic.duplicateProductionOrder.absolutePath.replace(':id', this.plasticProductionOrderId.toString()));\n }\n\n public cancel(): void {\n this.navigationHelperService.navigateToPreviousRoute(RouteUtils.paths.texFab.plastic.productionOrder.absolutePath);\n }\n\n public deletePlasticProductionOrder(): void {\n this.textileService.removeConfirmation(this.currentProductionOrder, TextileDataType.PLASTIC_PRODUCTION_ORDER, false, null, this.plasticProductionOrders);\n }\n\n public selectProduct(): void {\n const field = this.addPlasticProductionOrderGeneralForm.controls.product;\n\n this.plasticProductSelectionService\n .openContentSwitcherDialog(\n [field.value as PlasticProduct],\n {\n activeTab: this.selectedMenuItem,\n product: this.currentProductionOrder\n },\n this.addPlasticProductionOrderGeneralForm?.controls?.tool?.getRawValue()?.id,\n this.addPlasticProductionOrderGeneralForm?.controls?.machine?.getRawValue()?.id\n )\n .subscribe((object: CrudOverviewDataConfigType[]) => {\n field.setValue(AssertionUtils.isEmpty(object) ? field.value : (object[0] as PlasticProduct));\n });\n }\n\n public selectMachine(): void {\n this.selectObjectWithNavigationHelper(this.machineConfig, 'machine');\n }\n\n public selectMachineGroup(): void {\n this.selectObjectWithNavigationHelper(this.machineGroupConfig, 'machineGroup');\n }\n\n public selectTool(): void {\n const field = this.addPlasticProductionOrderGeneralForm.controls.tool;\n\n this.toolSelectionService\n .openContentSwitcherDialog(\n field.value as Tool,\n this.addPlasticProductionOrderGeneralForm?.controls?.product?.getRawValue()?.id,\n this.addPlasticProductionOrderGeneralForm?.controls?.machine?.getRawValue()?.id\n )\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((tool: CrudOverviewDataConfigType[]) => {\n if (!AssertionUtils.isNullOrUndefined(tool)) {\n field.setValue(!AssertionUtils.isNullOrUndefined(tool) ? (tool[0] as Tool) : null);\n }\n });\n }\n\n public getQuantitySuffixTranslationKey(): string {\n const product = this.addPlasticProductionOrderGeneralForm.value.product;\n return `TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.${product?.unitOfMeasurement ?? UnitOfMeasurement.PIECES}`;\n }\n\n public getProductionOrderStatus(): string {\n return this.currentProductionOrder?.status\n ? this.translate.instant('PRODUCTION_ORDER.STATUS.' + this.currentProductionOrder.status.toString())\n : this.translate.instant('PRODUCTION_ORDER.STATUS.CREATING');\n }\n\n protected applyNameSuggestion(suggestion: string): void {\n this.addPlasticProductionOrderGeneralForm.controls.name.patchValue(suggestion);\n }\n\n protected openCustomSettings(): void {\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: PlasticProductionOrderCustomSettingsComponent\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.customSettingsUpdated.next());\n }\n\n private setCurrentProductionOrder(): void {\n const product = this.addPlasticProductionOrderGeneralForm.value.product;\n const tool = this.addPlasticProductionOrderGeneralForm.value.tool;\n\n this.currentProductionOrder = new PlasticProductionOrder(\n this.isEditingPlasticProductionOrder() ? this.plasticProductionOrderId : null,\n this.addPlasticProductionOrderGeneralForm.value.name,\n this.currentProductionOrder?.status ?? ProductionScheduleStatus.CREATING,\n this.addPlasticProductionOrderGeneralForm.value.dueDate ? this.addPlasticProductionOrderGeneralForm.value.dueDate.toJSDate() : null,\n product ? new IdNameUnitOfMeasurement(product.id, product.name, product.unitOfMeasurement, product.speedUnit) : null,\n this.addPlasticProductionOrderGeneralForm.getRawValue().quantity,\n this.addPlasticProductionOrderGeneralForm.value.machine,\n this.addPlasticProductionOrderGeneralForm.value.machineGroup,\n tool ? new IdName(tool.id, tool.name) : null,\n this.addPlasticProductionOrderGeneralForm.value.plannedSpeed,\n this.addPlasticProductionOrderGeneralForm.value.plannedEfficiency\n );\n }\n\n private setGeneralFormFields(): void {\n this.addPlasticProductionOrderGeneralForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.productionSchedules, null)),\n dueDate: this.formBuilder.control(null),\n product: this.formBuilder.control(null, Validators.required),\n quantity: this.formBuilder.control({value: null, disabled: true}, [Validators.required, Validators.min(1)]),\n machine: this.formBuilder.control(null),\n machineGroup: this.formBuilder.control(null),\n tool: this.formBuilder.control(null),\n plannedSpeed: this.formBuilder.control(null, Validators.min(0)),\n plannedEfficiency: this.formBuilder.control(null, [Validators.min(0), Validators.max(100)])\n });\n\n this.addPlasticProductionOrderGeneralForm.controls.product.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((product: PlasticProduct) => {\n if (AssertionUtils.isNullOrUndefined(product)) {\n this.addPlasticProductionOrderGeneralForm.controls.quantity.setValue(null);\n this.addPlasticProductionOrderGeneralForm.controls.quantity.disable();\n } else {\n this.addPlasticProductionOrderGeneralForm.controls.quantity.enable();\n }\n });\n\n this.selectedMenuItem.form = this.addPlasticProductionOrderGeneralForm;\n }\n\n private setFormValues(plasticProductionOrder: PlasticProductionOrder): void {\n let dueDate = plasticProductionOrder.dueDate;\n if (!AssertionUtils.isNullOrUndefined(dueDate) && dueDate <= this.MIN_DUE_DATE.toJSDate()) {\n dueDate = null;\n }\n\n this.addPlasticProductionOrderGeneralForm.reset({\n name: this.isDuplicatingPlasticProductionOrder() ? null : plasticProductionOrder.name,\n dueDate: dueDate ? DateTime.fromJSDate(dueDate) : null,\n product: plasticProductionOrder.plasticProduct,\n quantity: plasticProductionOrder.plannedQuantity,\n machine: plasticProductionOrder.machine,\n machineGroup: plasticProductionOrder.machineGroup,\n tool: plasticProductionOrder.tool,\n plannedSpeed: plasticProductionOrder.plannedSpeed,\n plannedEfficiency: plasticProductionOrder.plannedEfficiency\n });\n\n if (this.isEditingPlasticProductionOrder()) {\n this.addPlasticProductionOrderGeneralForm.controls.name.setAsyncValidators([AsyncUniqueValidator.createValidator(this.productionSchedules, plasticProductionOrder.name)]);\n this.addPlasticProductionOrderGeneralForm.controls.name.updateValueAndValidity();\n }\n\n if (this.isEditingPlasticProductionOrder() && plasticProductionOrder.status !== ProductionScheduleStatus.TO_PLAN) {\n this.addPlasticProductionOrderGeneralForm.disable();\n }\n }\n\n private isDuplicatingPlasticProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === NavigationUtils.getNavigationData(NavigationId.DUPLICATE_PLASTIC_ORDER).route;\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {object: this.translate.instant(this.TRANSLATION_KEY)}),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private setBuilderConfigForMachine(): void {\n this.machineConfig = this.getConfig(\n this.translate.instant('MACHINE.MACHINE', {count: 2}),\n this.machineOverviewService.getColumnDefsForSpeed(),\n GridIdentifier.SELECT_MACHINE,\n (builder: GridOptionsBuilder) => this.machineOverviewService.getDefaultGridOptionsBuilder(builder)\n );\n }\n\n private setBuilderConfigForMachineGroup(): void {\n this.machineGroupConfig = this.getConfig(\n this.translate.instant('PLANNING.MACHINE_GROUP'),\n this.matchingCriteriaOverviewService.getColDefForMachineGroup(),\n GridIdentifier.SELECT_MACHINE_GROUP,\n (builder: GridOptionsBuilder) => this.machineOverviewService.getDefaultGridOptionsBuilder(builder)\n );\n }\n\n private getConfig(\n translationKey: string,\n colDefs: ColDef[],\n gridIdentifier: string,\n configureBuilder?: (builder: GridOptionsBuilder) => GridOptionsBuilder\n ): CrudOverviewDataConfig {\n let builderFactoryService = this.builderFactoryService\n .getBuilder()\n .withEntityName(translationKey)\n .withGridOptions(colDefs, gridIdentifier, null, (builder: GridOptionsBuilder) => configureBuilder(builder).withRowSelection(false, false, true).build());\n\n return builderFactoryService.build();\n }\n\n private selectObjectWithNavigationHelper(config: CrudOverviewDataConfig, fieldName: string): void {\n const field = this.addPlasticProductionOrderGeneralForm.get(fieldName);\n\n if (fieldName === 'machine') {\n config.dataObservable = this.machines.getCompatible(\n this.addPlasticProductionOrderGeneralForm?.controls?.tool?.getRawValue()?.id,\n this.addPlasticProductionOrderGeneralForm?.controls?.product?.getRawValue()?.id,\n this.addPlasticProductionOrderGeneralForm?.controls?.machineGroup?.getRawValue()?.id\n );\n } else {\n config.dataObservable = this.machineOverview.getRootGroup().pipe(map((group: OverviewMachineGroup) => flattenMachineGroup(group) as OverviewMachineGroup[]));\n }\n\n config.selectedObjects = [field.value];\n\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config\n } as CrudObjectSelectionDialogInput\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((object: CrudOverviewDataConfigType[]) => {\n if (!AssertionUtils.isNullOrUndefined(object)) {\n field.setValue(object[0]);\n }\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddPlasticProductionOrderPageComponent} from './add/add-plastic-production-order-page.component';\nimport {PlasticProductionOrderOverviewPageComponent} from './overview/plastic-production-order-overview-page.component';\n\nconst shared = {parentId: NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE};\n\nexport const plasticProductionOrderRoutes = [\n Factory.createPrototypeComponentRoute(PlasticProductionOrderOverviewPageComponent, {\n route: '',\n requiredPermission: Permission.TEXFAB_PLASTIC_ORDER_VIEW,\n reuse: true,\n id: NavigationId.PLASTIC_ORDER,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(AddPlasticProductionOrderPageComponent, {\n route: 'add',\n requiredPermission: Permission.TEXFAB_PLASTIC_ORDER_EDIT,\n reuse: true,\n id: NavigationId.ADD_PLASTIC_ORDER,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(AddPlasticProductionOrderPageComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.TEXFAB_PLASTIC_ORDER_VIEW,\n id: NavigationId.EDIT_PLASTIC_ORDER,\n ...shared\n }),\n Factory.createPrototypeComponentRoute(AddPlasticProductionOrderPageComponent, {\n route: 'add/:id',\n requiredPermission: Permission.TEXFAB_PLASTIC_ORDER_EDIT,\n id: NavigationId.DUPLICATE_PLASTIC_ORDER,\n ...shared\n })\n];\n\nexport const plasticProductionOrderRouting: ModuleWithProviders = RouterModule.forChild(plasticProductionOrderRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {PlasticProductionOrder} from '@domain/texfab/plastic-production-order/plastic-production-order';\nimport {HttpPlasticProductionOrdersService} from '@infrastructure/http/plastic-production-order/http-plastic-production-orders.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n LinkIconRendererComponent,\n NavigationHelperPrototypeService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n RouteNavigationInput,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs';\nimport {ProductionScheduleOverviewStatusComponent} from '../../production-schedule/overview/status/production-schedule-overview-status.component';\nimport {PlasticProductionOrderCustomSettingsComponent} from '../custom-settings/plastic-production-order-custom-settings.component';\n\n@Component({\n templateUrl: './plastic-production-order-overview-page.component.html'\n})\nexport class PlasticProductionOrderOverviewPageComponent extends BaseComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls('plasticProductionOrder');\n\n public constructor(\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService,\n private readonly crudOverviewDataBuilderFactory: CrudOverviewDataBuilderFactoryService,\n private readonly plasticProductionOrders: HttpPlasticProductionOrdersService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly textileService: TextileService,\n private readonly navigationHelperService: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const colDefs = [\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('GENERAL.STATUS')\n .withColIdAndField('status')\n .withCellRenderer(ProductionScheduleOverviewStatusComponent)\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`PRODUCTION_ORDER.STATUS.${(params.data as PlasticProductionOrder).status}`))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('GENERAL.NAME')\n .withColIdAndField('name', true)\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .build(),\n this.colDefBuilderFactory.getBuilder().withHeaderName('GENERAL.DATETIME.DUE_DATE').withColIdAndField('dueDate').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactory.getBuilder().withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT').withColIdAndField('plasticProduct.name', true).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('GENERAL.QUANTITY')\n .withColId('plannedQuantity')\n .withValueGetter(\n (params: ValueGetterParams) =>\n `${params.data.plannedQuantity} ${this.translate.instant(`TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.${params.data.plasticProduct.unitOfMeasurement}`).toLowerCase()}`,\n true\n )\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactory.getBuilder().withHeaderName('MACHINE.MACHINE').withColIdAndField('machine.name', true).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory.getBuilder().withHeaderName('UTILITIES.TOOL.TOOL').withColIdAndField('tool.name', true).withComparator(StringUtils.stringComparator).build()\n ];\n\n this.config = this.crudOverviewDataBuilderFactory\n .getBuilder()\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: RouteUtils.paths.texFab.plastic.editProductionOrder.requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: false\n } as CrudActions)\n })\n .withGridOptions(colDefs, GridIdentifier.PLASTIC_PRODUCTION_ORDER_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n builder\n .withRowSelection(false)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant(NavigationUtils.getNavigationData(NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE).navigationKey, {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .build()\n )\n .withRowData(this.plasticProductionOrders.getAll())\n .withEntityName(NavigationUtils.getNavigationData(NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE).navigationKey)\n .withCustomSettingsClicked(() => this.openCustomSettings())\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n const componentInfo: RouteNavigationInput = {\n route: this.pageUrls[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id)\n };\n\n this.navigationHelperService.navigateWithRoute(componentInfo);\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.textileService.removeConfirmation(\n AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0] : rowNode.data,\n TextileDataType.PLASTIC_PRODUCTION_ORDER,\n false,\n null,\n this.plasticProductionOrders\n );\n }\n\n private openCustomSettings(): void {\n this.navigationHelperService\n .navigateWithContentSwitcher({\n componentInfo: {\n component: PlasticProductionOrderCustomSettingsComponent\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe();\n }\n}\n","\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {GetAllWeaveProductsParameters, WEAVE_PRODUCT, WeaveProducts} from '@infrastructure/http/weave-product/weave-products.interface';\nimport {NavigationMachineOverviewData} from '@presentation/pages/machine-overview/navigation-machine-overview-data.interface';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {\n AgGridUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogComponentData,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n SelectGridDialog,\n Unit\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, ICellRendererParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './select-weave-product.component.html'\n})\nexport class SelectWeaveProductComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('weaveProductsGrid') public weaveProductsGrid: AgGridAngular;\n public listOfWeaveProducts: OverviewListWeaveProduct[];\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n\n private readonly machineId: number;\n\n public constructor(\n @Inject(WEAVE_PRODUCT) private weaveProducts: WeaveProducts,\n @Inject(MAT_DIALOG_DATA) data: any,\n private dialogRef: MatDialogRef,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly navigationHelperService: NavigationHelperService>\n ) {\n super();\n\n this.machineId = data?.machineId;\n }\n\n public get gridOptionsForListOfWeaveProducts(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.getWeaveProducts();\n this.initializeGridOptionsForListOfWeaveProducts();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.weaveProductsGrid?.api];\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState>({dialogComponent: SelectWeaveProductComponent});\n }\n\n public selectWeaveProduct(): void {\n this.dialogRef.close(this.weaveProductsGrid.api.getSelectedRows()[0]);\n }\n\n public canSelectWeaveProduct(): boolean {\n return this.weaveProductsGrid?.api && this.weaveProductsGrid.api.getSelectedRows().length > 0;\n }\n\n public showOnlyLatestVersionChanged(showOnlyLatestVersion: boolean): void {\n this.getWeaveProducts(showOnlyLatestVersion);\n }\n\n public navigateToAddWeaveProduct(): void {\n this.navigationHelperService.navigateToNextRouteWithPartialState(\n {equipmentId: this.machineId ?? null},\n RouteUtils.paths.texStyle.weaveProduct.addWeaveProduct.absolutePath\n );\n }\n\n private initializeGridOptionsForListOfWeaveProducts(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfWeaveProducts(), GridIdentifier.SELECT_WEAVE_PRODUCT)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT',\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withOnCellDoubleClicked(() => this.selectWeaveProduct())\n .build()\n ];\n }\n\n private getWeaveProducts(showOnlyLatestVersion: boolean = true): void {\n const parameters: Partial = {showOnlyLatestVersion};\n const request = this.machineId == null ? this.weaveProducts.getAll(parameters) : this.weaveProducts.getAllForMachineId(this.machineId, parameters);\n\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((listOfWeaveProducts: OverviewListWeaveProduct[]) => {\n this.listOfWeaveProducts = listOfWeaveProducts;\n });\n }\n\n private getColumnDefsForListOfWeaveProducts(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('nameWithVersion', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('widthInCm')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.CENTIMETER))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('pickDensityInPicksPerCm')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.PICK_DENSITY')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, Unit.PICKS_PER_CENTIMETER))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('standardSpeedInRotationsPerMinute')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_SPEED')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, Unit.ROTATIONS_PER_MINUTE))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('standardEfficiencyInPercentage')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_EFFICIENCY')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => `${params.value} %`)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('numberOfFeeders').withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_FEEDERS').withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('numberOfShafts').withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_SHAFTS').withRightAlignment().build()\n ];\n }\n\n private buildAgGridCellTextWithUnit(value: number, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n}\n","
\n \n \n \n
\n \n \n
\n \n
\n","import {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {isNil} from 'lodash-es';\n\nexport class OverviewListWeavingMachine {\n private _id: number;\n private _name: string;\n\n public constructor(id: number, name: string = null) {\n this._id = id;\n this._name = name;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public static fromJSON(overviewListWeavingMachineJSON: any): OverviewListWeavingMachine {\n return isNil(overviewListWeavingMachineJSON) ? null : new OverviewListWeavingMachine(overviewListWeavingMachineJSON.id, overviewListWeavingMachineJSON.name);\n }\n\n public static fromMachineSummary(machine: MachineSummary): OverviewListWeavingMachine {\n return new OverviewListWeavingMachine(machine.id, machine.name);\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name\n } as any as JSON;\n }\n}\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {PRODUCTION_ORDERS_WEAVING, ProductionOrdersWeaving} from '@infrastructure/http/production-order-weaving/production-orders-weaving';\nimport {ProductionOrderLiteStatusChange} from '@infrastructure/signalr/production-order-lite/production-order-lite-status-change';\nimport {REALTIME_PRODUCTION_ORDER_LITE, RealtimeProductionOrderLite} from '@infrastructure/signalr/production-order-lite/realtime-production-order-lite';\nimport {ProductionScheduleOverviewStatusComponent} from '@presentation/pages/texfab/production-schedule/overview/status/production-schedule-overview-status.component';\nimport {TextileDataOverviewComponent} from '@presentation/pages/textile-data/textile-data-overview/textile-data-overview.component';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BaseComponent, ColDefBuilderFactoryService, LinkIconRendererComponent, TranslateService} from '@vdw/angular-component-library';\nimport {ColDef, ICellRendererParams, ITooltipParams, RowNode, ValueGetterParams} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\nimport {OverviewListProductionOrderWeaving} from './overview-list-production-order-weaving';\n\n@Component({\n templateUrl: './production-order-weaving-overview-page.component.html'\n})\nexport class ProductionOrderWeavingOverviewPageComponent extends BaseComponent implements OnInit {\n @ViewChild('textileDataOverview') public textileDataOverview: TextileDataOverviewComponent;\n\n public listOfProductionOrdersWeaving: OverviewListProductionOrderWeaving[];\n\n public readonly textileDataType = TextileDataType;\n public readonly GRID_IDENTIFIER = GridIdentifier.PRODUCTION_ORDER_WEAVING_OVERVIEW;\n\n private pageUrls: PageUrls;\n\n public constructor(\n @Inject(PRODUCTION_ORDERS_WEAVING) public readonly productionOrdersWeaving: ProductionOrdersWeaving,\n @Inject(REALTIME_PRODUCTION_ORDER_LITE) private readonly realtimeProductionOrdersLite: RealtimeProductionOrderLite,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.pageUrls = LastModifiedCardUtils.getPageUrls('productionOrderWeaving');\n\n this.productionOrdersWeaving\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfProductionOrdersWeaving: OverviewListProductionOrderWeaving[]) => {\n this.listOfProductionOrdersWeaving = listOfProductionOrdersWeaving;\n this.subscribeToProductionOrderLiteUpdates();\n });\n }\n\n public getColumnDefsForListOfProductionOrdersWeaving(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('status')\n .withHeaderName('GENERAL.STATUS')\n .withCellRenderer(ProductionScheduleOverviewStatusComponent)\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`PRODUCTION_ORDER.STATUS.${params.value}`))\n .withCellClass('center')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .withLockVisible(true)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('weaveProduct.name', true).withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('machine.name')\n .withHeaderName('MACHINE.MACHINE')\n .withComparator(StringUtils.stringComparator)\n .withTooltipValueGetter((params: ITooltipParams) => params.data.machine?.name)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('plannedLength')\n .withHeaderName('PRODUCTION_ORDER_LITE.PLANNED_LENGTH')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getValueWithMeter(params.data.plannedLength), true)\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('dueDate').withHeaderName('GENERAL.DATETIME.DUE_DATE').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('dateCreated').withHeaderName('GENERAL.DATETIME.DATE_CREATED').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('actualStartDate').withHeaderName('GENERAL.DATETIME.START_DATE').withDate(true).withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('actualEndDate').withHeaderName('GENERAL.DATETIME.END_DATE').withDate(true).withDateMultiFilter().build()\n ];\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(this.pageUrls.settings);\n }\n\n private getValueWithMeter(value: number): string {\n return `${value} m`;\n }\n\n private subscribeToProductionOrderLiteUpdates(): void {\n this.realtimeProductionOrdersLite\n .getProductionOrdersLiteStatusChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(({id, status}: ProductionOrderLiteStatusChange) => this.updateProductionOrderLiteStatus(id, status));\n }\n\n private updateProductionOrderLiteStatus(id: number, status: ProductionScheduleStatus): void {\n this.textileDataOverview.forEachNode((node: RowNode) => {\n if (node.data?.id === id) {\n node.data.status = status;\n node.setData(node.data);\n }\n });\n }\n}\n","\n\n","
\n \n \n\n \n \n
\n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.LENGTH_LIMIT' | bmsTranslate: {max: '24'} }}\n \n \n\n \n \n {{ 'MACHINE.MACHINE' | bmsTranslate: {count: 1} }} ({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n \n {{ 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT' | bmsTranslate: {count: 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n \n {{ 'PRODUCTION_ORDER_LITE.PLANNED_LENGTH' | bmsTranslate }}\n \n \n {{ 'GENERAL.UNIT.METER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\n \n \n \n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {BackendErrorCodeEnum} from '@application/helper/backend-error-code.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {ProductionOrderWeaving} from '@domain/production-order-lite/production-order-weaving/production-order-weaving';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {Machines, MACHINES} from '@infrastructure/http/machine/machines.interface';\nimport {PRODUCTION_ORDERS_WEAVING, ProductionOrdersWeaving} from '@infrastructure/http/production-order-weaving/production-orders-weaving';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {WEAVE_PRODUCT, WeaveProducts} from '@infrastructure/http/weave-product/weave-products.interface';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n ObjectUtils,\n SaveType,\n skeletonViewAnimation,\n ToastService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {DateTime} from 'luxon';\nimport {forkJoin} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {SelectMachineComponent} from '../../production-schedule/add/initial-preparations-new/select-machine/select-machine.component';\nimport {OverviewListWeavingMachine} from '../overview/overview-list-weaving-machine';\nimport {NavigationAddProductionOrderWeavingPageData} from './navigation-add-production-order-weaving-page-data.type';\nimport {NavigationProductionOrderWeavingData} from './navigation-production-order-weaving-data.interface';\nimport {SelectWeaveProductComponent} from './select-weave-product/select-weave-product.component';\n\n@Component({\n templateUrl: './add-production-order-weaving-page.component.html',\n styleUrls: ['./add-production-order-weaving-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .button-skeleton-wrapper, .mat-expansion-panel, .checkbox-skeleton, .text-skeleton-wrapper, .thread-item header')]\n})\nexport class AddProductionOrderWeavingPageComponent extends BaseComponent implements OnInit {\n public addProductionOrderWeavingForm: FormGroup<{\n name: FormControl;\n weaveProduct: FormControl;\n machine: FormControl;\n plannedLength: FormControl;\n dueDate: FormControl;\n }>;\n\n public suggestedProductionOrderWeavingName: string;\n public translationKeyForProductionOrder = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n public readonly MACHINE_BASE_ROUTER_LINK = RouteUtils.paths.texState.editMachine.absolutePath.replace(':machineType', 'weaving-machine');\n public readonly WEAVE_PRODUCT_BASE_ROUTER_LINK = RouteUtils.paths.texStyle.weaveProduct.editWeaveProduct.absolutePath;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_PRODUCTION_ORDER_WEAVING;\n public readonly SAVE = SaveType.SAVE;\n public readonly SAVE_AND_CLOSE = SaveType.SAVE_AND_CLOSE;\n public readonly SAVE_AND_CREATE_NEW = SaveType.SAVE_AND_CREATE_NEW;\n\n private readonly URL_TO_PRODUCTION_ORDER_OVERVIEW = NavigationUtils.getAbsolutePath(NavigationId.WEAVE_ORDER);\n private readonly URL_TO_EDIT_PRODUCTION_ORDER_WEAVING = NavigationUtils.getRoute(NavigationId.EDIT_WEAVE_ORDER);\n private readonly URL_TO_DUPLICATE_PRODUCTION_ORDER_WEAVING = NavigationUtils.getRoute(NavigationId.DUPLICATE_WEAVE_ORDER);\n private readonly QUEUE_PERMISSION = Permission.TEXFAB_WEAVE_QUEUE;\n private readonly EDIT_PERMISSION = Permission.TEXFAB_WEAVE_ORDER_EDIT;\n private saveButtonTouched = false;\n private status: ProductionScheduleStatus = null;\n private runId: number;\n private currentSubscription: Subscription;\n\n private selectedMachineId: number;\n private selectedWeaveProductId: number;\n\n public constructor(\n @Inject(PRODUCTION_ORDERS_WEAVING) private readonly productionOrdersWeaving: ProductionOrdersWeaving,\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly navigationHistory: NavigationHistoryService,\n @Inject(MACHINES) private readonly machines: Machines,\n @Inject(WEAVE_PRODUCT) private readonly weaveProducts: WeaveProducts,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly formBuilder: FormBuilder,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly toastService: ToastService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly activatedRoute: ActivatedRoute,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly textileService: TextileService,\n private readonly unsavedChangesNotifierService: UnsavedChangesNotifierService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.unsavedChangesNotifierService.getPartialStateOfUnsavedChangesNotifier();\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.getUnsavedChangesNotifierEmitValue();\n this.setProductionOrderWeavingForm();\n\n const emptyProductionOrderWeavingState = {productionOrderWeaving: null} as NavigationProductionOrderWeavingData;\n const productionOrderWeavingState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionOrderWeavingState));\n\n if (!AssertionUtils.isNullOrUndefined(productionOrderWeavingState) && !ObjectUtils.isDeepEqual(productionOrderWeavingState, emptyProductionOrderWeavingState)) {\n this.initializeWithProductionOrderWeavingState(productionOrderWeavingState.productionOrderWeaving);\n } else if (this.isEditingProductionOrderWeaving() || this.isDuplicatingProductionOrderWeaving()) {\n this.productionOrdersWeaving\n .getById(Number(this.activatedRoute.snapshot.params.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (productionOrderWeaving: ProductionOrderWeaving) => {\n this.status = productionOrderWeaving.status;\n this.setFormValues(productionOrderWeaving);\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.URL_TO_PRODUCTION_ORDER_OVERVIEW)\n });\n } else if (this.isAddingProductionOrderForRun()) {\n const {runId, weaveProductId, machineId} = this.navigationHistory.getState() as {\n runId: number;\n weaveProductId: number;\n machineId: number;\n };\n this.initializeForRun(runId, weaveProductId, machineId);\n } else if (this.isAddingProductionOrderForMachine()) {\n this.initializeForMachine(Number(this.activatedRoute.snapshot.params.id));\n }\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({\n productionOrderWeaving: this.getCurrentProductionOrderWeaving()\n });\n this.unsavedChangesNotifierService.savePartialStateOfUnsavedChangesNotifier();\n }\n\n public hasChosenProperty(propertyName: string): boolean {\n return !AssertionUtils.isNullOrUndefined(this.getPropertyValue(propertyName));\n }\n\n public getChosenProperty(propertyName: string): any {\n return this.getPropertyValue(propertyName);\n }\n\n public getControlDisabled(propertyName: string): any {\n return this.addProductionOrderWeavingForm.get(propertyName).disabled;\n }\n\n public selectMachine(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectMachineComponent, {\n allowedMachineTypes: [MachineType.WEAVING_MACHINE],\n weaveProductId: this.selectedWeaveProductId\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((selectedMachine: OverviewListWeavingMachine) => {\n if (!AssertionUtils.isNullOrUndefined(selectedMachine)) {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addProductionOrderWeavingForm.controls.machine.setValue(selectedMachine);\n }\n });\n }\n\n public selectWeaveProduct(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectWeaveProductComponent, {\n machineId: this.selectedMachineId\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((selectedWeaveProduct: OverviewListWeaveProduct) => {\n if (!!selectedWeaveProduct) {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addProductionOrderWeavingForm.controls.weaveProduct.setValue(selectedWeaveProduct);\n }\n });\n }\n\n public clearMachineValue(): void {\n this.addProductionOrderWeavingForm.controls.machine.setValue(null);\n }\n\n public getEarliestPossibleDueDate(): DateTime {\n return DateTime.now();\n }\n\n public cancel(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.URL_TO_PRODUCTION_ORDER_OVERVIEW);\n }\n\n public saveProductionOrderWeaving(saveType: SaveType, navigateToSelectedRoute?: string): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.addProductionOrderWeavingForm], this.document);\n\n if (isValid) {\n const productionOrderWeavingToSave = this.getCurrentProductionOrderWeaving();\n this.saving = true;\n this.isEditingProductionOrderWeaving()\n ? this.editProductionOrderWeaving(productionOrderWeavingToSave, saveType, navigateToSelectedRoute)\n : this.addProductionOrderWeaving(productionOrderWeavingToSave, saveType, navigateToSelectedRoute);\n }\n }\n\n public duplicateProductionOrderWeaving(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.DUPLICATE_WEAVE_ORDER).replace(':id', this.activatedRoute.snapshot.params.id));\n }\n\n public deleteProductionOrderWeaving(): void {\n this.textileService.removeConfirmation(this.getCurrentProductionOrderWeaving(), TextileDataType.PRODUCTION_ORDER_WEAVING, false, null, this.productionOrdersWeaving);\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = Object.values(this.addProductionOrderWeavingForm.controls).some((control: FormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public getTitle(): string {\n const title = this.isEditingProductionOrderWeaving() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: (this.translate.instant(this.translationKeyForProductionOrder, {count: 1}) as string).toLowerCase()});\n }\n\n public hasPermissionToEditProductionOrderWeaving(): boolean {\n return this.currentSubscription?.hasPermission(this.EDIT_PERMISSION);\n }\n\n public canShowDelete(): boolean {\n return this.status === ProductionScheduleStatus.CREATED || this.status === ProductionScheduleStatus.TO_PLAN;\n }\n\n public canDisableForm(): boolean {\n return this.isEditingProductionOrderWeaving() && (!this.currentSubscription?.hasPermission(this.EDIT_PERMISSION) || this.status !== ProductionScheduleStatus.TO_PLAN);\n }\n\n public isEditingProductionOrderWeaving(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.URL_TO_EDIT_PRODUCTION_ORDER_WEAVING;\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.WEAVE_ORDER_SETTINGS));\n }\n\n public canShowSuggestionForProductionOrderWeavingName(): boolean {\n return this.suggestedProductionOrderWeavingName?.length > 0 && this.addProductionOrderWeavingForm.get('name').value !== this.suggestedProductionOrderWeavingName;\n }\n\n public applySuggestionForProductionOrderWeavingName(): void {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addProductionOrderWeavingForm.get('name').setValue(this.suggestedProductionOrderWeavingName);\n }\n\n private getUnsavedChangesNotifierEmitValue(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (!AssertionUtils.isNullOrUndefined(res)) {\n this.saveProductionOrderWeaving(SaveType.SAVE_AND_CLOSE, res.navigateToSelectedRoute);\n }\n });\n }\n\n private addProductionOrderWeaving(productionOrderWeaving: ProductionOrderWeaving, saveType: SaveType, navigateToSelectedRoute?: string): void {\n const addProductionOrderWeavingAction = this.canQueue() ? this.productionOrdersWeaving.saveAndPlan(productionOrderWeaving, this.runId) : this.productionOrdersWeaving.save(productionOrderWeaving);\n\n addProductionOrderWeavingAction.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.PRODUCTION_ORDER_WEAVING,\n this.translationKeyForProductionOrder,\n false,\n productionOrderWeaving.name,\n id,\n navigateToSelectedRoute\n );\n },\n error: (backendError: BackendError) => this.showErrorDialogForBackendError('GENERAL.ACTIONS.CREATE_OBJECT', backendError)\n });\n }\n\n private editProductionOrderWeaving(productionOrderWeaving: ProductionOrderWeaving, saveType: SaveType, navigateToSelectedRoute?: string): void {\n const editProductionOrderWeavingAction = this.hasChosenProperty('machine')\n ? this.productionOrdersWeaving.updateAndPlan(productionOrderWeaving, this.runId)\n : this.productionOrdersWeaving.update(productionOrderWeaving);\n\n editProductionOrderWeavingAction.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: () => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.PRODUCTION_ORDER_WEAVING,\n this.translationKeyForProductionOrder,\n true,\n productionOrderWeaving.name,\n null,\n navigateToSelectedRoute\n );\n },\n error: (backendError: BackendError) => this.showErrorDialogForBackendError('GENERAL.ACTIONS.EDIT_OBJECT', backendError)\n });\n }\n\n private showErrorDialogForBackendError(action: string, error: BackendError): void {\n if (Number(BackendErrorCodeEnum[error.errorContext?.errorCode]) === BackendErrorCodeEnum.LINKED_ENTITIES) {\n this.showProductionOrderIncompatibleWithMachineAlert(error);\n } else {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(action, {\n object: this.translate.instant(this.translationKeyForProductionOrder, {count: 1})\n }),\n messageText: error.message,\n type: DialogType.INFORMATION\n });\n }\n }\n\n private showProductionOrderIncompatibleWithMachineAlert(error: BackendError): void {\n const productionOrderName = this.getPropertyValue('name');\n const machineName = this.getPropertyValue('machine').name;\n const INCOMPATIBLE_MESSAGE_KEY = 'PLANNING.ERRORS.INCOMPATIBLE_PRODUCTION_ORDER';\n const translationParams = {\n productionOrderName,\n machineName,\n amountOfCompatibleMachines: error.errorContext.linkedEntityNames?.length ?? 0\n };\n\n if (translationParams.amountOfCompatibleMachines > 0) {\n translationParams['compatibleMachinesList'] = error.errorContext.linkedEntityNames.join(', ');\n }\n\n const dialogResult = this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('PLANNING.ERRORS.INCOMPATIBLE_ENTITY', {entity: (this.translate.instant('PRODUCTION_ORDER.PRODUCTION_ORDER', {count: 1}) as string).toLowerCase()}),\n messageText: this.translate.instant(INCOMPATIBLE_MESSAGE_KEY, translationParams),\n type: DialogType.INFORMATION\n });\n\n if (!this.isEditingProductionOrderWeaving() && !AssertionUtils.isNullOrUndefined(error.errorContext.entityId)) {\n dialogResult.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.router.navigate([NavigationUtils.getAbsolutePath(NavigationId.EDIT_WEAVE_ORDER).replace(':id', error.errorContext.entityId)]);\n this.showToast(productionOrderName);\n });\n }\n }\n\n private showToast(productionOrderWeavingName: string): void {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant(this.isEditingProductionOrderWeaving() ? 'GENERAL.ACTIONS.EDITED_OBJECT' : 'GENERAL.ACTIONS.CREATED_OBJECT', {\n object: this.translate.instant(this.translationKeyForProductionOrder, {count: 1}),\n name: productionOrderWeavingName,\n count: 1\n })\n });\n }\n\n private getCurrentProductionOrderWeaving(): ProductionOrderWeaving {\n const name: string = this.getPropertyValue('name');\n const weaveProduct: OverviewListWeaveProduct = this.getPropertyValue('weaveProduct');\n const machine: OverviewListWeavingMachine = this.getPropertyValue('machine');\n const plannedLength: number = this.getPropertyValue('plannedLength');\n const dueDate: DateTime = this.getPropertyValue('dueDate');\n return new ProductionOrderWeaving(\n this.isEditingProductionOrderWeaving() ? Number(this.activatedRoute.snapshot.params.id) : null,\n name,\n weaveProduct,\n machine,\n plannedLength,\n null,\n dueDate?.toJSDate(),\n this.status\n );\n }\n\n private setProductionOrderWeavingForm(): void {\n this.addProductionOrderWeavingForm = this.formBuilder.group({\n name: this.formBuilder.control(null, [Validators.required, Validators.maxLength(24)], AsyncUniqueValidator.createValidator(this.productionSchedules, null)),\n weaveProduct: this.formBuilder.control(null, Validators.required),\n machine: this.formBuilder.control({value: null, disabled: !this.hasQueuePermission()}),\n plannedLength: this.formBuilder.control(null, [Validators.required, Validators.min(1)]),\n dueDate: this.formBuilder.control(null)\n });\n\n this.addProductionOrderWeavingForm.controls.machine.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.selectedMachineId = this.addProductionOrderWeavingForm.controls.machine.value?.id;\n if (this.addProductionOrderWeavingForm.controls.machine.valid) {\n this.getSuggestionForProductionOrderWeavingName();\n }\n });\n\n this.addProductionOrderWeavingForm.controls.weaveProduct.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.selectedWeaveProductId = this.addProductionOrderWeavingForm.controls.weaveProduct.value?.id;\n if (this.addProductionOrderWeavingForm.controls.weaveProduct.valid) {\n this.getSuggestionForProductionOrderWeavingName();\n }\n });\n this.unsavedChangesNotifierService.notifyChanges(this.addProductionOrderWeavingForm, this.unSubscribeOnViewDestroy);\n }\n\n private setWeaveProduct(id: number): void {\n this.weaveProducts\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((weaveProducts: OverviewListWeaveProduct[]) =>\n this.addProductionOrderWeavingForm.get('weaveProduct').setValue(weaveProducts.find((weaveProduct: OverviewListWeaveProduct) => weaveProduct.id === id))\n );\n }\n\n private initializeWithProductionOrderWeavingState(productionOrderWeaving: ProductionOrderWeaving): void {\n this.status = productionOrderWeaving.status;\n this.setFormValues(productionOrderWeaving);\n\n if (this.isAddingProductionOrderForRun()) {\n this.addProductionOrderWeavingForm.get('weaveProduct').disable();\n this.addProductionOrderWeavingForm.get('machine').disable();\n } else if (this.isAddingProductionOrderForMachine()) {\n this.addProductionOrderWeavingForm.get('machine').disable();\n }\n }\n\n private setFormValues(productionOrderWeaving: ProductionOrderWeaving): void {\n let dueDate = productionOrderWeaving.dueDate;\n if (this.canDisableForm()) {\n this.addProductionOrderWeavingForm.disable();\n } else if (!AssertionUtils.isNullOrUndefined(dueDate) && dueDate <= this.getEarliestPossibleDueDate().toJSDate()) {\n dueDate = null;\n }\n\n this.addProductionOrderWeavingForm.patchValue({\n name: this.isDuplicatingProductionOrderWeaving() ? null : productionOrderWeaving.name,\n weaveProduct: productionOrderWeaving.weaveProduct,\n machine: this.hasQueuePermission() ? productionOrderWeaving.machine : null,\n plannedLength: productionOrderWeaving.plannedLength,\n dueDate: dueDate ? DateTime.fromJSDate(dueDate) : null\n });\n\n this.addProductionOrderWeavingForm.controls.name.setAsyncValidators(\n AsyncUniqueValidator.createValidator(this.productionSchedules, this.isDuplicatingProductionOrderWeaving() ? null : productionOrderWeaving.name)\n );\n this.addProductionOrderWeavingForm.controls.name.updateValueAndValidity();\n\n this.navigationHelperService.setNewItemOrReopenDialogIfPresent(\n ({newItemId}: NavigationNewItemData) => this.setWeaveProduct(newItemId),\n () => this.selectWeaveProduct()\n );\n }\n\n private initializeForRun(runId: number, weaveProductId: number, machineId: number): void {\n if (AssertionUtils.isNullOrUndefined(runId) || AssertionUtils.isNullOrUndefined(weaveProductId) || AssertionUtils.isNullOrUndefined(machineId)) {\n this.navigateToPlanning();\n return;\n }\n this.runId = runId;\n forkJoin([this.weaveProducts.getAll(), this.machines.getSummaryForMachine(machineId)])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([weaveProducts, machineSummary]: [OverviewListWeaveProduct[], MachineSummary]) => {\n const weaveProduct = weaveProducts?.find((style: OverviewListWeaveProduct) => style.id === weaveProductId);\n const machine = OverviewListWeavingMachine.fromMachineSummary(machineSummary);\n const weaveProductControl = this.addProductionOrderWeavingForm.get('weaveProduct');\n const machineControl = this.addProductionOrderWeavingForm.get('machine');\n weaveProductControl.setValue(weaveProduct);\n weaveProductControl.disable({emitEvent: true});\n machineControl.setValue(machine);\n machineControl.disable({emitEvent: true});\n });\n\n this.selectedWeaveProductId = weaveProductId;\n }\n\n private initializeForMachine(machineId: number): void {\n if (isNaN(machineId)) {\n return;\n }\n this.machines\n .getSummaryForMachine(machineId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineSummary: MachineSummary) => {\n const machine = OverviewListWeavingMachine.fromMachineSummary(machineSummary);\n const machineControl = this.addProductionOrderWeavingForm.get('machine');\n machineControl.setValue(machine);\n machineControl.disable({emitEvent: true});\n });\n\n this.navigationHelperService.setNewItemOrReopenDialogIfPresent(\n ({newItemId}: NavigationNewItemData) => this.setWeaveProduct(newItemId),\n () => this.selectWeaveProduct()\n );\n }\n\n private navigateToPlanning(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.PLANNING));\n }\n\n private getPropertyValue(propertyName: string): any {\n return this.addProductionOrderWeavingForm.get(propertyName).value;\n }\n\n private isDuplicatingProductionOrderWeaving(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.URL_TO_DUPLICATE_PRODUCTION_ORDER_WEAVING;\n }\n\n private isAddingProductionOrderForRun(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path.endsWith(NavigationUtils.getRoute(NavigationId.ADD_WEAVE_ORDER_RUN));\n }\n\n private isAddingProductionOrderForMachine(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path.endsWith(NavigationUtils.getRoute(NavigationId.ADD_WEAVE_ORDER_MACHINE));\n }\n\n private canQueue(): boolean {\n return this.hasQueuePermission() && this.hasChosenProperty('machine');\n }\n\n private hasQueuePermission(): boolean {\n return this.currentSubscription?.hasPermission(this.QUEUE_PERMISSION);\n }\n\n private getSuggestionForProductionOrderWeavingName(): void {\n if (this.addProductionOrderWeavingForm.controls.machine.valid && this.addProductionOrderWeavingForm.controls.weaveProduct.valid && this.currentSubscription?.hasPermission(this.EDIT_PERMISSION)) {\n this.productionOrdersWeaving\n .generateName(this.getCurrentProductionOrderWeaving())\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((name: string) => (this.suggestedProductionOrderWeavingName = name));\n }\n }\n}\n","
\n \n \n \n
\n
\n \n \n {{ 'GENERAL.PLACEHOLDER.NAME_PLACEHOLDER_SEPARATOR' | bmsTranslate }}\n \n \n {{ 'GENERAL.PLACEHOLDER.SEPARATOR.' + nameGeneratorSeparator | bmsTranslate }}\n \n \n \n \n
\n
\n
\n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\nimport {NameGenerator} from '@domain/name-generator/name-generator';\nimport {getProperty, getPropertyValue, PropertyValue} from '@domain/property-value';\nimport {PRODUCTION_ORDERS_WEAVING, ProductionOrdersWeaving} from '@infrastructure/http/production-order-weaving/production-orders-weaving';\nimport {AssertionUtils, BaseComponent, EnumUtils, ObjectActionType, ToastHelperService, TranslateService} from '@vdw/angular-component-library';\nimport {finalize, forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './production-order-weaving-settings.component.html'\n})\nexport class ProductionOrderWeavingSettingsComponent extends BaseComponent implements OnInit {\n public nameGenerationProperties: string[];\n public generateNameConfiguration: NameGenerator;\n public productionOrderWeavingCustomSettingsForm: FormGroup<{namePlaceholderSeparator: FormControl}>;\n public saving = false;\n\n private listOfCustomSettings: PropertyValue[] = [];\n\n public constructor(\n @Inject(PRODUCTION_ORDERS_WEAVING) private readonly productionOrdersWeaving: ProductionOrdersWeaving,\n private readonly formBuilder: FormBuilder,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly toastHelperService: ToastHelperService,\n private readonly translate: TranslateService,\n public readonly unsavedChangesNotifierService: UnsavedChangesNotifierService,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.productionOrderWeavingCustomSettingsForm = this.formBuilder.group({namePlaceholderSeparator: this.formBuilder.control(NameGeneratorSeparator.NO_SEPARATOR)});\n this.unsavedChangesNotifierService.notifyChanges(this.productionOrderWeavingCustomSettingsForm, this.unSubscribeOnViewDestroy);\n this.getCustomSettingsAndNameGenerationProperties();\n this.getUnsavedChangesNotifierEmitValue();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.onDestroy();\n }\n\n public navigateBack(navigateToSelectedRoute?: string): void {\n if (!AssertionUtils.isNullOrUndefined(navigateToSelectedRoute)) {\n this.router.navigateByUrl(navigateToSelectedRoute);\n }\n this.navigationHelperService.navigateToPreviousRoute(RouteUtils.paths.texFab.weaving.productionOrder.absolutePath);\n }\n\n public saveCustomSettings(navigateToSelectedRoute?: string): void {\n this.saving = true;\n this.generateNameConfiguration.version = this.generateNameConfiguration.version ?? 1;\n this.generateNameConfiguration.separator = this.productionOrderWeavingCustomSettingsForm.value.namePlaceholderSeparator;\n getProperty(this.listOfCustomSettings, 'generateNameConfiguration').propertyValue = JSON.stringify(this.generateNameConfiguration);\n\n this.productionOrdersWeaving\n .saveCustomSettings(this.listOfCustomSettings)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving()))\n .subscribe(() => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.toastHelperService.showToastForObjectAction(ObjectActionType.SAVE, this.translate.instant('GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS').toLowerCase(), null);\n this.navigateBack(navigateToSelectedRoute);\n });\n }\n\n public getKeysOfNameGeneratorSeparator(): string[] {\n return EnumUtils.getEnumNames(NameGeneratorSeparator);\n }\n\n private getUnsavedChangesNotifierEmitValue(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (!AssertionUtils.isNullOrUndefined(res)) {\n this.saveCustomSettings(res.navigateToSelectedRoute);\n }\n });\n }\n\n private getCustomSettingsAndNameGenerationProperties(): void {\n forkJoin([this.productionOrdersWeaving.getListOfCustomSettings(), this.productionOrdersWeaving.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([listOfCustomSettings, nameGenerationProperties]: [PropertyValue[], string[]]) => {\n this.listOfCustomSettings = listOfCustomSettings;\n this.nameGenerationProperties = nameGenerationProperties;\n this.generateNameConfiguration = JSON.parse(getPropertyValue(this.listOfCustomSettings, 'generateNameConfiguration'));\n this.productionOrderWeavingCustomSettingsForm.controls.namePlaceholderSeparator.patchValue(this.generateNameConfiguration.separator ?? NameGeneratorSeparator.NO_SEPARATOR);\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {canDeactivateRouteWithUnsavedChanges} from '@application/security/can-deactivate-unsaved-changes-notifier.guard';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddProductionOrderWeavingPageComponent} from './add/add-production-order-weaving-page.component';\nimport {ProductionOrderWeavingOverviewPageComponent} from './overview/production-order-weaving-overview-page.component';\nimport {ProductionOrderWeavingSettingsComponent} from './settings/production-order-weaving-settings.component';\n\nconst shared = {parentId: NavigationId.WEAVING_PRODUCTION_ORDER_MODULE};\n\nexport const productionOrderWeavingRoutes = [\n Factory.createPrototypeComponentRoute(ProductionOrderWeavingOverviewPageComponent, {route: '', requiredPermission: Permission.TEXFAB_WEAVE_ORDER_VIEW, id: NavigationId.WEAVE_ORDER, ...shared}),\n Factory.createPrototypeComponentRoute(\n AddProductionOrderWeavingPageComponent,\n {\n route: 'add',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_EDIT,\n reuse: true,\n id: NavigationId.ADD_WEAVE_ORDER,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddProductionOrderWeavingPageComponent,\n {route: 'add/run', requiredPermission: Permission.TEXFAB_WEAVE_QUEUE, id: NavigationId.ADD_WEAVE_ORDER_RUN, ...shared},\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddProductionOrderWeavingPageComponent,\n {\n route: 'add/machine/:id',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_EDIT,\n id: NavigationId.ADD_WEAVE_ORDER_MACHINE,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddProductionOrderWeavingPageComponent,\n {\n route: 'edit/:id',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_VIEW,\n id: NavigationId.EDIT_WEAVE_ORDER,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddProductionOrderWeavingPageComponent,\n {\n route: 'add/:id',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_EDIT,\n id: NavigationId.DUPLICATE_WEAVE_ORDER,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n ProductionOrderWeavingSettingsComponent,\n {\n route: 'settings',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_VIEW,\n id: NavigationId.WEAVE_ORDER_SETTINGS,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n )\n];\n\nexport const productionOrderWeavingRouting: ModuleWithProviders = RouterModule.forChild(productionOrderWeavingRoutes);\n","
\n \n \n \n
\n
\n \n \n
\n \n \n \n\n \n
\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {Editable} from '@domain/editable';\nimport {ProductConfiguration} from '@domain/product-configuration/product-configuration';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionScheduleItemInPathGroupStatus} from '@domain/production-schedule/production-schedule-item-in-path-group-status';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {ProductionSchedulePhase} from '@domain/production-schedule/production-schedule-phase.enum';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {TargetForListOfDrawingsEnum} from '@domain/target-for-list-of-drawings.enum';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {DRAWINGS, Drawings} from '@infrastructure/http/drawing/drawings';\nimport {FINISHINGS, Finishings} from '@infrastructure/http/finishing/finishings';\nimport {MACHINE_QUALITIES, MachineQualities} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {PRODUCT_CONFIGURATIONS, ProductConfigurations} from '@infrastructure/http/product-configuration/product-configuration.interface';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {DrawingLibraryHelper} from '@presentation/pages/texedit/drawing-library/drawing-library-new-listview/drawing-library-helper';\nimport {AddProductionSchedule} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule';\nimport {ADD_PRODUCTION_SCHEDULE} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule.service';\nimport {PRODUCTION_SCHEDULE_PLAN, ProductionSchedulePlan} from '@presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan';\nimport {ConfirmProductionScheduleOnDesktopCommand} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-command';\nimport {ConfirmProductionScheduleOnDesktopResult} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {\n AssertionUtils,\n BidirectionalMap,\n convertUnit,\n GridModel,\n LocalStorageService,\n ObjectUtils,\n SaveTypeForProductionSchedule,\n skeletonViewAnimation,\n TemporaryStateKey,\n TemporaryStateService,\n ToastService,\n TranslateService,\n UnhandledBackendError,\n Unit\n} from '@vdw/angular-component-library';\nimport {cloneDeep, min, noop} from 'lodash-es';\nimport {forkJoin, Observable, Subject} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {\n AddProductionScheduleNavigationData,\n ProductionScheduleData,\n ProductionScheduleNameData,\n ProductionScheduleNavigationData,\n ProductionSchedulePhaseData\n} from './add-production-schedule-navigation-data.type';\nimport {AddProductionScheduleNavigationState} from './add-production-schedule-navigation-state.interface';\nimport {BaseAddProductionScheduleNewPageComponent} from './base-add-production-schedule-new-page.component';\nimport {OrderLinesHelper} from './drawing-library/views/order-lines-helper';\nimport {ProductionScheduleInitialPreparationsNewComponent} from './initial-preparations-new/production-schedule-initial-preparations-new.component';\nimport {MenuItemsCanShowProperties} from './menu-items-new/menu-items-can-show-properties.interface';\nimport {MenuItemsLoadingProperties} from './menu-items-new/menu-items-loading-properties.interface';\nimport {PathContentSettingsDialogData} from './menu-items-new/path-content-settings-dialog-data.interface';\nimport {ProductionScheduleClickEvent} from './menu-items-new/production-schedule-click-event.enum';\nimport {ParametersForPreselection} from './plan/parameters-for-preselection';\nimport {ProductionSchedulePlanNewComponent} from './plan/production-schedule-plan-new.component';\n\n@Component({\n templateUrl: './add-production-schedule-new-page.component.html',\n styleUrls: ['./add-production-schedule-new-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .button-skeleton-wrapper, app-production-schedule-progress-new')]\n})\nexport class AddProductionScheduleNewPageComponent extends BaseAddProductionScheduleNewPageComponent implements OnInit, Editable {\n private static readonly PRODUCTION_SCHEDULE_OVERVIEW_URL = RouteUtils.paths.texFab.productionOrder.absolutePath;\n private static readonly EDIT_PRODUCTION_SCHEDULE_URL: string = RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView.path;\n private static readonly DUPLICATE_PRODUCTION_SCHEDULE_URL: string = RouteUtils.paths.texFab.productionOrder.duplicateProductionOrderNewView.path;\n @ViewChild('initialPreparations') public initialPreparationsComponent: ProductionScheduleInitialPreparationsNewComponent;\n @ViewChild('productionSchedulePlan') public productionSchedulePlanComponent: ProductionSchedulePlanNewComponent;\n public productionOrderCustomSettings: ProductionOrderCustomSettings;\n public productionScheduleToAdd: ProductionSchedule;\n public productionScheduleWithPathLabels: ProductionSchedule;\n public pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks: number;\n public pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit: number;\n public lastProductionSchedulePhase: ProductionSchedulePhase = ProductionSchedulePhase.PRESELECTION;\n public currentProductionSchedulePhase: ProductionSchedulePhase;\n public isVerifyingFromConfigurePhase = false;\n public pathWidths: PathWidth[];\n public isRunningInitialPreparations = false;\n public isRunningInitialPreparationsToDesigns = false;\n public verifyingProductionSchedule = false;\n public isLoadingProductionSchedule = true;\n public completingProductionSchedule = false;\n public decreatingProductionOrder = false;\n public pathContentSettingsDialogData: PathContentSettingsDialogData = {pathContentPanelEnabled: true};\n public preselectedOrderlineIds: number[] = [];\n public preselectedDrawings: ListDrawingConfiguration[] = [];\n public preselectedConfigurationIds: number[] = [];\n public preselectedDesignIds: number[] = [];\n public isPreselectionMade = false;\n public preselectionListId: number;\n public justInitialized = false;\n public saveButtonClicked = false;\n public addProductionScheduleNavigationState: AddProductionScheduleNavigationState | null = null;\n public headerVisible = true;\n\n private alreadySetUpDefaultParameters: boolean;\n private showSkeletonViewForToolbar = false;\n private initialRestZoneLoaded = false;\n private initialFreeZoneLoaded = false;\n private initialPathZoneLoaded = false;\n private initialJuteZoneLoaded = false;\n private nextButtonTouched = false;\n private currentSubscription: Subscription;\n private confirmingProductionSchedule = false;\n private navigationHelperState: any;\n private readonly PRODUCTION_ORDER_TRANSLATION_KEY = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n private readonly localstoragePathContentPanelEnabledKey = 'pathContentPanelEnabled';\n private canLeavePageAfterCheckingGuard = new Subject();\n\n private readonly redirectToBuildStatuses: ProductionScheduleStatus[] = [\n ProductionScheduleStatus.CREATED,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.FAILURE,\n ProductionScheduleStatus.PROCESSING,\n ProductionScheduleStatus.QUEUED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.TO_RECONFIRM,\n ProductionScheduleStatus.TRANSLATED\n ];\n\n public constructor(\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n @Inject(MACHINE_QUALITIES) private readonly machineQualities: MachineQualities,\n @Inject(PRODUCTION_SCHEDULE_PLAN) private readonly productionSchedulePlan: ProductionSchedulePlan,\n @Inject(ADD_PRODUCTION_SCHEDULE) private readonly addProductionSchedule: AddProductionSchedule,\n @Inject(FINISHINGS) private readonly finishings: Finishings,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(PRODUCT_CONFIGURATIONS) private readonly productConfigurations: ProductConfigurations,\n @Inject(DRAWINGS) private drawings: Drawings,\n private readonly httpProductionOrderCustomSettings: HttpProductionOrdersCustomSettingsService,\n private readonly navigationHistory: NavigationHistoryService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly confirmProductionScheduleOnDesktopCommand: ConfirmProductionScheduleOnDesktopCommand,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly formBuilder: FormBuilder,\n private readonly toastService: ToastService,\n private readonly localStorage: LocalStorageService,\n private readonly temporaryStateService: TemporaryStateService,\n private readonly drawingLibraryHelper: DrawingLibraryHelper,\n private readonly orderlinesHelper: OrderLinesHelper,\n activatedRoute: ActivatedRoute\n ) {\n super(activatedRoute);\n }\n\n public ngOnInit(): void {\n this.getRouteStateProperties();\n this.showSkeletonViewForToolbar = this.isCurrentRouteEditProductionScheduleRoute() || this.isCurrentRouteDuplicateProductionScheduleRoute();\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n this.setProductionScheduleInitialPreparationsFormFields();\n this.setPathContentSettingsDialogData();\n\n this.initialiseAddProductionSchedule();\n\n this.navigationHelperState = {productionSchedulePhase: this.currentProductionSchedulePhase};\n }\n\n public onNavigationHelperDestroy(): void {\n this.setFilterModelsToZero();\n\n const productionSchedule = this.initialPreparationsComponent?.getConfiguredProductionSchedule();\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n this.navigationHelperState['productionSchedule'] = productionSchedule;\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.currentProductionSchedulePhase)) {\n this.navigationHelperState['productionSchedulePhase'] = this.currentProductionSchedulePhase;\n }\n\n const productionOrderName = this.productionScheduleInitialPreparationsForm?.value?.name;\n if (!AssertionUtils.isNullOrUndefined(productionOrderName) && productionOrderName !== '' && productionSchedule?.name !== productionOrderName) {\n this.navigationHelperState['name'] = productionOrderName;\n }\n\n this.navigationHelperService.savePartialState>(this.navigationHelperState);\n }\n\n public canShowInitialPreparationsForProductionSchedule(): boolean {\n return (\n this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE &&\n !AssertionUtils.isNullOrUndefined(this.productionOrderCustomSettings) &&\n this.listOfMachineQualityCustomSettings.length > 0\n );\n }\n\n public canShowPreselectionForProductionSchedule(): boolean {\n return this.currentProductionSchedulePhase === ProductionSchedulePhase.PRESELECTION;\n }\n\n public selectedDrawingsChanged(listDrawings: ListDrawing[]): void {\n this.productionScheduleToAdd.designs = [];\n\n listDrawings.forEach((listDrawing: ListDrawing) => {\n if (listDrawing instanceof ListDrawingConfiguration) {\n this.productionScheduleToAdd.designs.push(listDrawing.drawing);\n }\n });\n\n this.initialPreparationsChanged();\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(true);\n }\n\n public restZoneLoaded(): void {\n this.initialRestZoneLoaded = true;\n }\n\n public freeZoneLoaded(): void {\n this.initialFreeZoneLoaded = true;\n }\n\n public pathZoneLoaded(): void {\n this.initialPathZoneLoaded = true;\n }\n\n public juteZoneLoaded(): void {\n this.initialJuteZoneLoaded = true;\n }\n\n public setHeaderVisibility(hideHeader: boolean): void {\n this.headerVisible = !hideHeader;\n }\n\n public productionScheduleInitialised(productionSchedule: ProductionSchedule, productionSchedulePhase?: ProductionSchedulePhase): void {\n const navigationState: {completingPartially?: boolean; phase?: ProductionSchedulePhase} = this.navigationHistory.getState();\n\n const completingPartially = !!navigationState?.completingPartially;\n if (!AssertionUtils.isNullOrUndefined(productionSchedule.finishing)) {\n this.finishings.getOverviewListFinishingById(productionSchedule.finishing.id).subscribe((overviewListFinishing: OverviewListFinishing) => {\n productionSchedule.updateFinishing(FinishingForProductionSchedule.fromOverviewListFinishing(overviewListFinishing));\n });\n }\n\n this.showSkeletonViewForToolbar = false;\n this.productionScheduleToAdd = productionSchedule;\n this.productionScheduleToAdd.completingPartially = completingPartially;\n\n this.isLoadingProductionSchedule = false;\n\n const emptyProductionSchedulePhaseState = {productionSchedulePhase: null} as ProductionSchedulePhaseData;\n const productionSchedulePhaseState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionSchedulePhaseState));\n if (\n !AssertionUtils.isNullOrUndefined(productionSchedulePhaseState) &&\n !ObjectUtils.isDeepEqual(emptyProductionSchedulePhaseState, productionSchedulePhaseState) &&\n !AssertionUtils.isNullOrUndefined(productionSchedulePhaseState.productionSchedulePhase)\n ) {\n if (productionSchedulePhaseState.productionSchedulePhase === ProductionSchedulePhase.BUILD) {\n this.removePathLabelsForBuilderStep();\n }\n\n this.currentProductionSchedulePhase = productionSchedulePhaseState.productionSchedulePhase;\n } else if (navigationState.phase) {\n if (navigationState.phase === ProductionSchedulePhase.BUILD) {\n this.removePathLabelsForBuilderStep();\n }\n this.currentProductionSchedulePhase = navigationState.phase;\n } else if (this.isCurrentRouteDuplicateProductionScheduleRoute()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n this.productionScheduleToAdd.status = ProductionScheduleStatus.DRAFT;\n } else if (!AssertionUtils.isNullOrUndefined(productionSchedulePhase) && productionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n this.currentProductionSchedulePhase = productionSchedulePhase;\n this.removePathLabelsForBuilderStep();\n } else {\n this.setCorrectProductionSchedulePhaseAfterInitialization();\n }\n\n this.updateProducedAmount();\n this.updateProductionScheduleItemInPathGroupStatus();\n this.setProductionScheduleInitialPreparationsFormFieldsValues(this.productionScheduleToAdd);\n }\n\n public initialPreparationsChanged(): void {\n const productionSchedulePhaseOrderMap = new BidirectionalMap([\n [ProductionSchedulePhase.PRESELECTION, 0],\n [ProductionSchedulePhase.CONFIGURE, 1],\n [ProductionSchedulePhase.BUILD, 2],\n [ProductionSchedulePhase.VERIFY, 3],\n [ProductionSchedulePhase.COMPLETE, 4]\n ]);\n\n this.lastProductionSchedulePhase = productionSchedulePhaseOrderMap.getKey(\n min([productionSchedulePhaseOrderMap.getValue(this.lastProductionSchedulePhase), productionSchedulePhaseOrderMap.getValue(ProductionSchedulePhase.BUILD)])\n );\n }\n\n public canShowProductionSchedulePlan(): boolean {\n return (\n !AssertionUtils.isNullOrUndefined(this.productionScheduleToAdd) &&\n !this.isLoadingProductionSchedule &&\n this.currentProductionSchedulePhase !== ProductionSchedulePhase.CONFIGURE &&\n this.currentProductionSchedulePhase !== ProductionSchedulePhase.PRESELECTION\n );\n }\n\n public setProductionSchedulePhase(phase: ProductionSchedulePhase): void {\n this.nextButtonTouched = false;\n this.currentProductionSchedulePhase = phase;\n if (this.lastProductionSchedulePhase < phase) {\n this.lastProductionSchedulePhase = phase;\n }\n }\n\n public productionSchedulePlanChanged(): void {\n this.lastProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n }\n\n public productionScheduleVerified({confirmImmediately, error}: {confirmImmediately: boolean; error: boolean}): void {\n this.verifyingProductionSchedule = false;\n if (!error) {\n this.setProductionSchedulePhase(ProductionSchedulePhase.VERIFY);\n\n if (confirmImmediately) {\n this.nextButtonTouched = true;\n\n if (this.productionScheduleToAdd.isProductionScheduleVerifiedWithNoErrors() && !this.productionScheduleToAdd.hasProductionScheduleErrors()) {\n this.confirmProductionSchedule();\n }\n }\n }\n }\n\n public navigateToOverview(): void {\n this.router.navigateByUrl(AddProductionScheduleNewPageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n\n public areAllFieldsDisabled(): boolean {\n return (\n this.canBeDecreated() ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.PRODUCING ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.PRODUCED_COMPLETELY ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.PRODUCED_PARTIALLY ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.EXECUTING ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.EXECUTED ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.EXECUTED_COMPLETE ||\n this.productionScheduleToAdd?.status === ProductionScheduleStatus.EXECUTED_PARTIAL\n );\n }\n\n public navigateBack(): void {\n this.nextButtonTouched = true;\n\n if (this.productionScheduleToAdd?.canBeModified() && !this.isDuplicatingProductionOrder()) {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.PRESELECTION:\n this.navigateToPreviousRoute();\n break;\n case ProductionSchedulePhase.CONFIGURE:\n let formsAreValid = this.validateConfigurePhaseForms();\n if (formsAreValid) {\n this.setProductionSchedulePhase(ProductionSchedulePhase.PRESELECTION);\n }\n break;\n case ProductionSchedulePhase.BUILD:\n case ProductionSchedulePhase.VERIFY:\n this.navigateBackFromVerify();\n break;\n }\n } else {\n this.navigateToPreviousRoute();\n }\n }\n\n public getMenuItemsLoadingProperties(): MenuItemsLoadingProperties {\n return {\n isLoading: this.isLoadingProductionSchedule,\n preselectionLoading: this.isRunningInitialPreparationsToDesigns,\n nextPhaseLoading: this.isNextPhaseLoading(),\n completeLoading: this.completingProductionSchedule,\n decreateLoading: this.decreatingProductionOrder,\n initialRestZoneLoaded: this.initialRestZoneLoaded,\n initialFreeZoneLoaded: this.initialFreeZoneLoaded,\n initialPathZoneLoaded: this.initialPathZoneLoaded,\n initialJuteZoneLoaded: this.initialJuteZoneLoaded\n };\n }\n\n public getMenuItemsCanShowProperties(): MenuItemsCanShowProperties {\n return {\n canShowInvalidFormMessageError: this.canShowInvalidFormMessageError(),\n canShowNavigateToNextPhaseButton: this.canShowProductionScheduleNavigationForPhases(),\n canShowCompleteButton: this.productionScheduleToAdd?.completingPartially,\n canShowDecreatedButton: this.canBeDecreated(),\n canShowCancelButton: this.canShowCancelButton()\n };\n }\n\n public confirmProductionSchedule(): void {\n if (!this.confirmingProductionSchedule) {\n this.confirmingProductionSchedule = true;\n\n this.confirmProductionScheduleOnDesktopCommand\n .execute(this.productionScheduleToAdd, this.productionOrderCustomSettings)\n .pipe(finalize(() => (this.confirmingProductionSchedule = false)))\n .subscribe((confirmProductionScheduleOnDesktopResult: ConfirmProductionScheduleOnDesktopResult) => {\n if (confirmProductionScheduleOnDesktopResult === ConfirmProductionScheduleOnDesktopResult.CONFIRMED) {\n this.productionSchedulePlan.disableUnsavedChanges();\n this.router.navigateByUrl(AddProductionScheduleNewPageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n } else if (confirmProductionScheduleOnDesktopResult === ConfirmProductionScheduleOnDesktopResult.PLAN_ADJUSTMENT_NEEDED) {\n this.productionScheduleToAdd.status = ProductionScheduleStatus.DRAFT;\n this.productionSchedules.updateWithMachineQualityChanged(this.productionScheduleToAdd).subscribe(noop);\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.VERIFY) {\n this.navigateBack();\n }\n }\n });\n }\n }\n\n public canShowSkeletonViewForToolbar(): boolean {\n return this.showSkeletonViewForToolbar;\n }\n\n public canConfirmProductionSchedule(): boolean {\n return this.productionScheduleToAdd.isProductionScheduleVerifiedWithNoErrors() && !this.productionScheduleToAdd.hasProductionScheduleErrors();\n }\n\n public isDirty(): boolean {\n return this.addProductionSchedule.hasUnsavedFormChanges();\n }\n\n public hasUnsavedBuildingChanges(): boolean {\n return this.productionSchedulePlan.hasUnsavedChanges(true);\n }\n\n public notifyChangesToForm(isDirty: boolean): void {\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(isDirty);\n }\n\n public canShowProductionScheduleNavigationForPhases(): boolean {\n return this.canShowSkeletonViewForToolbar() || this.productionScheduleToAdd?.canBeModified();\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const canShowInvalidFormMessageError = this.nextButtonTouched && !this.canNavigateToNextPhase();\n\n if (this.nextButtonTouched && !canShowInvalidFormMessageError) {\n this.nextButtonTouched = false;\n }\n\n return canShowInvalidFormMessageError;\n }\n\n public getInvalidFormMessageError(): string {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.VERIFY:\n case ProductionSchedulePhase.CONFIGURE:\n return 'GENERAL.ERRORS.CHECK_INVALID_FIELDS';\n case ProductionSchedulePhase.PRESELECTION:\n return this.translate.instant('GENERAL.ERRORS.NO_OBJECT_CHOSEN', {object: this.translate.instant('DESIGN_LIBRARY.DESIGN', {count: 2}).toLowerCase()});\n case ProductionSchedulePhase.BUILD:\n return this.productionSchedulePlan.hasUnsavedChanges(true)\n ? 'PRODUCTION_ORDER.ERRORS.CHANGES_IN_PROGRESS'\n : this.translate.instant('GENERAL.ERRORS.NO_OBJECT_ADDED', {object: this.translate.instant('DESIGN_LIBRARY.DESIGN', {count: 2}).toLowerCase()});\n }\n }\n\n public saveConfigurationPhaseFromLeaveDialog(): Subject {\n this.nextButtonTouched = true;\n const formsAreValid = this.validateConfigurePhaseForms();\n if (this.canNavigateToNextPhase() && formsAreValid) {\n this.productionScheduleToAdd = this.initialPreparationsComponent.getProductionSchedule();\n this.isRunningInitialPreparations = true;\n\n this.isCreatingNewProductionSchedule()\n ? this.createProductionSchedule(ProductionSchedulePhase.BUILD, this.qualityHasChanged(), false)\n : this.initialPreparationsCompleted(ProductionSchedulePhase.BUILD, this.qualityHasChanged(), false);\n } else {\n this.canLeavePageAfterCheckingGuard.next(false);\n }\n\n return this.canLeavePageAfterCheckingGuard;\n }\n\n public navigateToNextPhase(): void {\n this.nextButtonTouched = true;\n\n let formsAreValid = true;\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n formsAreValid = this.validateConfigurePhaseForms();\n }\n\n if (this.canNavigateToNextPhase() && formsAreValid) {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.CONFIGURE:\n this.productionScheduleToAdd = this.initialPreparationsComponent.getProductionSchedule();\n this.isRunningInitialPreparations = true;\n this.isCreatingNewProductionSchedule()\n ? this.createProductionSchedule(ProductionSchedulePhase.BUILD, this.qualityHasChanged())\n : this.initialPreparationsCompleted(ProductionSchedulePhase.BUILD, this.qualityHasChanged());\n break;\n case ProductionSchedulePhase.PRESELECTION:\n this.isPreselectionMade = true;\n if (AssertionUtils.isNullOrUndefined(this.preselectionListId)) {\n this.createNewPreselectedOrderlinesAndDrawingsList();\n } else {\n this.updatePreselectedOrderlinesAndDrawings();\n }\n this.setProductionSchedulePhase(ProductionSchedulePhase.CONFIGURE);\n break;\n case ProductionSchedulePhase.BUILD:\n this.productionSchedulePlanComponent.verifyProductionSchedule();\n break;\n case ProductionSchedulePhase.VERIFY: {\n this.confirmProductionSchedule();\n }\n }\n }\n\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n }\n\n public isNextPhaseLoading(): boolean {\n return this.productionSchedulePlanComponent?.isVerifyingProductionSchedule || this.verifyingProductionSchedule || this.isRunningInitialPreparations || this.confirmingProductionSchedule;\n }\n\n public navigateToPreselection(): void {\n this.nextButtonTouched = true;\n\n this.setProductionSchedulePhase(ProductionSchedulePhase.PRESELECTION);\n\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n }\n\n public completeProductionSchedule(): void {\n this.completingProductionSchedule = true;\n this.productionSchedulePlan.disableUnsavedChanges();\n this.productionSchedulePlanComponent\n .completePartially()\n .pipe(\n finalize(() => (this.completingProductionSchedule = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.navigateToOverview();\n });\n }\n\n public decreateProductionOrder(): void {\n this.decreatingProductionOrder = true;\n\n const decreatedProductionOrder = cloneDeep(this.productionScheduleToAdd);\n decreatedProductionOrder.id = `${decreatedProductionOrder.id}`;\n decreatedProductionOrder.status = ProductionScheduleStatus.DRAFT;\n decreatedProductionOrder.removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets();\n\n this.productionSchedules\n .decreateProductionOrder(decreatedProductionOrder)\n .pipe(\n finalize(() => (this.decreatingProductionOrder = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.productionScheduleToAdd = decreatedProductionOrder;\n this.currentProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n });\n }\n\n public canBeDecreated(): boolean {\n return (\n this.productionScheduleToAdd?.canBeDecreated() ||\n [ProductionScheduleStatus.ARRIVED, ProductionScheduleStatus.SENDING, ProductionScheduleStatus.QUEUING, ProductionScheduleStatus.QUEUED].includes(this.productionScheduleToAdd?.status)\n );\n }\n\n public canShowCancelButton(): boolean {\n return this.currentProductionSchedulePhase === ProductionSchedulePhase.VERIFY && this.currentSubscription?.hasPermission(Permission.TEXFAB_VERIFY_NEW);\n }\n\n public onClickEvent(type: ProductionScheduleClickEvent): void {\n switch (type) {\n case ProductionScheduleClickEvent.PRESELECTION:\n if (this.validateConfigurePhaseForms()) {\n this.navigateToPreselection();\n }\n break;\n case ProductionScheduleClickEvent.NEXT_PHASE:\n this.navigateToNextPhase();\n break;\n case ProductionScheduleClickEvent.COMPLETE:\n this.completeProductionSchedule();\n break;\n case ProductionScheduleClickEvent.DECREATE:\n this.decreateProductionOrder();\n break;\n case ProductionScheduleClickEvent.SAVE:\n this.saveProductionSchedule(SaveTypeForProductionSchedule.SAVE);\n break;\n case ProductionScheduleClickEvent.SAVE_AND_CREATE_NEW:\n this.saveProductionSchedule(SaveTypeForProductionSchedule.SAVE_AND_CREATE_NEW);\n break;\n case ProductionScheduleClickEvent.SAVE_AND_GO_TO_PRESELECTION:\n this.saveProductionSchedule(SaveTypeForProductionSchedule.SAVE_AND_GO_TO_PRESELECTION);\n break;\n case ProductionScheduleClickEvent.SAVE_AND_QUIT:\n this.saveProductionSchedule(SaveTypeForProductionSchedule.SAVE_AND_QUIT);\n break;\n case ProductionScheduleClickEvent.CANCEL:\n this.navigateToPreviousRoute();\n break;\n }\n }\n\n public onProductionSchedulePhaseClicked(event: ProductionSchedulePhase): void {\n if (this.currentProductionSchedulePhase === event) {\n return;\n }\n\n const {status} = this.productionScheduleToAdd;\n this.nextButtonTouched = true;\n\n let formsAreValid = true;\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n formsAreValid = this.validateConfigurePhaseForms();\n }\n\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.PRESELECTION && (event === ProductionSchedulePhase.BUILD || event === ProductionSchedulePhase.VERIFY)) {\n if (!AssertionUtils.isNullOrUndefined(this.productionScheduleToAdd.id)) {\n this.updatePreselectedOrderlinesAndDrawings();\n this.setProductionSchedulePhase(event);\n }\n return;\n } else if (this.currentProductionSchedulePhase === ProductionSchedulePhase.PRESELECTION && event === ProductionSchedulePhase.CONFIGURE) {\n if (AssertionUtils.isNullOrUndefined(this.preselectionListId)) {\n this.createNewPreselectedOrderlinesAndDrawingsList();\n } else {\n this.updatePreselectedOrderlinesAndDrawings();\n }\n\n const productionSchedule = this.temporaryStateService.getTemporaryState(TemporaryStateKey.PRODUCTION_SCHEDULE);\n if (!AssertionUtils.isNullOrUndefined(productionSchedule)) {\n this.productionScheduleToAdd = productionSchedule;\n this.setProductionScheduleInitialPreparationsFormFieldsValues(productionSchedule);\n }\n } else if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE && event !== ProductionSchedulePhase.PRESELECTION) {\n if (this.areAllFieldsDisabled() && event === ProductionSchedulePhase.VERIFY) {\n this.setProductionSchedulePhase(ProductionSchedulePhase.VERIFY);\n return;\n }\n\n if (this.validateConfigurePhaseForms()) {\n this.handleConfigurePhase(event);\n }\n return;\n } else if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE && event === ProductionSchedulePhase.PRESELECTION) {\n if (formsAreValid) {\n this.setProductionSchedulePhase(event);\n } else {\n return;\n }\n } else if (event === ProductionSchedulePhase.VERIFY) {\n if (this.redirectToBuildStatuses.includes(status)) {\n this.setProductionSchedulePhase(ProductionSchedulePhase.BUILD);\n return;\n }\n\n this.productionSchedulePlanComponent.verifyProductionSchedule();\n return;\n } else if (this.currentProductionSchedulePhase === ProductionSchedulePhase.VERIFY && event === ProductionSchedulePhase.BUILD) {\n this.navigateBackFromVerify();\n } else if (this.currentProductionSchedulePhase === ProductionSchedulePhase.VERIFY) {\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit =\n this.productionScheduleToAdd.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit;\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks =\n this.productionScheduleToAdd.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks;\n }\n\n this.setProductionSchedulePhase(event);\n }\n\n public isCreatingNewProductionSchedule(): boolean {\n return !this.isCurrentRouteEditProductionScheduleRoute() && !this.isCurrentRouteDuplicateProductionScheduleRoute();\n }\n\n public getHeaderIcon(): string {\n return this.isEditingProductionOrder() ? 'details-blue' : 'add-blue';\n }\n\n public getActionText(): string {\n const title = this.isCurrentRouteEditProductionScheduleRoute() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: this.translate.instant(this.PRODUCTION_ORDER_TRANSLATION_KEY, {count: 1}).toLowerCase()});\n }\n\n public preselectedOrderlineIdsChanged(orderlineIds: number[]): void {\n this.preselectedOrderlineIds = orderlineIds;\n }\n\n public preselectedDrawingsChanged(drawings: ListDrawingConfiguration[]): void {\n this.preselectedDrawings = drawings;\n }\n\n public preselectedDrawingIdsChanged(drawingIds: number[]): void {\n this.preselectedDesignIds = drawingIds;\n }\n\n public preselectedConfigurationIdsChanged(configurationIds: number[]): void {\n this.preselectedConfigurationIds = configurationIds;\n }\n\n public onPathContentSettingsDialogDataChanged(event: PathContentSettingsDialogData): void {\n this.localStorage.set(this.localstoragePathContentPanelEnabledKey, event.pathContentPanelEnabled);\n this.pathContentSettingsDialogData.pathContentPanelEnabled = event.pathContentPanelEnabled;\n this.productionSchedulePlanComponent.onPathContentSettingsDialogDataChanged();\n }\n\n public validateConfigurePhaseForms(): boolean {\n const zonesLoaded = this.initialRestZoneLoaded && this.initialFreeZoneLoaded && this.initialJuteZoneLoaded && this.initialPathZoneLoaded;\n return this.initialPreparationsComponent?.validateForms() && zonesLoaded;\n }\n\n private setCorrectProductionSchedulePhaseAfterInitialization(): void {\n if (!this.productionScheduleToAdd.isDraft()) {\n if (this.hasStatusThatShouldBeSentToVerifyStep(this.productionScheduleToAdd.status) || this.productionScheduleToAdd.step === ProductionSchedulePhase.VERIFY) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.VERIFY;\n } else {\n this.removePathLabelsForBuilderStep();\n this.currentProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n }\n } else if (!this.productionScheduleToAdd.hasBeenConfigured()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.PRESELECTION;\n } else {\n this.removePathLabelsForBuilderStep();\n this.currentProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n }\n }\n\n private removePathLabelsForBuilderStep(): void {\n this.productionScheduleToAdd.removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets();\n this.productionSchedulePlan.cancelOngoingRecoloring();\n }\n\n private saveProductionSchedule(saveType: SaveTypeForProductionSchedule): void {\n this.saveButtonClicked = true;\n this.productionSchedulePlan.manualSaveProductionSchedule(this.productionScheduleToAdd.id.toString(), this.currentProductionSchedulePhase);\n\n if (saveType === SaveTypeForProductionSchedule.SAVE_AND_CREATE_NEW) {\n this.setFilterModelsToZero();\n this.navigationHelperState['productionSchedule'] = this.getNewScheduleWithOldScheduleInformation();\n this.router.navigate([RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView.absolutePath], {\n state: {\n goToPreselection: false,\n preselectionId: this.preselectionListId\n }\n });\n } else if (saveType === SaveTypeForProductionSchedule.SAVE_AND_GO_TO_PRESELECTION) {\n this.setFilterModelsToZero();\n this.router.navigate([RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView.absolutePath], {\n state: {\n goToPreselection: true,\n preselectionId: null\n }\n });\n } else if (saveType === SaveTypeForProductionSchedule.SAVE_AND_QUIT) {\n this.setFilterModelsToZero();\n this.router.navigate([RouteUtils.paths.texFab.productionOrder.absolutePath]);\n }\n\n setTimeout(() => {\n this.saveButtonClicked = false;\n }, 500);\n }\n\n private setFilterModelsToZero(): void {\n this.drawingLibraryHelper.savedFilterModel = null;\n this.orderlinesHelper.savedFilterModel = null;\n }\n\n private getNewScheduleWithOldScheduleInformation(): ProductionSchedule {\n const productionSchedule = this.productionScheduleToAdd;\n\n productionSchedule.name = null;\n productionSchedule.productionSchedulePathsOfColoredYarnSets = [];\n productionSchedule.completingPartially = false;\n productionSchedule.runId = undefined;\n productionSchedule.orderLines = [];\n productionSchedule.designs = [];\n\n return productionSchedule;\n }\n\n private handleConfigurePhase(nextPhase: ProductionSchedulePhase = ProductionSchedulePhase.BUILD): void {\n this.productionScheduleToAdd = this.initialPreparationsComponent.getProductionSchedule();\n this.isRunningInitialPreparations = true;\n this.isCreatingNewProductionSchedule() ? this.createProductionSchedule(nextPhase, this.qualityHasChanged()) : this.initialPreparationsCompleted(nextPhase, this.qualityHasChanged());\n }\n\n private updatePreselectedOrderlinesAndDrawings(): void {\n if (!AssertionUtils.isNullOrUndefined(this.preselectionListId)) {\n this.productionSchedules\n .updatePreselectionList(this.preselectionListId, this.preselectedDesignIds, this.preselectedOrderlineIds, null, this.preselectedConfigurationIds)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe();\n }\n }\n\n private createNewPreselectedOrderlinesAndDrawingsList(): void {\n if (!AssertionUtils.isEmpty(this.preselectedConfigurationIds) || !AssertionUtils.isEmpty(this.preselectedDesignIds) || !AssertionUtils.isEmpty(this.preselectedOrderlineIds)) {\n this.productionSchedules\n .savePreselectionList(0, this.preselectedDesignIds, this.preselectedOrderlineIds, null, this.preselectedConfigurationIds)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((preselectionListId: number) => {\n this.preselectionListId = preselectionListId;\n if (!AssertionUtils.isNullOrUndefined(this.productionScheduleToAdd)) {\n this.productionScheduleToAdd.preselectionId = preselectionListId;\n }\n });\n }\n }\n\n private qualityHasChanged(): boolean {\n const oldQualityId = this.initialPreparationsComponent.oldMachineQuality?.id;\n return !AssertionUtils.isNullOrUndefined(oldQualityId) && oldQualityId !== this.productionScheduleToAdd.machineQuality.id;\n }\n\n private hasStatusThatShouldBeSentToVerifyStep(status: ProductionScheduleStatus): boolean {\n return (\n status === ProductionScheduleStatus.EXECUTED ||\n status === ProductionScheduleStatus.EXECUTED_COMPLETE ||\n status === ProductionScheduleStatus.EXECUTED_PARTIAL ||\n status === ProductionScheduleStatus.EXECUTING ||\n status === ProductionScheduleStatus.FINALIZED ||\n status === ProductionScheduleStatus.FINALIZING ||\n status === ProductionScheduleStatus.TRANSLATING ||\n status === ProductionScheduleStatus.TRANSLATED ||\n status === ProductionScheduleStatus.SENDING ||\n status === ProductionScheduleStatus.ARRIVED ||\n status === ProductionScheduleStatus.QUEUED ||\n status === ProductionScheduleStatus.QUEUING ||\n status === ProductionScheduleStatus.FAILURE ||\n status === ProductionScheduleStatus.PROCESSED ||\n status === ProductionScheduleStatus.PROCESSING ||\n status === ProductionScheduleStatus.TO_RECONFIRM ||\n status === ProductionScheduleStatus.CANCELLED ||\n status === ProductionScheduleStatus.TO_PLAN ||\n status === ProductionScheduleStatus.NO_PRODUCTION_INFORMATION_RECEIVED ||\n status === ProductionScheduleStatus.PRODUCED_PARTIALLY ||\n status === ProductionScheduleStatus.PRODUCED_COMPLETELY ||\n status === ProductionScheduleStatus.PRODUCING ||\n status === ProductionScheduleStatus.REPLANNED_WITH_WARNINGS ||\n status === ProductionScheduleStatus.REPLANNED ||\n status === ProductionScheduleStatus.REPLANNING ||\n status === ProductionScheduleStatus.PLANNED ||\n status === ProductionScheduleStatus.PLANNING ||\n status === ProductionScheduleStatus.SENT ||\n status === ProductionScheduleStatus.CREATED\n );\n }\n\n private canNavigateToNextPhase(): boolean {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.CONFIGURE:\n return this.initialPreparationsComponent?.getConfiguredProductionSchedule()?.hasBeenConfigured();\n case ProductionSchedulePhase.PRESELECTION:\n return true;\n case ProductionSchedulePhase.BUILD:\n return this.productionSchedulePlan.canVerify();\n case ProductionSchedulePhase.VERIFY:\n return !this.productionSchedulePlanComponent?.isVerifyingProductionSchedule && this.canConfirmProductionSchedule();\n default:\n return false;\n }\n }\n\n private navigateBackFromVerify(): void {\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit =\n this.productionScheduleToAdd.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit;\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks =\n this.productionScheduleToAdd.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks;\n this.productionSchedulePlanComponent.back();\n }\n\n private createProductionSchedule(nextPhase: ProductionSchedulePhase, isMachineQualityChanged: boolean = false, routeToNextRoute: boolean = true): void {\n const practicalPickDensityUnit: Unit = Unit[this.getDefaultParameterForPropertyNameOfMachineQualitySettings('pickDensityUnit').propertyValue as string];\n const practicalPickDensityInPicksInMM = convertUnit({\n from: {\n value: this.productionScheduleInitialPreparationsForm.get('practicalPickDensity').value,\n unit: practicalPickDensityUnit\n },\n to: Unit.PICKS_PER_MILLIMETER\n });\n\n this.productionSchedules\n .createProductionSchedule(\n this.productionScheduleToAdd.machine,\n this.productionScheduleToAdd.machineQuality,\n practicalPickDensityInPicksInMM,\n this.productionScheduleToAdd.coloredYarnSets,\n this.productionScheduleToAdd.creel,\n this.productionScheduleToAdd.runId,\n this.productionScheduleToAdd.mappingForCurrentPositionOnMachine,\n this.productionScheduleInitialPreparationsForm.value.productConfiguration,\n this.productionScheduleToAdd.isSample,\n this.productionScheduleToAdd.canAddJute,\n this.productionScheduleToAdd.hmiVersion,\n this.productionScheduleToAdd.addToPlanboard,\n this.preselectionListId\n )\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionSchedule: ProductionSchedule) => {\n this.productionScheduleToAdd.id = productionSchedule.id;\n this.productionScheduleToAdd.coloredYarnSets = productionSchedule.coloredYarnSets;\n this.productionScheduleToAdd.dateCreated = new Date();\n this.productionScheduleToAdd.preselectionId = productionSchedule.preselectionId;\n this.preselectionListId = productionSchedule.preselectionId;\n\n if (this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.length > 0) {\n this.initialiseProductionSchedulePathsOfColoredYarnSets(productionSchedule);\n }\n\n this.initialPreparationsCompleted(nextPhase, isMachineQualityChanged, routeToNextRoute);\n });\n }\n\n private navigateToEditProductionSchedule(id: string, phase: ProductionSchedulePhase): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView.absolutePath.replace(':id', id), {\n state: {phase, startRoute: this.addProductionScheduleNavigationState.startRoute}\n });\n }\n\n private getPreselectedOrderlinesAndDrawings(): void {\n this.productionSchedules\n .getPreselectionListById(this.preselectionListId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((preselectionParameters: ParametersForPreselection) => {\n this.preselectedOrderlineIds = preselectionParameters.orderlinesIds;\n this.preselectedDesignIds = preselectionParameters.designIds;\n this.preselectedConfigurationIds = preselectionParameters.configurationIds;\n this.getPreselectedDrawings();\n });\n }\n\n private getPreselectedDrawings(): void {\n const endRow = Math.max(this.preselectedDesignIds?.length ?? 0, this.preselectedConfigurationIds?.length ?? 0);\n const startRow = 0;\n const sortModel = [];\n let filterModel: any = this.drawingLibraryHelper.getPreselectedDrawingAndConfigurationIdsFilterModel(this.preselectedDesignIds, this.preselectedConfigurationIds);\n\n if (!AssertionUtils.isNullOrUndefined(filterModel)) {\n const gridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n\n this.drawings\n .getAllWithoutImageDataFromGridModel(TargetForListOfDrawingsEnum.PRODUCTION_ORDER, gridModel, true)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfDrawings: Drawing[]) => {\n this.preselectedDrawings = listOfDrawings.map((drawing: Drawing) => new ListDrawingConfiguration(drawing, 0));\n });\n }\n }\n\n private initialiseProductionSchedulePathsOfColoredYarnSets(productionSchedule: ProductionSchedule): void {\n this.productionSchedules\n .setProductionSchedulePlan(`${this.productionScheduleToAdd.id}`, this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets, productionSchedule.machineQuality.reedDensity * 1000)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe();\n }\n\n private initialPreparationsCompleted(nextPhase: ProductionSchedulePhase, isMachineQualityChanged: boolean = false, routeToNextRoute: boolean = true): void {\n this.saveButtonClicked = true;\n forkJoin([\n this.machineQualities.getPathWidths(this.productionScheduleToAdd.machineQuality.id),\n this.productionSchedules.updateWithMachineQualityChanged(this.productionScheduleToAdd, isMachineQualityChanged)\n ])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([pathWidths]: [PathWidth[], void]) => {\n this.pathWidths = pathWidths;\n\n const requests: Observable[] = [this.productionSchedules.getById(this.productionScheduleToAdd.id)];\n\n forkJoin(requests)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([productionSchedule]: [ProductionSchedule]) => {\n this.productionScheduleToAdd.warnings = productionSchedule.warnings;\n this.productionScheduleToAdd.errors = productionSchedule.errors;\n this.productionScheduleToAdd.coloredYarnSets = productionSchedule.coloredYarnSets;\n if (productionSchedule.coloredYarnSets.length === productionSchedule.productionSchedulePathsOfColoredYarnSets.length) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets = productionSchedule.productionSchedulePathsOfColoredYarnSets;\n }\n\n if (nextPhase !== ProductionSchedulePhase.VERIFY) {\n this.productionScheduleToAdd.removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets();\n }\n\n if (!this.isEditingProductionOrder()) {\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.CREATED_OBJECT', {\n object: this.translate.instant('PRODUCTION_ORDER.PRODUCTION_ORDER', {count: 1}),\n name: '',\n count: 1\n })\n });\n\n this.productionSchedulePlan.disableUnsavedChanges();\n\n this.justInitialized = true;\n if (routeToNextRoute) {\n this.navigateToEditProductionSchedule(`${this.productionScheduleToAdd.id}`, nextPhase);\n }\n }\n\n if (routeToNextRoute) {\n this.setProductionSchedulePhase(nextPhase);\n }\n\n this.isRunningInitialPreparations = false;\n this.isRunningInitialPreparationsToDesigns = false;\n this.canLeavePageAfterCheckingGuard.next(true);\n },\n error: this.stopRunningInitialPreparationsAndThrowError()\n });\n },\n error: this.stopRunningInitialPreparationsAndThrowError()\n });\n }\n\n private initialiseAddProductionSchedule(): void {\n forkJoin([this.machineQualities.getListOfCustomSettings(), this.httpProductionOrderCustomSettings.get(), this.httpProductionOrderCustomSettings.hasAlreadyAdjusted()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([listOfMachineQualityCustomSettings, productionOrdersCustomSettings, alreadyAdjustedDefaultParameters]: [PropertyValue[], ProductionOrderCustomSettings, boolean]) => {\n this.listOfMachineQualityCustomSettings = listOfMachineQualityCustomSettings;\n\n this.customSettingsForProductionScheduleChosen(alreadyAdjustedDefaultParameters, productionOrdersCustomSettings);\n\n const emptyProductionSchedulePhaseState = {productionSchedulePhase: null} as ProductionSchedulePhaseData;\n\n const productionSchedulePhaseState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionSchedulePhaseState), true);\n\n const preselectionState: {preselectionId?: number; goToPreselection?: boolean} = this.navigationHistory.getState();\n const emptyProductionScheduleState = {productionSchedule: null} as ProductionScheduleData;\n const productionScheduleState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionScheduleState), true);\n this.hasProductionScheduleState = !AssertionUtils.isNullOrUndefined(productionScheduleState) && !ObjectUtils.isDeepEqual(emptyProductionScheduleState, productionScheduleState);\n\n if (this.isCreatingNewProductionSchedule()) {\n this.initialiseNewProductionSchedule(preselectionState, productionScheduleState, productionSchedulePhaseState?.productionSchedulePhase as ProductionSchedulePhase);\n } else {\n this.initialiseExistingProductionSchedule(\n this.hasProductionScheduleState ? productionScheduleState.productionSchedule : null,\n productionSchedulePhaseState?.productionSchedulePhase as ProductionSchedulePhase\n );\n }\n },\n error: this.navigateToOverviewAndThrowError()\n });\n\n this.productionSchedulePlan.currentUpdatedProductionSchedule.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((productionSchedule: ProductionSchedule) => {\n this.productionScheduleToAdd = productionSchedule;\n\n this.setProductionScheduleInitialPreparationsFormFieldsValues(productionSchedule);\n });\n }\n\n private initialiseNewProductionSchedule(preselectionState: any, productionScheduleState: any, productionSchedulePhaseState: ProductionSchedulePhase): void {\n if ((!preselectionState.goToPreselection && !AssertionUtils.isNullOrUndefined(preselectionState.goToPreselection)) || productionSchedulePhaseState === ProductionSchedulePhase.CONFIGURE) {\n this.preselectionListId = productionScheduleState.productionSchedule.preselectionId;\n if (!AssertionUtils.isNullOrUndefined(this.preselectionListId)) {\n this.getPreselectedOrderlinesAndDrawings();\n }\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n } else {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.PRESELECTION;\n }\n\n if (this.isAddingProductionOrderForProductConfiguration()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n this.makePreselectionListFromProductConfiguration();\n }\n\n if (this.hasProductionScheduleState) {\n this.productionScheduleToAdd = productionScheduleState.productionSchedule;\n this.setProductionScheduleInitialPreparationsFormFieldsValues(this.productionScheduleToAdd);\n } else {\n this.productionScheduleToAdd = ProductionSchedule.createEmptyProductionSchedule();\n }\n\n this.isLoadingProductionSchedule = false;\n }\n\n private makePreselectionListFromProductConfiguration(): void {\n const productConfigurationId: number = this.activatedRoute.snapshot.params.id;\n\n this.productConfigurations\n .getById(productConfigurationId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productConfiguration: ProductConfiguration) => {\n this.preselectedDesignIds = productConfiguration.designs.map((design: Drawing) => design.id);\n this.createNewPreselectedOrderlinesAndDrawingsList();\n });\n }\n\n private setProductionScheduleInitialPreparationsFormFieldsValues(productionSchedule: ProductionSchedule): void {\n const emptyProductionScheduleNameState = {name: null} as ProductionScheduleNameData;\n const productionScheduleNameState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionScheduleNameState));\n const hasProductionScheduleNameState = !AssertionUtils.isNullOrUndefined(productionScheduleNameState) && !ObjectUtils.isDeepEqual(emptyProductionScheduleNameState, productionScheduleNameState);\n\n this.productionScheduleInitialPreparationsForm?.patchValue({\n name: hasProductionScheduleNameState ? productionScheduleNameState.name : productionSchedule.name,\n machine: productionSchedule.machine,\n machineQuality: productionSchedule.machineQuality,\n practicalPickDensity: productionSchedule.practicalPickDensityInPicksPerMM,\n productConfiguration: productionSchedule.productConfiguration,\n creel: productionSchedule.creel\n });\n\n if (hasProductionScheduleNameState) {\n this.productionScheduleInitialPreparationsForm.controls.name.markAsTouched();\n }\n }\n\n private setProductionScheduleInitialPreparationsFormFields(): void {\n this.productionScheduleInitialPreparationsForm = this.formBuilder.group({\n name: this.formBuilder.control(null, [Validators.required, Validators.pattern('^[A-Za-z0-9_]*$'), Validators.maxLength(this.MAX_LENGTH_FOR_PRODUCTION_ORDER_NAME)]),\n machine: this.formBuilder.control(null, Validators.required),\n machineQuality: this.formBuilder.control(null, Validators.required),\n practicalPickDensity: this.formBuilder.control(null, [Validators.required, Validators.min(1)]),\n productConfiguration: this.formBuilder.control(null),\n creel: this.formBuilder.control(null, Validators.required),\n buggy: this.formBuilder.control(null)\n });\n }\n\n private setPathContentSettingsDialogData(): void {\n const pathContentPanelEnabled = this.localStorage.get(this.localstoragePathContentPanelEnabledKey);\n this.pathContentSettingsDialogData.pathContentPanelEnabled = pathContentPanelEnabled !== null ? !!pathContentPanelEnabled : true;\n }\n\n private initialiseExistingProductionSchedule(productionScheduleState: ProductionSchedule, productionSchedulePhaseState: ProductionSchedulePhase): void {\n const isDuplicatingProductionSchedule = this.isCurrentRouteDuplicateProductionScheduleRoute();\n const getProductionScheduleObservable = isDuplicatingProductionSchedule\n ? this.productionSchedules.getDuplicatedProductionOrder(this.activatedRoute.snapshot.params.id)\n : this.productionSchedules.getById(this.activatedRoute.snapshot.params.id);\n\n this.isLoadingProductionSchedule = true;\n\n if (productionScheduleState) {\n this.setExistingProductionSchedule(productionScheduleState, productionSchedulePhaseState);\n } else {\n getProductionScheduleObservable.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe({\n next: (productionSchedule: ProductionSchedule) => {\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks =\n productionSchedule.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInPicks;\n this.pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit =\n productionSchedule.getPathLabelsOrNonProductionItemsLengthInPicksFromLongestPath().pathLabelsOrNonProductionItemsFromLongestPathLengthInCommercialUnit;\n\n this.preselectionListId = productionSchedule.preselectionId;\n if (!AssertionUtils.isNullOrUndefined(this.preselectionListId)) {\n this.getPreselectedOrderlinesAndDrawings();\n }\n this.setExistingProductionSchedule(productionSchedule, productionSchedulePhaseState);\n },\n error: this.navigateToOverviewAndThrowError()\n });\n }\n }\n\n private setExistingProductionSchedule(productionSchedule: ProductionSchedule, productionSchedulePhaseState?: ProductionSchedulePhase): void {\n const isDuplicatingProductionSchedule = this.isCurrentRouteDuplicateProductionScheduleRoute();\n\n forkJoin([\n this.productionSchedules.getDesignsAndOrderLines(isDuplicatingProductionSchedule ? this.activatedRoute.snapshot.params.id : productionSchedule.id, productionSchedule.status),\n this.machineQualities.getPathWidths(productionSchedule.machineQuality.id)\n ])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([{designs, orderLines}, pathWidths]: [{designs: Drawing[]; orderLines: ProductionScheduleOrderLine[]}, PathWidth[]]) => {\n productionSchedule.designs = designs;\n productionSchedule.orderLines = orderLines;\n\n productionSchedule.updateOrderLineQuantities();\n this.pathWidths = pathWidths;\n\n if (isDuplicatingProductionSchedule) {\n this.duplicateProductionSchedule(productionSchedule);\n } else {\n this.productionScheduleInitialised(productionSchedule, productionSchedulePhaseState);\n }\n },\n error: this.navigateToOverviewAndThrowError()\n });\n }\n\n private isCurrentRouteEditProductionScheduleRoute(): boolean {\n return this.activatedRoute.snapshot.routeConfig?.path === AddProductionScheduleNewPageComponent.EDIT_PRODUCTION_SCHEDULE_URL;\n }\n\n private isCurrentRouteDuplicateProductionScheduleRoute(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === AddProductionScheduleNewPageComponent.DUPLICATE_PRODUCTION_SCHEDULE_URL;\n }\n\n private customSettingsForProductionScheduleChosen(adjusted: boolean, productionOrderCustomSettings: ProductionOrderCustomSettings): void {\n this.alreadySetUpDefaultParameters = adjusted;\n if (adjusted) {\n this.productionOrderCustomSettings = productionOrderCustomSettings;\n } else {\n if (!this.alreadySetUpDefaultParameters) {\n this.router.navigateByUrl(AddProductionScheduleNewPageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n }\n }\n\n private updateProducedAmount(): void {\n if (this.productionScheduleToAdd.completingPartially) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.pathGroups.forEach((pathGroup: ProductionScheduleItemInPathGroup) => {\n if (AssertionUtils.isNullOrUndefined(pathGroup.amountProduced)) {\n pathGroup.amountProduced = pathGroup.quantity;\n }\n });\n });\n });\n }\n }\n\n private updateProductionScheduleItemInPathGroupStatus(): void {\n if (this.productionScheduleToAdd.completingPartially) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.pathGroups.forEach((pathGroup: ProductionScheduleItemInPathGroup) => {\n if (AssertionUtils.isNullOrUndefined(pathGroup.status)) {\n pathGroup.status = ProductionScheduleItemInPathGroupStatus.NORMAL;\n }\n });\n });\n });\n }\n }\n\n private navigateToOverviewAndThrowError(): (error: any) => void {\n return ErrorHandlers.navigateToOverviewAndThrowError(this.router, AddProductionScheduleNewPageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL, this.navigationHelperService);\n }\n\n private stopRunningInitialPreparationsAndThrowError(): (error: UnhandledBackendError) => void {\n return (error: UnhandledBackendError): void => {\n this.isRunningInitialPreparations = false;\n this.isRunningInitialPreparationsToDesigns = false;\n throw error;\n };\n }\n\n private duplicateProductionSchedule(productionSchedule: ProductionSchedule): void {\n productionSchedule.id = null;\n productionSchedule.name = '';\n productionSchedule.runId = null;\n\n this.productionSchedules\n .duplicateProductionOrder(productionSchedule)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (duplicatedProductionSchedule: ProductionSchedule) => {\n this.productionScheduleInitialPreparationsForm.markAsDirty();\n this.productionScheduleInitialised(duplicatedProductionSchedule);\n },\n error: this.navigateToOverviewAndThrowError()\n });\n }\n\n private navigateToPreviousRoute(): void {\n if (this.isCreatingNewProductionSchedule() && !AssertionUtils.isNullOrUndefined(this.productionScheduleToAdd.id)) {\n this.productionSchedules.cancelTemporarySavedChanges(this.productionScheduleToAdd.id.toString()).pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe();\n }\n if (this.isAddingProductionOrderForProductConfiguration()) {\n this.router.navigate([RouteUtils.paths.texEdit.editProductConfiguration.absolutePath.replace('/:id', ''), this.activatedRoute.snapshot.params.id]);\n } else {\n const previousRoute = !AssertionUtils.isNullOrUndefined(this.addProductionScheduleNavigationState?.startRoute)\n ? this.addProductionScheduleNavigationState.startRoute\n : AddProductionScheduleNewPageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL;\n this.navigationHelperService.navigateToPreviousRoute(previousRoute);\n }\n }\n\n private getRouteStateProperties(): void {\n this.activatedRoute.paramMap?.subscribe(() => {\n if (history.state) {\n this.addProductionScheduleNavigationState = history.state as AddProductionScheduleNavigationState;\n }\n });\n }\n}\n","
\n \n \n \n
\n \n \n
\n \n \n \n\n \n
\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {Editable} from '@domain/editable';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionScheduleItemInPathGroupStatus} from '@domain/production-schedule/production-schedule-item-in-path-group-status';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {ProductionSchedulePhase} from '@domain/production-schedule/production-schedule-phase.enum';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {FINISHINGS, Finishings} from '@infrastructure/http/finishing/finishings';\nimport {MACHINE_QUALITIES, MachineQualities} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {PRODUCTION_ORDERS, ProductionOrders} from '@infrastructure/http/production-order/production-orders';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {ListDrawingConfiguration} from '@presentation/components/drawing-list/list-drawing-configuration';\nimport {AddProductionSchedule} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule';\nimport {ADD_PRODUCTION_SCHEDULE} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule.service';\nimport {ProductionScheduleInitialPreparationsComponent} from '@presentation/pages/texfab/production-schedule/add/initial-preparations/production-schedule-initial-preparations.component';\nimport {PRODUCTION_SCHEDULE_PLAN, ProductionSchedulePlan} from '@presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan';\nimport {ProductionSchedulePlanComponent} from '@presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan.component';\nimport {ConfirmProductionScheduleOnDesktopCommand} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-command';\nimport {ConfirmProductionScheduleOnDesktopResult} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {AssertionUtils, BidirectionalMap, convertUnit, ObjectUtils, skeletonViewAnimation, ToastService, TranslateService, UnhandledBackendError, Unit} from '@vdw/angular-component-library';\nimport {cloneDeep, min, noop} from 'lodash-es';\nimport {forkJoin, Observable} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {\n AddProductionScheduleNavigationData,\n ProductionScheduleData,\n ProductionScheduleNameData,\n ProductionScheduleNavigationData,\n ProductionSchedulePhaseData\n} from './add-production-schedule-navigation-data.type';\nimport {BaseAddProductionSchedulePageComponent} from './base-add-production-schedule-page.component';\nimport {MenuItemsCanShowProperties} from './menu-items-new/menu-items-can-show-properties.interface';\nimport {MenuItemsLoadingProperties} from './menu-items-new/menu-items-loading-properties.interface';\nimport {ProductionScheduleClickEvent} from './menu-items-new/production-schedule-click-event.enum';\n\n@Component({\n templateUrl: './add-production-schedule-page.component.html',\n styleUrls: ['./add-production-schedule-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .button-skeleton-wrapper, app-production-schedule-progress')]\n})\nexport class AddProductionSchedulePageComponent extends BaseAddProductionSchedulePageComponent implements OnInit, Editable {\n private static readonly PRODUCTION_SCHEDULE_OVERVIEW_URL = RouteUtils.paths.texFab.productionOrder.absolutePath;\n private static readonly EDIT_PRODUCTION_SCHEDULE_URL: string = RouteUtils.paths.texFab.productionOrder.editProductionOrder.path;\n private static readonly DUPLICATE_PRODUCTION_SCHEDULE_URL: string = RouteUtils.paths.texFab.productionOrder.duplicateProductionOrder.path;\n @ViewChild('initialPreparations') public initialPreparationsComponent: ProductionScheduleInitialPreparationsComponent;\n @ViewChild('productionSchedulePlan') public productionSchedulePlanComponent: ProductionSchedulePlanComponent;\n public defaultProductionOrderSettings: ProductionOrderCustomSettings;\n public productionScheduleToAdd: ProductionSchedule;\n public lastProductionSchedulePhase: ProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n public currentProductionSchedulePhase: ProductionSchedulePhase;\n public isVerifyingFromConfigurePhase = false;\n public factorForConversionFromMillimetersToPicks: number;\n public factorForConversionFromMillimetersToDents: number;\n public pathWidths: PathWidth[];\n public isRunningInitialPreparations = false;\n public isRunningInitialPreparationsToDesigns = false;\n public verifyingProductionSchedule = false;\n public isLoadingProductionSchedule = true;\n public completingProductionSchedule = false;\n public decreatingProductionOrder = false;\n public preselectedOrderlineIds = [];\n public headerVisible = true;\n\n private alreadySetUpDefaultParameters: boolean = false;\n private showSkeletonViewForToolbar = false;\n private nextButtonTouched = false;\n private currentSubscription: Subscription;\n private confirmingProductionSchedule = false;\n private initialRestZoneLoaded = false;\n private initialFreeZoneLoaded = false;\n private initialPathZoneLoaded = false;\n private initialJuteZoneLoaded = false;\n private readonly PRODUCTION_ORDER_TRANSLATION_KEY = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n\n public constructor(\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n @Inject(PRODUCTION_ORDERS) private readonly productionOrders: ProductionOrders,\n @Inject(MACHINE_QUALITIES) private readonly machineQualities: MachineQualities,\n @Inject(PRODUCTION_SCHEDULE_PLAN) private readonly productionSchedulePlan: ProductionSchedulePlan,\n @Inject(ADD_PRODUCTION_SCHEDULE) private readonly addProductionSchedule: AddProductionSchedule,\n @Inject(FINISHINGS) private readonly finishings: Finishings,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly httpProductionOrderCustomSettings: HttpProductionOrdersCustomSettingsService,\n private readonly navigationHistory: NavigationHistoryService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly confirmProductionScheduleOnDesktopCommand: ConfirmProductionScheduleOnDesktopCommand,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly formBuilder: FormBuilder,\n private readonly toastService: ToastService,\n activatedRoute: ActivatedRoute\n ) {\n super(activatedRoute);\n }\n\n public ngOnInit(): void {\n this.showSkeletonViewForToolbar = this.isCurrentRouteEditProductionScheduleRoute() || this.isCurrentRouteDuplicateProductionScheduleRoute();\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n this.setProductionScheduleInitialPreparationsFormFields();\n\n this.initialiseAddProductionSchedule();\n }\n\n public onNavigationHelperDestroy(): void {\n const state = {productionSchedulePhase: this.currentProductionSchedulePhase};\n\n const productionSchedule = this.initialPreparationsComponent?.getConfiguredProductionSchedule();\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n state['productionSchedule'] = productionSchedule;\n }\n\n const productionOrderName = this.productionScheduleInitialPreparationsForm?.value?.name;\n if (!AssertionUtils.isNullOrUndefined(productionOrderName) && productionOrderName !== '' && productionSchedule?.name !== productionOrderName) {\n state['name'] = productionOrderName;\n }\n\n this.navigationHelperService.savePartialState>(state);\n }\n\n public canShowInitialPreparationsForProductionSchedule(): boolean {\n return (\n this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE &&\n !AssertionUtils.isNullOrUndefined(this.defaultProductionOrderSettings) &&\n this.listOfMachineQualityCustomSettings.length > 0\n );\n }\n\n public canShowDesignsForProductionSchedule(): boolean {\n return this.currentProductionSchedulePhase === ProductionSchedulePhase.PRESELECTION;\n }\n\n public selectedDrawingsChanged(listDrawings: ListDrawing[]): void {\n this.productionScheduleToAdd.designs = [];\n\n listDrawings.forEach((listDrawing: ListDrawing) => {\n if (listDrawing instanceof ListDrawingConfiguration) {\n this.productionScheduleToAdd.designs.push(listDrawing.drawing);\n }\n });\n\n this.initialPreparationsChanged();\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(true);\n }\n\n public selectedOrderlinesChanged(orderlineIds: number[]): void {\n this.preselectedOrderlineIds = orderlineIds;\n }\n\n public restZoneLoaded(): void {\n this.initialRestZoneLoaded = true;\n }\n\n public freeZoneLoaded(): void {\n this.initialFreeZoneLoaded = true;\n }\n\n public pathZoneLoaded(): void {\n this.initialPathZoneLoaded = true;\n }\n\n public juteZoneLoaded(): void {\n this.initialJuteZoneLoaded = true;\n }\n\n public setHeaderVisibility(hideHeader: boolean): void {\n this.headerVisible = !hideHeader;\n }\n\n public productionScheduleInitialised(productionSchedule: ProductionSchedule): void {\n const navigationState: {completingPartially?: boolean; phase?: ProductionSchedulePhase} = this.navigationHistory.getState();\n\n const completingPartially = !!navigationState?.completingPartially;\n if (!AssertionUtils.isNullOrUndefined(productionSchedule.finishing)) {\n this.finishings.getOverviewListFinishingById(productionSchedule.finishing.id).subscribe((overviewListFinishing: OverviewListFinishing) => {\n productionSchedule.updateFinishing(FinishingForProductionSchedule.fromOverviewListFinishing(overviewListFinishing));\n });\n }\n\n this.showSkeletonViewForToolbar = false;\n this.productionScheduleToAdd = productionSchedule;\n this.productionScheduleToAdd.completingPartially = completingPartially;\n\n this.isLoadingProductionSchedule = false;\n\n const emptyProductionSchedulePhaseState = {productionSchedulePhase: null} as ProductionSchedulePhaseData;\n const productionSchedulePhaseState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionSchedulePhaseState));\n\n if (!AssertionUtils.isNullOrUndefined(productionSchedulePhaseState) && !ObjectUtils.isDeepEqual(emptyProductionSchedulePhaseState, productionSchedulePhaseState)) {\n this.currentProductionSchedulePhase = productionSchedulePhaseState.productionSchedulePhase;\n } else if (navigationState.phase) {\n this.currentProductionSchedulePhase = navigationState.phase;\n } else if (this.isCurrentRouteDuplicateProductionScheduleRoute()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n this.productionScheduleToAdd.status = ProductionScheduleStatus.DRAFT;\n } else {\n if (!this.productionScheduleToAdd.isDraft()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.VERIFY;\n } else if (!this.productionScheduleToAdd.hasBeenConfigured()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n } else if (\n this.productionScheduleToAdd.hasAtLeastOneProductionScheduleItemPerColoredYarnSet() ||\n this.productionScheduleToAdd.hasAddedDesigns() ||\n this.productionScheduleToAdd.hasOrderLines()\n ) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n } else {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.PRESELECTION;\n }\n }\n\n this.updateProducedAmount();\n this.updateProductionScheduleItemInPathGroupStatus();\n this.setProductionScheduleInitialPreparationsFormFieldsValues(this.productionScheduleToAdd);\n }\n\n public initialPreparationsChanged(): void {\n const productionSchedulePhaseOrderMap = new BidirectionalMap([\n [ProductionSchedulePhase.CONFIGURE, 0],\n [ProductionSchedulePhase.PRESELECTION, 1],\n [ProductionSchedulePhase.BUILD, 2],\n [ProductionSchedulePhase.VERIFY, 3],\n [ProductionSchedulePhase.COMPLETE, 4]\n ]);\n\n this.lastProductionSchedulePhase = productionSchedulePhaseOrderMap.getKey(\n min([productionSchedulePhaseOrderMap.getValue(this.lastProductionSchedulePhase), productionSchedulePhaseOrderMap.getValue(ProductionSchedulePhase.BUILD)])\n );\n }\n\n public canShowProductionSchedulePlan(): boolean {\n return (\n !AssertionUtils.isNullOrUndefined(this.productionScheduleToAdd) &&\n !this.isLoadingProductionSchedule &&\n this.currentProductionSchedulePhase !== ProductionSchedulePhase.CONFIGURE &&\n this.currentProductionSchedulePhase !== ProductionSchedulePhase.PRESELECTION\n );\n }\n\n public setProductionSchedulePhase(phase: ProductionSchedulePhase): void {\n this.nextButtonTouched = false;\n this.currentProductionSchedulePhase = phase;\n if (this.lastProductionSchedulePhase < phase) {\n this.lastProductionSchedulePhase = phase;\n }\n }\n\n public productionSchedulePlanChanged(): void {\n this.lastProductionSchedulePhase = ProductionSchedulePhase.BUILD;\n }\n\n public productionScheduleVerified({confirmImmediately, error}: {confirmImmediately: boolean; error: boolean}): void {\n this.verifyingProductionSchedule = false;\n if (!error) {\n this.setProductionSchedulePhase(ProductionSchedulePhase.VERIFY);\n\n if (confirmImmediately) {\n this.nextButtonTouched = true;\n\n if (this.productionScheduleToAdd.isProductionScheduleVerifiedWithNoErrors() && !this.productionScheduleToAdd.hasProductionScheduleErrors()) {\n this.confirmProductionSchedule();\n }\n }\n }\n }\n\n public navigateToOverview(): void {\n this.router.navigateByUrl(AddProductionSchedulePageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n\n public navigateBack(): void {\n if (this.productionScheduleToAdd?.canBeModified()) {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.CONFIGURE:\n this.navigateToPreviousRoute();\n break;\n case ProductionSchedulePhase.PRESELECTION:\n this.setProductionSchedulePhase(ProductionSchedulePhase.CONFIGURE);\n break;\n case ProductionSchedulePhase.BUILD:\n case ProductionSchedulePhase.VERIFY:\n this.productionSchedulePlanComponent.back();\n break;\n }\n } else {\n this.navigateToPreviousRoute();\n }\n }\n\n public canShowToDesignsButton(): boolean {\n return this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE;\n }\n\n public canShowVerifyAndConfirmButton(): boolean {\n return this.currentProductionSchedulePhase === ProductionSchedulePhase.BUILD;\n }\n\n public verifyAndConfirm(): void {\n this.nextButtonTouched = true;\n\n if (this.productionSchedulePlan.canVerify()) {\n this.verifyingProductionSchedule = true;\n this.productionSchedulePlanComponent.verifyProductionSchedule(true);\n }\n }\n\n public getMenuItemsLoadingProperties(): MenuItemsLoadingProperties {\n return {\n isLoading: this.isLoadingProductionSchedule,\n preselectionLoading: this.isRunningInitialPreparationsToDesigns,\n nextPhaseLoading: this.isNextPhaseLoading(),\n completeLoading: this.completingProductionSchedule,\n decreateLoading: this.decreatingProductionOrder,\n initialRestZoneLoaded: this.initialRestZoneLoaded,\n initialFreeZoneLoaded: this.initialFreeZoneLoaded,\n initialPathZoneLoaded: this.initialPathZoneLoaded,\n initialJuteZoneLoaded: this.initialJuteZoneLoaded\n };\n }\n\n public getMenuItemsCanShowProperties(): MenuItemsCanShowProperties {\n return {\n canShowInvalidFormMessageError: this.canShowInvalidFormMessageError(),\n canShowNavigateToNextPhaseButton: this.canShowProductionScheduleNavigationForPhases(),\n canShowCompleteButton: this.productionScheduleToAdd?.completingPartially,\n canShowDecreatedButton: this.canBeDecreated(),\n canShowCancelButton: false\n };\n }\n\n public confirmProductionSchedule(): void {\n if (!this.confirmingProductionSchedule) {\n this.confirmingProductionSchedule = true;\n\n this.confirmProductionScheduleOnDesktopCommand\n .execute(this.productionScheduleToAdd, this.defaultProductionOrderSettings)\n .pipe(finalize(() => (this.confirmingProductionSchedule = false)))\n .subscribe((confirmProductionScheduleOnDesktopResult: ConfirmProductionScheduleOnDesktopResult) => {\n if (confirmProductionScheduleOnDesktopResult === ConfirmProductionScheduleOnDesktopResult.CONFIRMED) {\n this.navigateToPreviousRoute();\n } else if (confirmProductionScheduleOnDesktopResult === ConfirmProductionScheduleOnDesktopResult.PLAN_ADJUSTMENT_NEEDED) {\n this.productionScheduleToAdd.status = ProductionScheduleStatus.DRAFT;\n this.productionSchedules.updateWithMachineQualityChanged(this.productionScheduleToAdd).subscribe(noop);\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.VERIFY) {\n this.navigateBack();\n }\n }\n });\n }\n }\n\n public canShowSkeletonViewForToolbar(): boolean {\n return this.showSkeletonViewForToolbar;\n }\n\n public canConfirmProductionSchedule(): boolean {\n return this.productionScheduleToAdd.isProductionScheduleVerifiedWithNoErrors() && !this.productionScheduleToAdd.hasProductionScheduleErrors();\n }\n\n public isDirty(): boolean {\n return this.addProductionSchedule.hasUnsavedFormChanges();\n }\n\n public notifyChangesToForm(isDirty: boolean): void {\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(isDirty);\n }\n\n public canShowProductionScheduleNavigationForPhases(): boolean {\n return this.canShowSkeletonViewForToolbar() || this.productionScheduleToAdd?.canBeModified();\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const canShowInvalidFormMessageError = this.nextButtonTouched && !this.canNavigateToNextPhase();\n\n if (this.nextButtonTouched && !canShowInvalidFormMessageError) {\n this.nextButtonTouched = false;\n }\n\n return canShowInvalidFormMessageError;\n }\n\n public getInvalidFormMessageError(): string {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.VERIFY:\n case ProductionSchedulePhase.CONFIGURE:\n return 'GENERAL.ERRORS.CHECK_INVALID_FIELDS';\n case ProductionSchedulePhase.PRESELECTION:\n return this.translate.instant('GENERAL.ERRORS.NO_OBJECT_CHOSEN', {object: this.translate.instant('DESIGN_LIBRARY.DESIGN', {count: 2}).toLowerCase()});\n case ProductionSchedulePhase.BUILD:\n return this.productionSchedulePlan.hasUnsavedChanges(false)\n ? 'PRODUCTION_ORDER.ERRORS.CHANGES_IN_PROGRESS'\n : this.translate.instant('GENERAL.ERRORS.NO_OBJECT_ADDED', {object: this.translate.instant('DESIGN_LIBRARY.DESIGN', {count: 2}).toLowerCase()});\n }\n }\n\n public navigateToNextPhase(): void {\n this.nextButtonTouched = true;\n\n let formsAreValid = true;\n if (this.currentProductionSchedulePhase === ProductionSchedulePhase.CONFIGURE) {\n const zonesLoaded = this.initialRestZoneLoaded && this.initialFreeZoneLoaded && this.initialJuteZoneLoaded && this.initialPathZoneLoaded;\n formsAreValid = this.initialPreparationsComponent.validateForms() && zonesLoaded;\n }\n\n if (this.canNavigateToNextPhase() && formsAreValid) {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.CONFIGURE:\n this.productionScheduleToAdd = this.initialPreparationsComponent.getProductionSchedule();\n this.isRunningInitialPreparations = true;\n this.isCreatingNewProductionSchedule()\n ? this.createProductionSchedule(ProductionSchedulePhase.BUILD, this.qualityHasChanged())\n : this.initialPreparationsCompleted(ProductionSchedulePhase.BUILD, this.qualityHasChanged());\n break;\n case ProductionSchedulePhase.PRESELECTION:\n this.isRunningInitialPreparations = true;\n this.initialPreparationsCompleted(ProductionSchedulePhase.BUILD);\n break;\n case ProductionSchedulePhase.BUILD:\n this.productionSchedulePlanComponent.verifyProductionSchedule();\n break;\n case ProductionSchedulePhase.VERIFY:\n this.confirmProductionSchedule();\n }\n }\n\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n }\n\n public isNextPhaseLoading(): boolean {\n return this.productionSchedulePlanComponent?.isVerifyingProductionSchedule || this.verifyingProductionSchedule || this.isRunningInitialPreparations || this.confirmingProductionSchedule;\n }\n\n public navigateToDesigns(): void {\n this.nextButtonTouched = true;\n\n const zonesLoaded = this.initialRestZoneLoaded && this.initialFreeZoneLoaded && this.initialJuteZoneLoaded && this.initialPathZoneLoaded;\n const formsAreValid = this.initialPreparationsComponent.validateForms() && zonesLoaded;\n\n if (this.canNavigateToNextPhase() && formsAreValid) {\n this.productionScheduleToAdd = this.initialPreparationsComponent.getProductionSchedule();\n this.isRunningInitialPreparationsToDesigns = true;\n\n this.isCreatingNewProductionSchedule()\n ? this.createProductionSchedule(ProductionSchedulePhase.PRESELECTION, this.qualityHasChanged())\n : this.initialPreparationsCompleted(ProductionSchedulePhase.PRESELECTION, this.qualityHasChanged());\n }\n\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n }\n\n public completeProductionSchedule(): void {\n this.completingProductionSchedule = true;\n this.productionOrders\n .completeProductionOrder(Number(this.productionScheduleToAdd.id), ProductionScheduleStatus.EXECUTED_PARTIAL)\n .pipe(\n finalize(() => (this.completingProductionSchedule = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.navigateToOverview();\n });\n }\n\n public decreateProductionOrder(): void {\n this.decreatingProductionOrder = true;\n\n const decreatedProductionOrder = cloneDeep(this.productionScheduleToAdd);\n decreatedProductionOrder.id = `${decreatedProductionOrder.id}`;\n decreatedProductionOrder.status = ProductionScheduleStatus.DRAFT;\n decreatedProductionOrder.removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets();\n\n this.productionSchedules\n .decreateProductionOrder(decreatedProductionOrder)\n .pipe(\n finalize(() => (this.decreatingProductionOrder = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.productionScheduleToAdd = decreatedProductionOrder;\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n });\n }\n\n public canBeDecreated(): boolean {\n return (\n this.productionScheduleToAdd?.canBeDecreated() ||\n [ProductionScheduleStatus.ARRIVED, ProductionScheduleStatus.SENDING, ProductionScheduleStatus.QUEUING, ProductionScheduleStatus.QUEUED].includes(this.productionScheduleToAdd?.status)\n );\n }\n\n public onClickEvent(type: ProductionScheduleClickEvent): void {\n switch (type) {\n case ProductionScheduleClickEvent.PRESELECTION:\n this.navigateToDesigns();\n break;\n case ProductionScheduleClickEvent.NEXT_PHASE:\n this.navigateToNextPhase();\n break;\n case ProductionScheduleClickEvent.VERIFY_AND_CONFIRM:\n this.verifyAndConfirm();\n break;\n case ProductionScheduleClickEvent.COMPLETE:\n this.completeProductionSchedule();\n break;\n case ProductionScheduleClickEvent.DECREATE:\n this.decreateProductionOrder();\n break;\n }\n }\n\n public isCreatingNewProductionSchedule(): boolean {\n return !this.isCurrentRouteEditProductionScheduleRoute() && !this.isCurrentRouteDuplicateProductionScheduleRoute();\n }\n\n public getHeaderIcon(): string {\n return this.isEditingProductionOrder() ? 'details-blue' : 'add-blue';\n }\n\n public getActionText(): string {\n const title = this.isCurrentRouteEditProductionScheduleRoute() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: this.translate.instant(this.PRODUCTION_ORDER_TRANSLATION_KEY, {count: 1}).toLowerCase()});\n }\n\n private qualityHasChanged(): boolean {\n const oldQualityId = this.initialPreparationsComponent.oldMachineQuality?.id;\n return !AssertionUtils.isNullOrUndefined(oldQualityId) && oldQualityId !== this.productionScheduleToAdd.machineQuality.id;\n }\n\n private canNavigateToNextPhase(): boolean {\n switch (this.currentProductionSchedulePhase) {\n case ProductionSchedulePhase.CONFIGURE:\n return this.initialPreparationsComponent?.getConfiguredProductionSchedule()?.hasBeenConfigured();\n case ProductionSchedulePhase.PRESELECTION:\n return true;\n case ProductionSchedulePhase.BUILD:\n return this.productionSchedulePlan.canVerify();\n case ProductionSchedulePhase.VERIFY:\n return !this.productionSchedulePlanComponent?.isVerifyingProductionSchedule && this.canConfirmProductionSchedule();\n default:\n return false;\n }\n }\n\n private createProductionSchedule(nextPhase: ProductionSchedulePhase, isMachineQualityChanged: boolean = false): void {\n const practicalPickDensityUnit: Unit = Unit[this.getDefaultParameterForPropertyNameOfMachineQualitySettings('pickDensityUnit').propertyValue as string];\n const practicalPickDensityInPicksInMM = convertUnit({\n from: {\n value: this.productionScheduleInitialPreparationsForm.get('practicalPickDensity').value,\n unit: practicalPickDensityUnit\n },\n to: Unit.PICKS_PER_MILLIMETER\n });\n\n this.productionSchedules\n .createProductionSchedule(\n this.productionScheduleToAdd.machine,\n this.productionScheduleToAdd.machineQuality,\n practicalPickDensityInPicksInMM,\n this.productionScheduleToAdd.coloredYarnSets,\n this.productionScheduleToAdd.creel,\n this.productionScheduleToAdd.runId,\n this.productionScheduleToAdd.mappingForCurrentPositionOnMachine,\n this.productionScheduleInitialPreparationsForm.value.productConfiguration,\n this.productionScheduleToAdd.isSample,\n this.productionScheduleToAdd.canAddJute,\n this.productionScheduleToAdd.hmiVersion,\n this.productionScheduleToAdd.addToPlanboard,\n null\n )\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionSchedule: ProductionSchedule) => {\n this.productionScheduleToAdd.id = productionSchedule.id;\n this.productionScheduleToAdd.coloredYarnSets = productionSchedule.coloredYarnSets;\n this.productionScheduleToAdd.dateCreated = new Date();\n\n if (this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.length > 0) {\n this.initialiseProductionSchedulePathsOfColoredYarnSets(productionSchedule);\n }\n\n this.initialPreparationsCompleted(nextPhase, isMachineQualityChanged);\n });\n }\n\n private navigateToEditProductionSchedule(id: string, phase: ProductionSchedulePhase): void {\n let path = RouteUtils.paths.texFab.productionOrder.editProductionOrder.absolutePath.replace(':id', id);\n if (this.hasPermissionToNavigateToNewBuilder()) {\n path = path + '/new';\n }\n\n this.navigationHistory.replaceState(path, null, {state: {phase}});\n }\n\n private hasPermissionToNavigateToNewBuilder(): boolean {\n return this.currentSubscription?.hasPermission(Permission.TEXFAB_NEW_BUILDER);\n }\n\n private initialiseProductionSchedulePathsOfColoredYarnSets(productionSchedule: ProductionSchedule): void {\n this.productionSchedules\n .setProductionSchedulePlan(`${this.productionScheduleToAdd.id}`, this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets, productionSchedule.machineQuality.reedDensity * 1000)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe();\n }\n\n private initialPreparationsCompleted(nextPhase: ProductionSchedulePhase, isMachineQualityChanged: boolean = false): void {\n forkJoin([\n this.machineQualities.getFactorForConversionFromMillimetersToPicks(this.productionScheduleToAdd.machineQuality.id),\n this.machineQualities.getFactorForConversionFromMillimetersToDents(this.productionScheduleToAdd.machineQuality.id),\n this.machineQualities.getPathWidths(this.productionScheduleToAdd.machineQuality.id),\n this.productionSchedules.updateWithMachineQualityChanged(this.productionScheduleToAdd, isMachineQualityChanged)\n ])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([factorForConversionFromMillimetersToPicks, factorForConversionFromMillimetersToDents, pathWidths]: [number, number, PathWidth[], void]) => {\n this.factorForConversionFromMillimetersToPicks = factorForConversionFromMillimetersToPicks;\n this.factorForConversionFromMillimetersToDents = factorForConversionFromMillimetersToDents;\n this.pathWidths = pathWidths;\n\n const requests: Observable[] = [this.productionSchedules.getById(this.productionScheduleToAdd.id)];\n\n if (nextPhase === ProductionSchedulePhase.BUILD) {\n requests.push(\n this.productionSchedules.saveDesignsAndOrderLines(\n this.productionScheduleToAdd.id,\n this.productionScheduleToAdd.designs,\n this.productionScheduleToAdd.orderLines,\n this.productionScheduleToAdd.name\n )\n );\n }\n\n forkJoin(requests)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([productionSchedule]: [ProductionSchedule]) => {\n this.productionScheduleToAdd.warnings = productionSchedule.warnings;\n this.productionScheduleToAdd.errors = productionSchedule.errors;\n this.productionScheduleToAdd.coloredYarnSets = productionSchedule.coloredYarnSets;\n if (productionSchedule.coloredYarnSets.length === productionSchedule.productionSchedulePathsOfColoredYarnSets.length) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets = productionSchedule.productionSchedulePathsOfColoredYarnSets;\n }\n\n if (nextPhase !== ProductionSchedulePhase.VERIFY) {\n this.productionScheduleToAdd.removePathLabelsAndNonProductionItemsFromProductionSchedulePathsOfColoredYarnSets();\n }\n\n if (!this.isEditingProductionOrder()) {\n this.addProductionSchedule.notifyChangesToInitialPreparationsForm(false);\n\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.CREATED_OBJECT', {\n object: this.translate.instant('PRODUCTION_ORDER.PRODUCTION_ORDER', {count: 1}),\n name: '',\n count: 1\n })\n });\n\n this.navigateToEditProductionSchedule(`${this.productionScheduleToAdd.id}`, nextPhase);\n }\n\n this.setProductionSchedulePhase(nextPhase);\n this.isRunningInitialPreparations = false;\n this.isRunningInitialPreparationsToDesigns = false;\n },\n error: this.stopRunningInitialPreparationsAndThrowError()\n });\n },\n error: this.stopRunningInitialPreparationsAndThrowError()\n });\n }\n\n private initialiseAddProductionSchedule(): void {\n forkJoin([this.machineQualities.getListOfCustomSettings(), this.httpProductionOrderCustomSettings.get(), this.httpProductionOrderCustomSettings.hasAlreadyAdjusted()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([listOfMachineQualityCustomSettings, productionOrdersCustomSettings, alreadyAdjustedDefaultParameters]: [PropertyValue[], ProductionOrderCustomSettings, boolean]) => {\n this.listOfMachineQualityCustomSettings = listOfMachineQualityCustomSettings;\n\n this.customSettingsForProductionScheduleChosen(alreadyAdjustedDefaultParameters, productionOrdersCustomSettings);\n\n const emptyProductionScheduleState = {productionSchedule: null} as ProductionScheduleData;\n const productionScheduleState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionScheduleState));\n this.hasProductionScheduleState = !AssertionUtils.isNullOrUndefined(productionScheduleState) && !ObjectUtils.isDeepEqual(emptyProductionScheduleState, productionScheduleState);\n\n if (this.isCreatingNewProductionSchedule()) {\n this.currentProductionSchedulePhase = ProductionSchedulePhase.CONFIGURE;\n\n if (this.hasProductionScheduleState) {\n this.productionScheduleToAdd = productionScheduleState.productionSchedule;\n this.setProductionScheduleInitialPreparationsFormFieldsValues(this.productionScheduleToAdd);\n } else {\n this.productionScheduleToAdd = ProductionSchedule.createEmptyProductionSchedule();\n }\n\n this.isLoadingProductionSchedule = false;\n } else {\n this.initialiseExistingProductionSchedule(this.hasProductionScheduleState ? productionScheduleState.productionSchedule : null);\n }\n },\n error: this.navigateToOverviewAndThrowError()\n });\n\n this.productionSchedulePlan.currentUpdatedProductionSchedule.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((productionSchedule: ProductionSchedule) => {\n this.productionScheduleToAdd = productionSchedule;\n\n this.setProductionScheduleInitialPreparationsFormFieldsValues(productionSchedule);\n });\n }\n\n private setProductionScheduleInitialPreparationsFormFieldsValues(productionSchedule: ProductionSchedule): void {\n const emptyProductionScheduleNameState = {name: null} as ProductionScheduleNameData;\n const productionScheduleNameState = this.navigationHelperService.getPartialState(Object.keys(emptyProductionScheduleNameState));\n const hasProductionScheduleNameState = !AssertionUtils.isNullOrUndefined(productionScheduleNameState) && !ObjectUtils.isDeepEqual(emptyProductionScheduleNameState, productionScheduleNameState);\n\n this.productionScheduleInitialPreparationsForm?.patchValue({\n name: hasProductionScheduleNameState ? productionScheduleNameState.name : productionSchedule.name,\n machine: productionSchedule.machine,\n machineQuality: productionSchedule.machineQuality,\n practicalPickDensity: productionSchedule.practicalPickDensityInPicksPerMM,\n productConfiguration: productionSchedule.productConfiguration,\n creel: productionSchedule.creel\n });\n\n if (hasProductionScheduleNameState) {\n this.productionScheduleInitialPreparationsForm.controls.name.markAsTouched();\n }\n }\n\n private setProductionScheduleInitialPreparationsFormFields(): void {\n this.productionScheduleInitialPreparationsForm = this.formBuilder.group({\n name: this.formBuilder.control(null, [Validators.required, Validators.maxLength(this.MAX_LENGTH_FOR_PRODUCTION_ORDER_NAME)]),\n machine: this.formBuilder.control(null, Validators.required),\n machineQuality: this.formBuilder.control(null, Validators.required),\n practicalPickDensity: this.formBuilder.control(null, [Validators.required, Validators.min(1)]),\n productConfiguration: this.formBuilder.control(null),\n creel: this.formBuilder.control(null, Validators.required)\n });\n }\n\n private initialiseExistingProductionSchedule(productionScheduleState: ProductionSchedule): void {\n const isDuplicatingProductionSchedule = this.isCurrentRouteDuplicateProductionScheduleRoute();\n const getProductionScheduleObservable = isDuplicatingProductionSchedule\n ? this.productionSchedules.getDuplicatedProductionOrder(this.activatedRoute.snapshot.params.id)\n : this.productionSchedules.getById(this.activatedRoute.snapshot.params.id);\n\n this.isLoadingProductionSchedule = true;\n\n if (productionScheduleState) {\n this.setExistingProductionSchedule(productionScheduleState);\n } else {\n getProductionScheduleObservable.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe({\n next: (productionSchedule: ProductionSchedule) => this.setExistingProductionSchedule(productionSchedule),\n error: this.navigateToOverviewAndThrowError()\n });\n }\n }\n\n private setExistingProductionSchedule(productionSchedule: ProductionSchedule): void {\n const isDuplicatingProductionSchedule = this.isCurrentRouteDuplicateProductionScheduleRoute();\n\n forkJoin([\n this.productionSchedules.getDesignsAndOrderLines(isDuplicatingProductionSchedule ? this.activatedRoute.snapshot.params.id : productionSchedule.id, productionSchedule.status),\n this.machineQualities.getFactorForConversionFromMillimetersToPicks(productionSchedule.machineQuality.id),\n this.machineQualities.getFactorForConversionFromMillimetersToDents(productionSchedule.machineQuality.id),\n this.machineQualities.getPathWidths(productionSchedule.machineQuality.id)\n ])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([{designs, orderLines}, factorForConversionFromMillimetersToPicks, factorForConversionFromMillimetersToDents, pathWidths]: [\n {designs: Drawing[]; orderLines: ProductionScheduleOrderLine[]},\n number,\n number,\n PathWidth[]\n ]) => {\n productionSchedule.designs = designs;\n productionSchedule.orderLines = orderLines;\n\n productionSchedule.updateOrderLineQuantities();\n this.factorForConversionFromMillimetersToPicks = factorForConversionFromMillimetersToPicks;\n this.factorForConversionFromMillimetersToDents = factorForConversionFromMillimetersToDents;\n this.pathWidths = pathWidths;\n this.productionSchedulePlan.applyMeasurementsCalculationsFactor(factorForConversionFromMillimetersToDents);\n\n if (isDuplicatingProductionSchedule) {\n this.duplicateProductionSchedule(productionSchedule);\n } else {\n this.productionScheduleInitialised(productionSchedule);\n }\n },\n error: this.navigateToOverviewAndThrowError()\n });\n }\n\n private isCurrentRouteEditProductionScheduleRoute(): boolean {\n return this.activatedRoute.snapshot.routeConfig?.path === AddProductionSchedulePageComponent.EDIT_PRODUCTION_SCHEDULE_URL;\n }\n\n private isCurrentRouteDuplicateProductionScheduleRoute(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === AddProductionSchedulePageComponent.DUPLICATE_PRODUCTION_SCHEDULE_URL;\n }\n\n private customSettingsForProductionScheduleChosen(adjusted: boolean, productionOrdersCustomSettings: ProductionOrderCustomSettings): void {\n if (adjusted) {\n this.defaultProductionOrderSettings = productionOrdersCustomSettings;\n this.alreadySetUpDefaultParameters = true;\n } else {\n this.router.navigateByUrl(AddProductionSchedulePageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n }\n\n public isAddingProductionOrderForProductConfiguration(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderForProductConfiguration.path;\n }\n\n private updateProducedAmount(): void {\n if (this.productionScheduleToAdd.completingPartially) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.pathGroups.forEach((pathGroup: ProductionScheduleItemInPathGroup) => {\n pathGroup.amountProduced = pathGroup.quantity;\n });\n });\n });\n }\n }\n\n private updateProductionScheduleItemInPathGroupStatus(): void {\n if (this.productionScheduleToAdd.completingPartially) {\n this.productionScheduleToAdd.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.pathGroups.forEach((pathGroup: ProductionScheduleItemInPathGroup) => {\n pathGroup.status = ProductionScheduleItemInPathGroupStatus.NORMAL;\n });\n });\n });\n }\n }\n\n private navigateToOverviewAndThrowError(): (error: any) => void {\n return ErrorHandlers.navigateToOverviewAndThrowError(this.router, AddProductionSchedulePageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL, this.navigationHelperService);\n }\n\n private stopRunningInitialPreparationsAndThrowError(): (error: UnhandledBackendError) => void {\n return (error: UnhandledBackendError): void => {\n this.isRunningInitialPreparations = false;\n this.isRunningInitialPreparationsToDesigns = false;\n throw error;\n };\n }\n\n private duplicateProductionSchedule(productionSchedule: ProductionSchedule): void {\n productionSchedule.id = null;\n productionSchedule.name = '';\n productionSchedule.runId = null;\n\n this.productionSchedules\n .duplicateProductionOrder(productionSchedule)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (duplicatedProductionSchedule: ProductionSchedule) => {\n this.productionScheduleInitialised(duplicatedProductionSchedule);\n },\n error: this.navigateToOverviewAndThrowError()\n });\n }\n\n private navigateToPreviousRoute(): void {\n this.navigationHelperService.navigateToPreviousRoute(AddProductionSchedulePageComponent.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n}\n","import {Injectable, InjectionToken} from '@angular/core';\nimport {AddProductionSchedule} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule';\n\nexport const ADD_PRODUCTION_SCHEDULE = new InjectionToken('AddProductionSchedule');\n\n@Injectable()\nexport class AddProductionScheduleService implements AddProductionSchedule {\n private isInitialPreparationsFormDirty = false;\n\n public hasUnsavedFormChanges(): boolean {\n return this.isInitialPreparationsFormDirty;\n }\n\n public notifyChangesToInitialPreparationsForm(hasInitialPreparationsFormChanged: boolean): void {\n this.isInitialPreparationsFormDirty = hasInitialPreparationsFormChanged;\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Equipment} from '@domain/machine/equipment';\nimport {BuggyForProductionSchedule} from '@domain/production-schedule/buggy-for-production-schedule';\nimport {CreelForProductionSchedule} from '@domain/production-schedule/creel-for-production-schedule';\nimport {MachineQualityForProductionSchedule} from '@domain/production-schedule/machine-quality-for-production-schedule';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {ProductionScheduleProductConfiguration} from '@domain/production-schedule/production-schedule-product-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {BaseComponent} from '@vdw/angular-component-library';\n\n@Component({\n template: ''\n})\nexport class BaseAddProductionScheduleNewPageComponent extends BaseComponent {\n @Input() public productionScheduleInitialPreparationsForm: ProductionScheduleInitialPreparationsFormGroup;\n @Input() public listOfMachineQualityCustomSettings: PropertyValue[];\n\n protected hasProductionScheduleState: boolean;\n\n protected readonly MAX_LENGTH_FOR_PRODUCTION_ORDER_NAME = 24;\n\n private readonly ADD_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView.path;\n private readonly EDIT_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView.path;\n private readonly DUPLICATE_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.duplicateProductionOrderNewView.path;\n\n public constructor(protected readonly activatedRoute: ActivatedRoute) {\n super();\n }\n\n public isAddingProductionOrder(): boolean {\n return this.activatedRoute?.snapshot?.routeConfig?.path === this.ADD_PRODUCTION_SCHEDULE_URL;\n }\n\n public isAddingProductionOrderForRun(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForRun.path;\n }\n\n public isAddingProductionOrderForProductConfiguration(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForProductConfiguration.path;\n }\n\n public isAddingProductionOrderForMachine(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForMachine.path;\n }\n\n public isAddingAnyTypeOfProductionOrder(): boolean {\n return this.isAddingProductionOrderForType() || this.isAddingProductionOrder();\n }\n\n public isAddingProductionOrderForType(): boolean {\n return this.isAddingProductionOrderForMachine() || this.isAddingProductionOrderForProductConfiguration() || this.isAddingProductionOrderForRun();\n }\n\n public isAddingAnyTypeOrDuplicatingOfProductionOrder(): boolean {\n return this.isAddingAnyTypeOfProductionOrder() || this.isDuplicatingProductionOrder();\n }\n\n public isDuplicatingProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.DUPLICATE_PRODUCTION_SCHEDULE_URL;\n }\n\n public isEditingProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.EDIT_PRODUCTION_SCHEDULE_URL;\n }\n\n public getDefaultParameterForPropertyNameOfMachineQualitySettings(propertyName: string): PropertyValue {\n return this.getDefaultParameterForPropertyNameOfGivenSettings(propertyName, this.listOfMachineQualityCustomSettings);\n }\n\n public getDefaultParameterForPropertyNameOfGivenSettings(propertyName: string, listOfCustomSettings: PropertyValue[]): PropertyValue {\n return listOfCustomSettings?.find((value: PropertyValue) => value.propertyName === propertyName);\n }\n}\n\nexport type ProductionScheduleInitialPreparationsFormGroup = FormGroup<{\n name: FormControl;\n machine: FormControl;\n machineQuality: FormControl;\n practicalPickDensity: FormControl;\n productConfiguration: FormControl;\n creel: FormControl;\n buggy: FormControl;\n}>;\n","import {Component, Input} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {ActivatedRoute} from '@angular/router';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Equipment} from '@domain/machine/equipment';\nimport {CreelForProductionSchedule} from '@domain/production-schedule/creel-for-production-schedule';\nimport {MachineQualityForProductionSchedule} from '@domain/production-schedule/machine-quality-for-production-schedule';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {ProductionScheduleProductConfiguration} from '@domain/production-schedule/production-schedule-product-configuration';\nimport {PropertyValue} from '@domain/property-value';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {BaseComponent} from '@vdw/angular-component-library';\n\n@Component({\n template: ''\n})\nexport class BaseAddProductionSchedulePageComponent extends BaseComponent {\n @Input() public productionScheduleInitialPreparationsForm: ProductionScheduleInitialPreparationsFormGroup;\n @Input() public listOfMachineQualityCustomSettings: PropertyValue[];\n\n protected hasProductionScheduleState: boolean;\n\n protected readonly MAX_LENGTH_FOR_PRODUCTION_ORDER_NAME = 24;\n\n private readonly ADD_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.addProductionOrder.path;\n private readonly EDIT_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.editProductionOrder.path;\n private readonly DUPLICATE_PRODUCTION_SCHEDULE_URL = RouteUtils.paths.texFab.productionOrder.duplicateProductionOrder.path;\n\n public constructor(protected readonly activatedRoute: ActivatedRoute) {\n super();\n }\n\n public isAddingProductionOrder(): boolean {\n return this.activatedRoute?.snapshot?.routeConfig?.path === this.ADD_PRODUCTION_SCHEDULE_URL;\n }\n\n public isAddingProductionOrderForRun(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderForRun.path;\n }\n\n public isAddingProductionOrderForProductConfiguration(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderForProductConfiguration.path;\n }\n\n public isAddingProductionOrderForMachine(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texFab.productionOrder.addProductionOrderForMachine.path;\n }\n\n public isAddingAnyTypeOfProductionOrder(): boolean {\n return this.isAddingProductionOrderForType() || this.isAddingProductionOrder();\n }\n\n public isAddingProductionOrderForType(): boolean {\n return this.isAddingProductionOrderForMachine() || this.isAddingProductionOrderForProductConfiguration() || this.isAddingProductionOrderForRun();\n }\n\n public isAddingAnyTypeOrDuplicatingOfProductionOrder(): boolean {\n return this.isAddingAnyTypeOfProductionOrder() || this.isDuplicatingProductionOrder();\n }\n\n public isDuplicatingProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.DUPLICATE_PRODUCTION_SCHEDULE_URL;\n }\n\n public isEditingProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.EDIT_PRODUCTION_SCHEDULE_URL;\n }\n\n public getDefaultParameterForPropertyNameOfMachineQualitySettings(propertyName: string): PropertyValue {\n return this.getDefaultParameterForPropertyNameOfGivenSettings(propertyName, this.listOfMachineQualityCustomSettings);\n }\n\n public getDefaultParameterForPropertyNameOfGivenSettings(propertyName: string, listOfCustomSettings: PropertyValue[]): PropertyValue {\n return listOfCustomSettings?.find((value: PropertyValue) => value.propertyName === propertyName);\n }\n}\n\nexport type ProductionScheduleInitialPreparationsFormGroup = FormGroup<{\n name: FormControl;\n machine: FormControl;\n machineQuality: FormControl;\n practicalPickDensity: FormControl;\n productConfiguration: FormControl;\n creel: FormControl;\n}>;\n","import {Inject, Injectable, Renderer2} from '@angular/core';\nimport {DraggingService} from '@application/services/dragging/dragging.service';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {Finishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing';\nimport {CarpetWeaveQuality} from '@domain/textile-data/machine-quality/carpet-weave-quality';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {ListDrawingOrderLine} from '@presentation/components/drawing-list/list-drawing-order-line';\nimport {\n AgGridUtils,\n AssertionUtils,\n BaseComponent,\n convertCommercialUnit,\n convertDentsToPixels,\n convertHeightInMeterToPicks,\n convertPicksToPixels,\n convertWidthInMeterToDents,\n EmptyCellRendererComponent,\n EnumUtils,\n NoDataOverlayComponentParams,\n OverlayComponentParamsAction,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {\n CellEditingStoppedEvent,\n CellRendererSelectorResult,\n EditableCallbackParams,\n ICellRendererParams,\n IServerSideGetRowsParams,\n RowNode,\n RowSelectedEvent,\n ValueGetterParams,\n ValueSetterParams\n} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {AddProductionScheduleNavigationState} from '../../add-production-schedule-navigation-state.interface';\nimport {PRODUCTION_SCHEDULE_PLAN, ProductionSchedulePlan} from '../../plan/production-schedule-plan';\nimport {ProductionScheduleItemInPathGroupWithIdentification} from './order-lines-view/production-schedule-item-in-path-group-with-identification';\nimport {ProductionScheduleOrderLineWithQuantity} from './order-lines-view/production-schedule-order-line-with-quantity';\n\ntype RowData = ProductionScheduleOrderLineWithQuantity | ProductionScheduleItemInPathGroupWithIdentification;\n\n@Injectable()\nexport class OrderLinesHelper extends BaseComponent {\n public displayTechnicalUnit: boolean;\n public commercialUnit: Unit;\n public savedFilterModel: any;\n\n public constructor(\n @Inject(PRODUCTION_SCHEDULE_PLAN) private readonly productionSchedulePlan: ProductionSchedulePlan,\n private readonly translate: TranslateService,\n private readonly l10nIntlService: L10nIntlService\n ) {\n super();\n }\n\n public hasActiveFilters(orderLinesGrid: AgGridAngular): boolean {\n return !AssertionUtils.isNullOrUndefined(orderLinesGrid) && Object.values(orderLinesGrid?.api?.getFilterModel())?.length > 0;\n }\n\n public onServerSideDataSourceError(params: IServerSideGetRowsParams, error: any): void {\n params.fail();\n params.api.showNoRowsOverlay();\n throw error;\n }\n\n public buildAgGridCellTextWithUnitForCommercialDimension(commercialDimension: number, unit: Unit, forceUnit: boolean = false, decimals?: number): string {\n const selectedUnit = this.getSelectedUnit(unit, forceUnit);\n return AgGridUtils.buildAgGridCellTextWithUnit(commercialDimension, this.translate.instant(`GENERAL.UNIT.${EnumUtils.getKeyFromValue(Unit, selectedUnit)}`), this.l10nIntlService, decimals);\n }\n\n public buildAgGridCellTooltipWithUnitForCommercialDimension(commercialDimension: number, unit: Unit, forceUnit: boolean = false, decimals?: number): string {\n const selectedUnit = this.getSelectedUnit(unit, forceUnit);\n return AgGridUtils.buildAgGridCellTooltipWithUnit(\n commercialDimension,\n this.translate.instant(`GENERAL.UNIT.${EnumUtils.getKeyFromValue(Unit, selectedUnit)}`),\n this.l10nIntlService,\n false,\n decimals\n );\n }\n\n public getTotalCount(params: ValueGetterParams): number {\n if (!(params.data instanceof ProductionScheduleOrderLineWithQuantity)) {\n return undefined;\n }\n\n return params.data.amount;\n }\n\n public getInitializationFilterModel(\n showPreselectedItems: boolean,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n selectedRestPathColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n preselectedOrderlineIds: number[],\n addProductionScheduleNavigationState: AddProductionScheduleNavigationState,\n productionOrderCustomSettings: ProductionOrderCustomSettings,\n alternativeQualityNames: string[],\n qualityNames: string[],\n alternativeColorSetNames: string[],\n colorSetNames: string[],\n showOnlyQueryCompatibleOrderlines: boolean,\n isPreSelection: boolean,\n selectedPathContentRowData: ProductionScheduleItemInPathGroup\n ): any {\n const widthFilter = this.getWidthFilterForPath(productionSchedule, selectedPath, selectedRestPathColoredYarnSet);\n const filterType = AssertionUtils.isNullOrUndefined(selectedPath) ? 'lessThanOrEqual' : 'equals';\n\n let filterModel: any;\n\n if (!AssertionUtils.isNullOrUndefined(this.savedFilterModel)) {\n filterModel = this.savedFilterModel;\n }\n\n if (!AssertionUtils.isNullOrUndefined(productionSchedule?.machineQuality?.id) || !AssertionUtils.isNullOrUndefined(addProductionScheduleNavigationState.machineQualityId)) {\n const newFilterModel = {\n machineQualityName: {\n filterModels: [\n null,\n {\n values: productionOrderCustomSettings?.allowPreFilterOnQualitiesAndColoredYarnSets ? alternativeQualityNames : qualityNames,\n filterType: 'set'\n }\n ],\n filterType: 'multi'\n },\n colorSetName: {\n filterModels: [\n null,\n {\n values: productionOrderCustomSettings?.allowPreFilterOnQualitiesAndColoredYarnSets ? alternativeColorSetNames : colorSetNames,\n filterType: 'set'\n }\n ],\n filterType: 'multi'\n },\n technicalWidthInDents: {\n filterModels: [{filter: widthFilter, filterType: 'number', type: filterType}, null],\n filterType: 'multi'\n },\n amountLeft: {\n filterModels: [{filter: 0, filterType: 'number', type: 'greaterThan'}, null],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...newFilterModel};\n } else {\n const newFilterModel = {\n amountLeft: {\n filterModels: [{filter: 0, filterType: 'number', type: 'greaterThan'}, null],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...newFilterModel};\n }\n\n if (showPreselectedItems && !AssertionUtils.isEmpty(preselectedOrderlineIds)) {\n const orderlineIds = preselectedOrderlineIds.map((id: number) => `${id}`);\n\n const preselectionFilterModel = {\n id: {\n filterModels: [null, {values: orderlineIds, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...preselectionFilterModel};\n } else {\n delete filterModel.id;\n }\n\n if (showOnlyQueryCompatibleOrderlines && !isPreSelection) {\n const colorSetId = AssertionUtils.isNullOrUndefined(selectedPath)\n ? selectedRestPathColoredYarnSet.coloredYarnSet.overviewListColorSet.id\n : this.getColorSetIdOfSelectedPath(productionSchedule, selectedPath);\n\n const compatibleFilter = {\n compatibleColorSetId: {\n filterModels: [{filter: colorSetId, filterType: 'number', type: 'equals'}, null],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...compatibleFilter};\n } else {\n delete filterModel.compatibleColorSetId;\n }\n\n if (!AssertionUtils.isNullOrUndefined(selectedPathContentRowData) && !AssertionUtils.isNullOrUndefined(selectedPathContentRowData?.orderLineId)) {\n const orderlineId = [`${selectedPathContentRowData.orderLineId}`];\n\n const selectedOrderlineIdFilterModel = {\n id: {\n filterModels: [null, {values: orderlineId, filterType: 'set'}],\n filterType: 'multi'\n }\n };\n\n filterModel = {...filterModel, ...selectedOrderlineIdFilterModel};\n }\n\n return filterModel;\n }\n\n public setAmountInProductionSchedule(params: ValueSetterParams, productionSchedule: ProductionSchedule): boolean {\n if (params.data.productionScheduleOrderLine.article.design.repeated) {\n const {commercialDimensionsInMM, technicalDimensions} = params.data.productionScheduleItemInPathGroup;\n const pickDensity = technicalDimensions.heightInPicks / commercialDimensionsInMM.heightInMM;\n params.data.productionScheduleItemInPathGroup.commercialDimensionsInMM.heightInMM = params.newValue / productionSchedule.getProductionScheduleItemMultiplier();\n params.data.productionScheduleItemInPathGroup.technicalDimensions.heightInPicks = Math.round((params.newValue * pickDensity) / productionSchedule.getProductionScheduleItemMultiplier());\n } else {\n params.data.productionScheduleItemInPathGroup.quantity = Math.floor(params.newValue / productionSchedule.getProductionScheduleItemMultiplier());\n }\n\n this.productionSchedulePlan.editProductionScheduleItem(\n params.data.productionScheduleItemInPathGroup,\n params.data.productionScheduleItemInPathGroupIndex,\n params.data.productionSchedulePathIndex,\n params.data.startDentOfColoredYarnSet\n );\n return true;\n }\n\n public getProductionScheduleItemsInPathGroupWithIdentification(orderLineId: number, productionSchedule: ProductionSchedule): ProductionScheduleItemInPathGroupWithIdentification[] {\n const productionScheduleItemsInPathGroupWithIdentification = productionSchedule.productionSchedulePathsOfColoredYarnSets.flatMap(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.flatMap((productionSchedulePath: ProductionSchedulePath, productionSchedulePathIndex: number) =>\n productionSchedulePath.pathGroups.flatMap(\n (productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup, productionScheduleItemInPathGroupIndex: number) =>\n new ProductionScheduleItemInPathGroupWithIdentification(\n productionSchedulePath,\n productionScheduleItemInPathGroup,\n productionScheduleItemInPathGroupIndex,\n productionSchedulePathIndex,\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent,\n productionSchedule.orderLines.find((productionScheduleOrderLine: ProductionScheduleOrderLine) => productionScheduleOrderLine.id === orderLineId)\n )\n )\n )\n );\n\n return productionScheduleItemsInPathGroupWithIdentification.filter(\n (productionScheduleItemInPathGroupWithIdentification: ProductionScheduleItemInPathGroupWithIdentification) =>\n productionScheduleItemInPathGroupWithIdentification.productionScheduleItemInPathGroup.orderLineId === orderLineId\n );\n }\n\n public onRowDrag(\n params: {rowNode: RowNode; dragEvent: DragEvent},\n productionSchedule: ProductionSchedule,\n draggingService: DraggingService,\n renderer: Renderer2,\n pathWidths: PathWidth[],\n marginInDentsOfMissingDesigns: number\n ): void {\n if (!(params.rowNode.data instanceof ProductionScheduleOrderLineWithQuantity)) {\n return;\n }\n const listDrawingOrderLine = this.createListDrawingOrderLine(\n productionSchedule,\n params.rowNode.data,\n productionSchedule.machineQuality.weaveStructure.picksPerColorLine,\n marginInDentsOfMissingDesigns,\n pathWidths,\n false\n );\n if (listDrawingOrderLine.amount > 0 && (listDrawingOrderLine.drawing.repeated ? listDrawingOrderLine.commercialLengthInMM > 0 : true)) {\n draggingService.setData(listDrawingOrderLine);\n } else {\n draggingService.setData({quantity: params.rowNode.data.amountLeft - params.rowNode.data.amountInProductionSchedule * productionSchedule.getProductionScheduleItemMultiplier()});\n }\n\n const dragPreview = renderer.createElement('img');\n renderer.setAttribute(dragPreview, 'src', '/assets/images/image-placeholder.svg');\n\n params.dragEvent.dataTransfer.setDragImage(dragPreview, 0, 0);\n }\n\n public createListDrawingOrderLine(\n productionSchedule: ProductionSchedule,\n productionScheduleOrderLine: ProductionScheduleOrderLineWithQuantity,\n picksPerColorLine: number,\n marginInDentsOfMissingDesigns: number,\n pathWidths: PathWidth[],\n isAutoFilling: boolean,\n selectedPath?: ProductionSchedulePath,\n availableSpaceInBuggyInPicks?: number,\n buggyLengthMaxInPicks?: number,\n fullQualities?: CarpetWeaveQuality[]\n ): ListDrawingOrderLine {\n const listDrawingOrderLine = ListDrawingOrderLine.fromProductionScheduleOrderLine(\n productionScheduleOrderLine,\n this.getListDrawingOrderLineAmount(productionSchedule, productionScheduleOrderLine, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks, fullQualities, isAutoFilling),\n productionScheduleOrderLine.article.design.repeated ? productionScheduleOrderLine.article.commercialHeightInMM : null,\n picksPerColorLine,\n productionScheduleOrderLine.rollLengthInMeter\n );\n\n if (listDrawingOrderLine.drawing.missingDesign) {\n listDrawingOrderLine.orderLine.article.design.image.data = '..assets/images/missing-design.svg';\n listDrawingOrderLine.orderLine.article.design.dimensionsInPixels = {\n widthInPx:\n this.productionSchedulePlan.lookupCommercialWidthInPathWidths(listDrawingOrderLine.orderLine.article.commercialWidthInMM, pathWidths) ??\n convertDentsToPixels(\n convertWidthInMeterToDents(\n convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: listDrawingOrderLine.orderLine.article.commercialWidthInMM}, to: Unit.METER}),\n productionSchedule?.machineQuality?.reedDensity * 1000,\n marginInDentsOfMissingDesigns\n ),\n listDrawingOrderLine.drawing.threadByThread,\n listDrawingOrderLine.drawing.nrColumnsForWeftSelection,\n productionSchedule?.machineQuality?.weaveStructure?.numberOfCloths ?? 2,\n productionSchedule?.machineQuality?.weaveStructure?.numberOfGroundYarns\n ),\n heightInPx: convertPicksToPixels(\n convertHeightInMeterToPicks(\n convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: listDrawingOrderLine.orderLine.article.commercialHeightInMM}, to: Unit.METER}),\n productionSchedule?.machineQuality?.pickDensity * 1000,\n productionSchedule?.machineQuality?.weaveStructure\n ),\n listDrawingOrderLine.picksPerColorLine\n )\n };\n }\n\n return listDrawingOrderLine;\n }\n\n public isRollLengthEditable(params: EditableCallbackParams): boolean {\n return params.data.article.design.repeated;\n }\n\n public getMaxQuantityToPlan(productionScheduleOrderLineWithQuantity: ProductionScheduleOrderLineWithQuantity, productionSchedule: ProductionSchedule): number {\n return productionScheduleOrderLineWithQuantity.amountLeft - this.getAmountInProductionSchedule(productionScheduleOrderLineWithQuantity, productionSchedule);\n }\n\n public isQuantityEditable(params: EditableCallbackParams, productionSchedule: ProductionSchedule, productionOrderCustomSettings: ProductionOrderCustomSettings): boolean {\n if (params.node.level !== 0 || !(params.data instanceof ProductionScheduleOrderLineWithQuantity)) {\n return false;\n }\n return params.data.article.design.repeated\n ? productionOrderCustomSettings?.allowExceedingRequestedAmountOfOrderLineItems || params.data.getHeightLeftInMMForProductionSchedule(productionSchedule.getProductionScheduleItemMultiplier()) > 0\n : productionOrderCustomSettings?.allowExceedingRequestedAmountOfOrderLineItems ||\n params.data.getAmountLeftForProductionSchedule(productionSchedule.getProductionScheduleItemMultiplier()) > productionSchedule.getProductionScheduleItemMultiplier();\n }\n\n public getListDrawingOrderLineAmount(\n productionSchedule: ProductionSchedule,\n productionScheduleOrderLine: ProductionScheduleOrderLineWithQuantity,\n selectedPath?: ProductionSchedulePath,\n availableSpaceInBuggyInPicks?: number,\n buggyLengthMaxInPicks?: number,\n fullQualities?: CarpetWeaveQuality[],\n isAutoFilling?: boolean\n ): number {\n const productionScheduleItemMultiplier = productionSchedule.getProductionScheduleItemMultiplier();\n const amountLeftForProductionSchedule = productionScheduleOrderLine.getAmountLeftForProductionSchedule(productionScheduleItemMultiplier);\n\n if (isAutoFilling) {\n return (\n this.makeQuantitySuggestionCalculation(productionScheduleOrderLine, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks, fullQualities, isAutoFilling) /\n productionScheduleItemMultiplier\n );\n } else {\n return Math.ceil((productionScheduleOrderLine.quantity ?? amountLeftForProductionSchedule) / productionScheduleItemMultiplier);\n }\n }\n\n public getColorSetIdOfSelectedPath(productionSchedule: ProductionSchedule, selectedPath: ProductionSchedulePath): number {\n let colorSetId: number;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n if (productionSchedulePath.pathNumber === selectedPath.pathNumber) {\n colorSetId = productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.coloredYarnSet.overviewListColorSet.id;\n }\n });\n });\n\n return colorSetId;\n }\n\n public getNoRowsOverlayForPreselection(orderLinesNewViewGrid: AgGridAngular): NoDataOverlayComponentParams {\n return {\n scale: 0.7,\n titleParam: 'SALES_ORDERS.ORDER_LINES.ORDER_LINE',\n hideDescription: true,\n isAnyFilterPresent: () => this.hasActiveFilters(orderLinesNewViewGrid)\n } as NoDataOverlayComponentParams;\n }\n\n public getNoRowsOverlayForBuilder(noOverlayAction: OverlayComponentParamsAction[]): NoDataOverlayComponentParams {\n return {\n scale: 0.4,\n hideDescription: false,\n titleKey: 'PRODUCTION_ORDER.WEAVE_PLAN.PRESELECTION.NO_ITEMS_SELECTED',\n descriptionKey: 'PRODUCTION_ORDER.WEAVE_PLAN.PRESELECTION.GO_TO_PRESELECTION',\n actions: noOverlayAction,\n hideActions: false\n } as NoDataOverlayComponentParams;\n }\n\n public getWidthFilterForPath(productionSchedule: ProductionSchedule, selectedPath: ProductionSchedulePath, selectedRestPathColoredYarnSet: OverviewListColoredYarnSetWithStartDent): number {\n let widthFilter: number;\n\n if (AssertionUtils.isNullOrUndefined(selectedRestPathColoredYarnSet)) {\n const nrColumnsForWeftSelection = productionSchedule?.machineQuality?.numberOfColumnsToDropForWeftSelection ?? 0;\n\n widthFilter = selectedPath?.technicalWidthInDents + nrColumnsForWeftSelection;\n } else {\n let totalWidthOfPathsOfColoredYarnSetInDents = 0;\n\n const pathsOfSelectedRestPath = productionSchedule?.productionSchedulePathsOfColoredYarnSets?.filter(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathsOfColoredYarnSet.productionScheduleColoredYarnSet.startDent === selectedRestPathColoredYarnSet.startDent\n );\n\n pathsOfSelectedRestPath[0]?.productionSchedulePaths?.forEach((productionSchedulePath: ProductionSchedulePath) => {\n totalWidthOfPathsOfColoredYarnSetInDents += productionSchedulePath?.technicalWidthInDents;\n });\n\n widthFilter = pathsOfSelectedRestPath[0]?.productionScheduleColoredYarnSet?.technicalWidthInDents - totalWidthOfPathsOfColoredYarnSetInDents;\n\n if (widthFilter === 0) {\n widthFilter = pathsOfSelectedRestPath[0].productionScheduleColoredYarnSet.technicalWidthInDents;\n }\n }\n\n return widthFilter;\n }\n\n public getAmountLeft(orderline: ProductionScheduleOrderLineWithQuantity | ProductionScheduleItemInPathGroupWithIdentification, productionSchedule: ProductionSchedule): number {\n if (!(orderline instanceof ProductionScheduleOrderLineWithQuantity)) {\n return undefined;\n }\n\n const numberOfCloths = productionSchedule.getProductionScheduleItemMultiplier();\n const maxQuantityToPlan = this.getMaxQuantityToPlan(orderline, productionSchedule);\n return maxQuantityToPlan === 1 ? numberOfCloths : maxQuantityToPlan;\n }\n\n public setQuantitySuggestionForPath(\n event: RowSelectedEvent,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number,\n fullQualities: CarpetWeaveQuality[]\n ): void {\n const quantity = this.makeQuantitySuggestionCalculation(event.data, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks, fullQualities);\n\n if (!isNaN(quantity) || quantity < 0) {\n event.node.setDataValue('quantity', quantity);\n } else {\n event.node.setDataValue('quantity', 0);\n }\n }\n\n public getQuantitySuggestionForPath(\n orderline: ProductionScheduleOrderLineWithQuantity,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number,\n fullQualities: CarpetWeaveQuality[],\n shouldMakeSuggestion: boolean = false,\n productionScheduleMultiplier: number = 2\n ): number {\n if (!shouldMakeSuggestion) {\n orderline.quantity = AssertionUtils.isNullOrUndefined(orderline.quantity) ? productionScheduleMultiplier : orderline.quantity;\n return orderline.quantity;\n } else if (!AssertionUtils.isNullOrUndefined(orderline)) {\n orderline.quantity = this.makeQuantitySuggestionCalculation(orderline, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks, fullQualities);\n return orderline?.quantity;\n }\n }\n\n public getLongestPathLengthInPicks(productionSchedule: ProductionSchedule): number {\n const productionSchedulePathLenths =\n productionSchedule?.productionSchedulePathsOfColoredYarnSets\n .flatMap((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePathsOfColoredYarnSet?.productionSchedulePaths ?? [])\n .map((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath?.totalLengthInPicks ?? 0) ?? [];\n\n return Math.max(0, ...productionSchedulePathLenths);\n }\n\n public getProductionScheduleItemsInPathGroup(productionSchedule: ProductionSchedule): ProductionScheduleItemInPathGroup[] {\n return this.getProductionSchedulePaths(productionSchedule).flatMap((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.pathGroups);\n }\n\n public getProductionSchedulePaths(productionSchedule: ProductionSchedule): ProductionSchedulePath[] {\n return productionSchedule.productionSchedulePathsOfColoredYarnSets.flatMap(\n (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => productionSchedulePathsOfColoredYarnSet.productionSchedulePaths\n );\n }\n\n public getAmountInProductionSchedule(orderline: ProductionScheduleOrderLineWithQuantity | ProductionScheduleItemInPathGroupWithIdentification, productionSchedule: ProductionSchedule): number {\n if (orderline instanceof ProductionScheduleOrderLineWithQuantity) {\n let amount = 0;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n productionSchedulePath.pathGroups.forEach((pathItem: ProductionScheduleItemInPathGroup) => {\n if (orderline instanceof ProductionScheduleOrderLineWithQuantity && pathItem.orderLineId === orderline.id) {\n amount += pathItem.quantity * productionSchedule.getProductionScheduleItemMultiplier();\n }\n });\n });\n });\n\n orderline.amountInProductionSchedule = amount;\n\n return amount;\n }\n\n return orderline.productionScheduleItemInPathGroup.quantity * productionSchedule.getProductionScheduleItemMultiplier();\n }\n\n public getProductionScheduleItemsFromProductionSchedule(productionSchedule: ProductionSchedule): ProductionScheduleItemInPathGroup[] {\n return productionSchedule.productionSchedulePathsOfColoredYarnSets.flatMap((productionSchedulePathOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) =>\n productionSchedulePathOfColoredYarnSet.productionSchedulePaths.flatMap((productionSchedulePath: ProductionSchedulePath) => productionSchedulePath.pathGroups)\n );\n }\n\n public getMaxBuggyLengthOrPathThatIsLonger(productionSchedule: ProductionSchedule, buggyLengthMaxInPicks: number): number {\n let longestPathLengthInPicks = this.getLongestPathLengthInPicks(productionSchedule);\n\n return longestPathLengthInPicks > buggyLengthMaxInPicks ? longestPathLengthInPicks : buggyLengthMaxInPicks;\n }\n\n public recalculateQuantitySuggestionWhenRollLengthIsChanged(\n event: CellEditingStoppedEvent,\n rollLengthColumnId: string,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n buggyLengthMaxInPicks: number,\n availableSpaceInBuggyInPicks: number,\n fullQualities: CarpetWeaveQuality[]\n ): void {\n if (event.column.getColId() === rollLengthColumnId) {\n const value = this.getQuantitySuggestionForPath(event.node.data, productionSchedule, selectedPath, availableSpaceInBuggyInPicks, buggyLengthMaxInPicks, fullQualities, true);\n event.node.setDataValue('quantity', value);\n }\n }\n\n public cellRendererSelectorForOrderLinesOnly(\n cellRenderer: any = null,\n cellRendererParams: any = null\n ): (params: ICellRendererParams) => CellRendererSelectorResult {\n return (params: ICellRendererParams): CellRendererSelectorResult =>\n params.node.level === 0 ? {component: cellRenderer ?? params.colDef.cellRenderer, params: cellRendererParams} : {component: EmptyCellRendererComponent};\n }\n\n public getTotalCutbarLengthInPicks(orderline: ProductionScheduleOrderLineWithQuantity, fullQualities: CarpetWeaveQuality[]): number {\n let finishing: Finishing;\n let totalCutbarLengthInPicks = 0;\n\n if (!AssertionUtils.isNullOrUndefined(orderline) && !AssertionUtils.isNullOrUndefined(orderline.article) && !AssertionUtils.isNullOrUndefined(orderline.article.finishing)) {\n finishing = fullQualities.flatMap((quality: CarpetWeaveQuality) => quality.finishings).find((qualityFinishing: Finishing) => qualityFinishing.id === orderline.article.finishing.id);\n }\n\n if (!AssertionUtils.isNullOrUndefined(finishing)) {\n const cutbarBeforeLengthInPicks = isNaN(finishing?.cutbarsInformation?.cutbarBeforeProperties?.technicalLengthInPicks)\n ? 0\n : finishing?.cutbarsInformation?.cutbarBeforeProperties?.technicalLengthInPicks;\n const cutbarAfterLengthInPicks = isNaN(finishing?.cutbarsInformation?.cutbarAfterProperties?.technicalLengthInPicks)\n ? 0\n : finishing?.cutbarsInformation?.cutbarAfterProperties?.technicalLengthInPicks;\n totalCutbarLengthInPicks = cutbarBeforeLengthInPicks + cutbarAfterLengthInPicks;\n }\n\n return totalCutbarLengthInPicks;\n }\n\n private getMaxBuggyLengthOrLongestPath(productionSchedule: ProductionSchedule, buggyLengthMaxInPicks: number): number {\n let longestPathLengthInPicks = this.getLongestPathLengthInPicks(productionSchedule);\n\n return longestPathLengthInPicks !== 0 ? longestPathLengthInPicks : buggyLengthMaxInPicks;\n }\n\n private getSelectedUnit(unit: Unit, forceUnit: boolean): Unit {\n if (forceUnit || this.displayTechnicalUnit) {\n return unit;\n }\n return this.commercialUnit;\n }\n\n private makeQuantitySuggestionCalculation(\n orderline: ProductionScheduleOrderLineWithQuantity,\n productionSchedule: ProductionSchedule,\n selectedPath: ProductionSchedulePath,\n availableSpaceInBuggyInPicks: number,\n buggyLengthMaxInPicks: number,\n fullQualities: CarpetWeaveQuality[],\n isAutoFilling: boolean = false\n ): number {\n let availableSpace: number;\n const numberOfCloths = productionSchedule.machine.jacquard.isSisal ? 1 : productionSchedule.machineQuality?.weaveStructure?.numberOfCloths ?? 2;\n let orderlineHeightInPicks = orderline?.article?.technicalHeightInPicks ?? 0;\n const toPlanAmount = this.getAmountLeft(orderline, productionSchedule);\n\n // For repeated designs we need to take into account the roll Length instead of taking the height of the drawing.\n if (orderline?.article?.design?.repeated && !AssertionUtils.isNullOrUndefined(orderline.rollLengthInMeter)) {\n orderlineHeightInPicks = convertHeightInMeterToPicks(orderline?.rollLengthInMeter, productionSchedule?.machineQuality.pickDensity * 1000, productionSchedule?.machineQuality?.weaveStructure);\n }\n\n if (AssertionUtils.isNullOrUndefined(selectedPath)) {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, availableSpaceInBuggyInPicks ?? buggyLengthMaxInPicks));\n } else {\n let longestPathHeight = 0;\n\n productionSchedule.productionSchedulePathsOfColoredYarnSets?.forEach((productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n productionSchedulePathsOfColoredYarnSet?.productionSchedulePaths.forEach((productionSchedulePath: ProductionSchedulePath) => {\n if (productionSchedulePath?.totalLengthInPicks > longestPathHeight) {\n longestPathHeight = productionSchedulePath?.totalLengthInPicks;\n }\n });\n });\n\n const isLargestPath = longestPathHeight <= selectedPath?.totalLengthInPicks;\n\n if (isLargestPath) {\n if (!AssertionUtils.isNullOrUndefined(availableSpaceInBuggyInPicks)) {\n availableSpace = availableSpaceInBuggyInPicks;\n } else {\n availableSpace = buggyLengthMaxInPicks - selectedPath.totalLengthInPicks;\n }\n } else {\n if (isAutoFilling) {\n availableSpace = availableSpaceInBuggyInPicks;\n } else if (!AssertionUtils.isNullOrUndefined(availableSpaceInBuggyInPicks)) {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, availableSpaceInBuggyInPicks));\n } else {\n availableSpace = Math.ceil(this.getMaxBuggyLengthOrLongestPath(productionSchedule, buggyLengthMaxInPicks)) - selectedPath.totalLengthInPicks;\n }\n }\n }\n\n const totalHeightInPicks = this.getTotalCutbarLengthInPicks(orderline, fullQualities) + orderlineHeightInPicks;\n\n let quantity = Math.floor((availableSpace * numberOfCloths) / totalHeightInPicks);\n\n if (quantity > toPlanAmount) {\n quantity = toPlanAmount;\n }\n\n quantity -= quantity % numberOfCloths;\n\n if (toPlanAmount < 2 && numberOfCloths !== 1) {\n quantity = 0;\n }\n\n return quantity;\n }\n}\n","import {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\n\nexport class ProductionScheduleItemInPathGroupWithIdentification {\n private _productionSchedulePath: ProductionSchedulePath;\n private _productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup;\n private _productionScheduleItemInPathGroupIndex: number;\n private _productionSchedulePathIndex: number;\n private _startDentOfColoredYarnSet: number;\n private _productionScheduleOrderLine: ProductionScheduleOrderLine;\n\n public constructor(\n productionSchedulePath: ProductionSchedulePath,\n productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup,\n productionScheduleItemInPathGroupIndex: number,\n productionSchedulePathIndex: number,\n startDentOfColoredYarnSet: number,\n productionScheduleOrderLine: ProductionScheduleOrderLine\n ) {\n this._productionSchedulePath = productionSchedulePath;\n this._productionScheduleItemInPathGroup = productionScheduleItemInPathGroup;\n this._productionScheduleItemInPathGroupIndex = productionScheduleItemInPathGroupIndex;\n this._productionSchedulePathIndex = productionSchedulePathIndex;\n this._startDentOfColoredYarnSet = startDentOfColoredYarnSet;\n this._productionScheduleOrderLine = productionScheduleOrderLine;\n }\n\n public get productionSchedulePath(): ProductionSchedulePath {\n return this._productionSchedulePath;\n }\n\n public get productionScheduleItemInPathGroup(): ProductionScheduleItemInPathGroup {\n return this._productionScheduleItemInPathGroup;\n }\n\n public get productionScheduleItemInPathGroupIndex(): number {\n return this._productionScheduleItemInPathGroupIndex;\n }\n\n public get productionSchedulePathIndex(): number {\n return this._productionSchedulePathIndex;\n }\n\n public get startDentOfColoredYarnSet(): number {\n return this._startDentOfColoredYarnSet;\n }\n\n public get productionScheduleOrderLine(): ProductionScheduleOrderLine {\n return this._productionScheduleOrderLine;\n }\n}\n","import {OrderLineAdditionalInfo} from '@domain/orderbook/order-line-additional-info';\nimport {OrderLineStatus} from '@domain/orderbook/order-line-status';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {OverviewListArticleForOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-article-for-order-line';\nimport {Priority} from '@vdw/angular-component-library';\n\nexport class ProductionScheduleOrderLineWithQuantity extends ProductionScheduleOrderLine {\n private _quantity: number;\n private _heightInMM: number;\n private _rollLengthInMeter: number;\n\n private constructor(\n id: number,\n salesOrderReference: string,\n salesOrderLineReference: string,\n customerReference: string,\n desiredDate: Date,\n priority: Priority,\n article: OverviewListArticleForOrderLine,\n amount: number,\n amountLeft: number,\n amountProduced: number,\n amountPlanned: number,\n isSelectable: boolean,\n status: OrderLineStatus,\n orderType: string,\n canBePlanned: boolean,\n missingDesign: boolean,\n additionalInfo: OrderLineAdditionalInfo[],\n commercialLengthInMM: number,\n amountInProductionSchedule: number,\n heightInProductionScheduleInMM: number,\n rollLengthInMeter?: number\n ) {\n super(\n id,\n salesOrderReference,\n salesOrderLineReference,\n customerReference,\n desiredDate,\n priority,\n article,\n amount,\n amountLeft,\n amountProduced,\n amountPlanned,\n isSelectable,\n status,\n orderType,\n canBePlanned,\n missingDesign,\n additionalInfo,\n commercialLengthInMM\n );\n\n this.amountInProductionSchedule = amountInProductionSchedule;\n this.heightInProductionScheduleInMM = heightInProductionScheduleInMM;\n this._rollLengthInMeter = rollLengthInMeter;\n }\n\n public get quantity(): number {\n return this._quantity;\n }\n\n public set quantity(value: number) {\n this._quantity = value;\n }\n\n public get heightInMM(): number {\n return this._heightInMM;\n }\n\n public set heightInMM(value: number) {\n this._heightInMM = value;\n }\n\n public get rollLengthInMeter(): number {\n return this._rollLengthInMeter;\n }\n\n public set rollLengthInMeter(value: number) {\n this._rollLengthInMeter = value;\n }\n\n public static fromProductionScheduleOrderLine(productionScheduleOrderLine: ProductionScheduleOrderLine): ProductionScheduleOrderLineWithQuantity {\n return new ProductionScheduleOrderLineWithQuantity(\n productionScheduleOrderLine.id,\n productionScheduleOrderLine.salesOrderReference,\n productionScheduleOrderLine.salesOrderLineReference,\n productionScheduleOrderLine.customerReference,\n productionScheduleOrderLine.desiredDate,\n productionScheduleOrderLine.priority,\n productionScheduleOrderLine.article,\n productionScheduleOrderLine.amount,\n productionScheduleOrderLine.amountLeft,\n productionScheduleOrderLine.amountProduced,\n productionScheduleOrderLine.amountPlanned,\n productionScheduleOrderLine.isSelectable,\n productionScheduleOrderLine.status,\n productionScheduleOrderLine.orderType,\n productionScheduleOrderLine.canBePlanned,\n productionScheduleOrderLine.missingDesign,\n productionScheduleOrderLine.additionalInfo,\n productionScheduleOrderLine.commercialLengthInMM,\n productionScheduleOrderLine.amountInProductionSchedule,\n productionScheduleOrderLine.heightInProductionScheduleInMM\n );\n }\n}\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MACHINES, Machines} from '@infrastructure/http/machine/machines.interface';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {AgGridUtils, AssertionUtils, BaseComponent, ColDefBuilderFactoryService, GridOptionsBuilderFactoryService, SelectGridDialog, Unit} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, ICellRendererParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {combineLatest, map, Observable, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './select-machine.component.html',\n styleUrls: ['./select-machine.component.scss']\n})\nexport class SelectMachineComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('machinesGrid') public machinesGrid: AgGridAngular;\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n public listOfMachines: MachineOverviewList[];\n private readonly allowedMachineTypes: MachineType[];\n private readonly machineQualityId: number;\n private readonly weaveProductId: number;\n private readonly tuftProductId: number;\n private readonly manufacturerName: string = 'manufacturer.name';\n\n private readonly nameColDef = this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').build();\n private readonly manufacturerColDef = this.colDefBuilderFactoryService.getBuilder().withField(this.manufacturerName, true).withHeaderName('MACHINE.MANUFACTURER').build();\n\n public constructor(\n @Inject(MACHINES) private readonly machines: Machines,\n @Inject(MAT_DIALOG_DATA) public data: any,\n private readonly dialogRef: MatDialogRef,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly navigationHelperService: NavigationHelperService<{dialogComponent: SelectMachineComponent}>\n ) {\n super();\n\n this.allowedMachineTypes = data?.allowedMachineTypes ?? this.allowedMachineTypes;\n this.machineQualityId = data?.machineQualityId;\n this.weaveProductId = data?.weaveProductId;\n this.tuftProductId = data?.tuftProductId;\n }\n\n public get gridOptionsForListOfMachines(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.instantiateGridOptionsForListOfMachines();\n this.getListOfMachines();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.machinesGrid?.api];\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({dialogComponent: SelectMachineComponent});\n }\n\n public selectMachine(): void {\n this.dialogRef.close(this.machinesGrid.api.getSelectedRows()[0]);\n }\n\n public canSelectMachine(): boolean {\n let result = false;\n if (!AssertionUtils.isNullOrUndefined(this.machinesGrid?.api)) {\n result = this.machinesGrid.api.getSelectedRows()?.length > 0 === true;\n }\n return result;\n }\n\n private getListOfMachines(): void {\n const machinesRequests: Observable[] = [];\n\n if (AssertionUtils.isNullOrUndefined(this.machineQualityId) && AssertionUtils.isNullOrUndefined(this.weaveProductId) && AssertionUtils.isNullOrUndefined(this.tuftProductId)) {\n machinesRequests.push(this.machines.getAll());\n } else {\n if (!AssertionUtils.isNullOrUndefined(this.machineQualityId)) {\n machinesRequests.push(this.machines.getAllForMachineQualityId(this.machineQualityId));\n }\n if (!AssertionUtils.isNullOrUndefined(this.weaveProductId)) {\n machinesRequests.push(this.machines.getAllForWeaveProductId(this.weaveProductId));\n }\n if (!AssertionUtils.isNullOrUndefined(this.tuftProductId)) {\n machinesRequests.push(this.machines.getAllForTuftProductId(this.tuftProductId));\n }\n }\n\n combineLatest(machinesRequests)\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n map((results: MachineOverviewList[][]) => this.flattenAndOnlySubset(results))\n )\n .subscribe((listOfMachines: MachineOverviewList[]) => {\n if (this.allowedMachineTypes?.length > 0) {\n this.listOfMachines = listOfMachines.filter((machine: MachineOverviewList) => this.allowedMachineTypes.includes(machine.machineType));\n } else {\n this.listOfMachines = listOfMachines;\n }\n });\n }\n\n private flattenAndOnlySubset(listOfMachines: MachineOverviewList[][]): MachineOverviewList[] {\n const flattenedMap = listOfMachines.flatMap((values: MachineOverviewList[]) => [...values]);\n\n if (listOfMachines.length <= 1) {\n return flattenedMap;\n }\n\n return flattenedMap.filter(\n (value: MachineOverviewList, index: number, array: MachineOverviewList[]) =>\n array.filter((firstFilterElement: MachineOverviewList) => firstFilterElement.id === value.id).length === listOfMachines.length &&\n array.findIndex((secondFilterElement: MachineOverviewList) => secondFilterElement.id === value.id) === index\n );\n }\n\n private instantiateGridOptionsForListOfMachines(): void {\n const isWeavingMachineAllowed = this.allowedMachineTypes?.includes(MachineType.WEAVING_MACHINE);\n const isTuftingMachineAllowed = this.allowedMachineTypes?.includes(MachineType.TUFT);\n\n let columns: ColDef[];\n let gridIdentifier: GridIdentifier;\n if (isWeavingMachineAllowed) {\n columns = this.getColumnDefsForListOfWeavingMachines();\n gridIdentifier = GridIdentifier.SELECT_WEAVING_MACHINE;\n } else if (isTuftingMachineAllowed) {\n columns = this.getColumnDefsForListOfTuftingMachines();\n gridIdentifier = GridIdentifier.SELECT_TUFT_MACHINE;\n } else {\n columns = this.getColumnDefsForListOfMachines();\n gridIdentifier = GridIdentifier.SELECT_MACHINE;\n }\n\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(columns, gridIdentifier)\n .withOnCellDoubleClicked(() => this.selectMachine())\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: 'MACHINE.MACHINE',\n hideDescription: true\n })\n .withLoadingOverlay({\n scale: 0.7\n })\n .withRememberStateForNavigationHelper()\n .build()\n ];\n }\n\n private getColumnDefsForListOfMachines(): ColDef[] {\n return [\n this.nameColDef,\n this.manufacturerColDef,\n this.colDefBuilderFactoryService.getBuilder().withField('type', true).withHeaderName('GENERAL.TYPE').build(),\n this.colDefBuilderFactoryService.getBuilder().withField('machineGroup.name', true).withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.GROUPS').build(),\n this.colDefBuilderFactoryService.getBuilder().withField('machineType', true).withHeaderName('MACHINE.DETAILS.MACHINE_TYPE').build(),\n this.colDefBuilderFactoryService.getBuilder().withField('dentsForFabric', true).withHeaderName('MACHINE.DETAILS.NR_DENTS', 1, true).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('numberOfCreelPositions', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.CREEL_POSITIONS', 1, true).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('orderId', true).withHeaderName('SUPPORT.MACHINES_LIST.TABLE_HEADER.ORDER_ID').build()\n ];\n }\n\n private getColumnDefsForListOfLiteMachines(): ColDef[] {\n return [\n this.nameColDef,\n this.manufacturerColDef,\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('widthInCm')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => AgGridUtils.buildAgGridCellTextWithUnit(params.value, Unit.CENTIMETER, this.l10nIntlService))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('standardSpeed')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_SPEED')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => AgGridUtils.buildAgGridCellTextWithUnit(params.value, Unit.ROTATIONS_PER_MINUTE, this.l10nIntlService))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('standardEfficiency')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_EFFICIENCY')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => `${params.value} %`)\n .build()\n ];\n }\n\n private getColumnDefsForListOfWeavingMachines(): ColDef[] {\n return [\n ...this.getColumnDefsForListOfLiteMachines(),\n this.colDefBuilderFactoryService.getBuilder().withField('numberOfFeeders', true).withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_FEEDERS').withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('numberOfShafts', true).withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_SHAFTS').withRightAlignment().build()\n ];\n }\n\n private getColumnDefsForListOfTuftingMachines(): ColDef[] {\n return [\n ...this.getColumnDefsForListOfLiteMachines(),\n this.colDefBuilderFactoryService.getBuilder().withField('gauge.name').withHeaderName('GENERAL.DIMENSIONS.GAUGE').withRightAlignment().build()\n ];\n }\n}\n","
\n \n
\n \n
\n \n
\n","export enum ProductionScheduleClickEvent {\n SAVE = 'SAVE',\n SAVE_AND_CREATE_NEW = 'SAVE_AND_CREATE_NEW',\n SAVE_AND_GO_TO_PRESELECTION = 'SAVE_AND_GO_TO_PRESELECTION',\n SAVE_AND_QUIT = 'SAVE_AND_QUIT',\n PRESELECTION = 'PRESELECTION',\n NEXT_PHASE = 'NEXT_PHASE',\n VERIFY_AND_CONFIRM = 'VERIFY_AND_CONFIRM',\n COMPLETE = 'COMPLETE',\n DECREATE = 'DECREATE',\n SETTINGS = 'SETTINGS',\n CANCEL = 'CANCEL'\n}\n","import {Component} from '@angular/core';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {BaseComponent, convertCommercialUnit, Unit} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {round} from 'lodash-es';\nimport {PathLengthCellRendererParams} from './path-length-cell-renderer-params';\n\n@Component({\n templateUrl: './path-length.component.html'\n})\nexport class PathLengthComponent extends BaseComponent implements ICellRendererAngularComp {\n public pathLengthInCommercialUnit = 0;\n public pathLengthInTechnicalUnit = 0;\n public commercialUnit: Unit;\n private productionSchedulePath: ProductionSchedulePath;\n\n public agInit(params: PathLengthCellRendererParams): void {\n this.productionSchedulePath = params.data;\n this.commercialUnit = params.commercialUnit;\n\n this.calculatePathLengthInCommercialUnit();\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n private calculatePathLengthInCommercialUnit(): void {\n const pathLengthInMillimeters: number = this.productionSchedulePath.totalLengthInMM;\n\n this.pathLengthInCommercialUnit = round(convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: pathLengthInMillimeters}, to: this.commercialUnit}), 2);\n\n this.pathLengthInTechnicalUnit = this.productionSchedulePath.totalLengthInPicks;\n }\n}\n","\n {{ pathLengthInCommercialUnit }} \n {{ commercialUnit }}\n / {{ pathLengthInTechnicalUnit }} \n {{ 'GENERAL.UNIT.PICKS' | bmsTranslate }}\n\n","import {Component} from '@angular/core';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {BaseComponent, convertCommercialUnit, Unit} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {round} from 'lodash-es';\nimport {PathWidthCellRendererParams} from './path-width-cell-renderer-params';\n\n@Component({\n templateUrl: './path-width.component.html'\n})\nexport class PathWidthComponent extends BaseComponent implements ICellRendererAngularComp {\n public commercialWidth = 0;\n public commercialUnit: Unit;\n public productionSchedulePath: ProductionSchedulePath;\n\n public agInit(params: PathWidthCellRendererParams): void {\n this.productionSchedulePath = params.data;\n this.commercialUnit = params.commercialUnit;\n\n this.calculateCommercialWidth();\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n private calculateCommercialWidth(): void {\n const commercialWidthOfPath: number = convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: this.productionSchedulePath.commercialWidthInMM}, to: this.commercialUnit});\n this.commercialWidth = round(commercialWidthOfPath, 2);\n }\n}\n","\n {{ commercialWidth }} \n {{ commercialUnit }}\n / {{ productionSchedulePath.technicalWidthInDents }} \n {{ 'GENERAL.UNIT.DENTS' | bmsTranslate }}\n\n","
\n \n \n \n

{{ coloredYarnSetPath.productionScheduleColoredYarnSet.coloredYarnSet.name }}

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

{{ 'GENERAL.SUMMARY' | bmsTranslate }}

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

{{ 'MACHINE.DETAILS.CREEL_MAPPING.TITLE' | bmsTranslate }}

\n
\n {{ 'TEXTILE_DATA.COLOR.COLOR' | bmsTranslate: {count: 2} }}\n \n {{ 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE' | bmsTranslate: {count: 2} }}\n
\n
\n \n
\n
\n
\n \n
\n","import {Component, Input, OnChanges, OnInit, SimpleChanges} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {SourceElementUtils} from '@application/helper/source-element-utils';\nimport {getMappedColoredYarnSet} from '@application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {\n AgGridUtils,\n AssertionUtils,\n ColDefBuilderFactoryService,\n convertCommercialUnit,\n DialogBuilderFactoryService,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {ColDef, GridOptions, ICellRendererParams, ITooltipParams, RowClassParams, ValueGetterParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {PathLengthComponent} from './path-length/path-length.component';\nimport {PathWidthComponent} from './path-width/path-width.component';\n\n@Component({\n selector: 'app-production-schedule-builder-summary',\n templateUrl: './production-schedule-builder-summary.component.html',\n styleUrls: ['./production-schedule-builder-summary.component.scss']\n})\nexport class ProductionScheduleBuilderSummaryComponent implements OnInit, OnChanges {\n @Input() public customSettings: ProductionOrderCustomSettings;\n @Input() public productionSchedule: ProductionSchedule;\n @Input() public commercialUnit: Unit;\n\n public gridOptionsForProductionScheduleColoredYarnSets: GridOptions[] = [];\n\n private maxDifferenceInPathCommercialLength = 0;\n private readonly percentageUnit = '%';\n\n public constructor(\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {}\n\n public ngOnInit(): void {\n this.calculateMaxDifferenceInPathCommercialLength();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('productionSchedule' in changes) {\n this.gridOptionsForProductionScheduleColoredYarnSets = this.productionSchedule.productionSchedulePathsOfColoredYarnSets.map(() => {\n return this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfPaths(), GridIdentifier.PRODUCTION_SCHEDULE_COLORED_YARN_SETS)\n .withoutColumnMenu()\n .withNoRowsOverlay({\n smallTableMode: true,\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withLoadingOverlay({\n smallTableMode: true\n } as OverlayComponentParams)\n .withGetRowClass((params: RowClassParams) => this.getRowClass(params.data))\n .withTooltipShowDelay(100)\n .withoutGetRowId()\n .build();\n });\n\n this.gridOptionsForProductionScheduleColoredYarnSets.forEach((gridOptionsForProductionScheduleColoredYarnSet: GridOptions, indexA: number) => {\n gridOptionsForProductionScheduleColoredYarnSet.alignedGrids = this.gridOptionsForProductionScheduleColoredYarnSets.filter((_: GridOptions, indexB: number) => indexA !== indexB);\n });\n }\n }\n\n public trackByColoredYarnSetPathId = (index: number, coloredYarnSetPath: any): number => coloredYarnSetPath.id;\n\n public showColoredYarnSetDetails(event: MouseEvent, coloredYarnSetIndex: number): void {\n event.stopPropagation();\n\n const productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent = this.productionSchedule.coloredYarnSets[coloredYarnSetIndex];\n const startDent = `${this.translate.instant('GENERAL.START_DENT')}: ${productionScheduleColoredYarnSet.startDent}`;\n const widthInDents = `${this.translate.instant('GENERAL.WIDTH_IN_DENTS')}: ${productionScheduleColoredYarnSet.technicalWidthInDents}`;\n const textileDataAmount = `${startDent}, ${widthInDents}`;\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('reposition-dialog')\n .withWidth('706px')\n .openDialog(RepositionDialogComponent, {\n textileData: productionScheduleColoredYarnSet.coloredYarnSet,\n textileDataAmount,\n component: TextileDataDetailComponent,\n sourceElement: SourceElementUtils.findSourceElementForDialog(event, 'color-list-preview-container'),\n positionOfDialog: PositionOfDialog.RIGHT\n });\n }\n\n public getColoredYarnSetCreelMap(coloredYarnSetWithStartDentId: number): CreelMap {\n return this.productionSchedule.mappingForCurrentPositionOnMachine.find((creelMap: CreelMap) => {\n return creelMap.coloredYarnSetId === coloredYarnSetWithStartDentId;\n });\n }\n\n public getCreelMap(): CreelMap[] {\n return this.productionSchedule?.mappingForCurrentPositionOnMachine?.length === 0 || AssertionUtils.isNullOrUndefined(this.productionSchedule?.mappingForCurrentPositionOnMachine)\n ? this.createActiveCreelMap()\n : this.productionSchedule.mappingForCurrentPositionOnMachine;\n }\n\n public getColorList(coloredYarnSet: OverviewListColoredYarnSet): OverviewListColoredYarnSet {\n return getMappedColoredYarnSet(\n coloredYarnSet,\n this.getCreelMap()?.find((creelMap: CreelMap) => creelMap.coloredYarnSetId === coloredYarnSet.id),\n 'asc'\n );\n }\n\n public getCreelMapping(coloredYarnSet: OverviewListColoredYarnSet): CreelMap {\n return this.getCreelMap()?.find((creelMap: CreelMap) => creelMap.coloredYarnSetId === coloredYarnSet.id);\n }\n\n private createActiveCreelMap(): CreelMap[] {\n return this.productionSchedule.coloredYarnSets.map((coloredYarnSetsWithStartDent: OverviewListColoredYarnSetWithStartDent) => {\n return {\n coloredYarnSetId: coloredYarnSetsWithStartDent.coloredYarnSet.id,\n creelPositions: coloredYarnSetsWithStartDent.coloredYarnSet.overviewListColorSet.creelPositions.map((creelPosition: OverviewListCreelPosition) => {\n return {\n creelPosition: creelPosition.position,\n currentPositionOnMachine: creelPosition.position\n };\n })\n } as CreelMap;\n });\n }\n\n private getColumnDefsForListOfPaths(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').withoutFilter().build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('commercialWidthInMM')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withCellRenderer(PathWidthComponent, {\n commercialUnit: this.commercialUnit\n })\n .withRightAlignment()\n .withComparator(intComparator)\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('totalLengthInMM')\n .withHeaderName('GENERAL.DIMENSIONS.LENGTH')\n .withCellRenderer(PathLengthComponent, {\n commercialUnit: this.commercialUnit,\n productionScheduleLengthInMillimeters: this.productionSchedule.getProductionScheduleLengthInMillimeters()\n })\n .withRightAlignment()\n .withComparator(intComparator)\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('PRODUCTION_ORDER.WEAVE_PLAN.WEAVE_PLAN_SUMMARY.REST_LENGTH')\n .withValueGetter((params: ValueGetterParams) => this.getRestLengthInCommercialUnit(params.data))\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, this.commercialUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, this.commercialUnit))\n .withRightAlignment()\n .withComparator(intComparator)\n .withoutFilter()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('PRODUCTION_ORDER.WEAVE_PLAN.WEAVE_PLAN_SUMMARY.LOSS')\n .withRightAlignment()\n .withValueGetter((params: ValueGetterParams) => this.getLossPercentage(params.data))\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, this.percentageUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, this.percentageUnit))\n .withComparator(intComparator)\n .withoutFilter()\n .build()\n ];\n }\n\n private calculateMaxDifferenceInPathCommercialLength(): void {\n this.maxDifferenceInPathCommercialLength = convertCommercialUnit({\n from: {\n unit: Unit.MILLIMETER,\n value: this.customSettings?.maxDifferenceInPathLengthInMillimeters\n },\n to: this.commercialUnit\n });\n }\n\n private getRestLengthInCommercialUnit(productionSchedulePath: ProductionSchedulePath): number {\n const restLengthInMillimeters = this.productionSchedule.getProductionScheduleLengthInMillimeters() - productionSchedulePath.totalLengthInMM;\n const commercialRestLengthOfPath: number = convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: restLengthInMillimeters}, to: this.commercialUnit});\n return +Math.round(commercialRestLengthOfPath).toFixed(2);\n }\n\n private getLossPercentage(productionSchedulePath: ProductionSchedulePath): number {\n const restLengthInMillimeters = this.productionSchedule.getProductionScheduleLengthInMillimeters() - productionSchedulePath.totalLengthInMM;\n return +Math.round((restLengthInMillimeters / this.productionSchedule.getProductionScheduleLengthInMillimeters()) * 100).toFixed(2);\n }\n\n private getRowClass(productionSchedulePath: ProductionSchedulePath): string[] {\n return this.getRestLengthInCommercialUnit(productionSchedulePath) > this.maxDifferenceInPathCommercialLength ? ['warning'] : ['normal'];\n }\n\n private buildAgGridCellTextWithUnit(value: number, unit: string): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, unit, this.l10nIntlService);\n }\n\n private buildAgGridCellTooltipWithUnit(value: number, unit: string): string {\n return AgGridUtils.buildAgGridCellTooltipWithUnit(value, unit, this.l10nIntlService);\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleItemInPathGroup} from '@domain/production-schedule/production-schedule-item-in-path-group';\nimport {ProductionScheduleOrderLine} from '@domain/production-schedule/production-schedule-order-line';\nimport {ProductionSchedulePath} from '@domain/production-schedule/production-schedule-path';\nimport {ProductionSchedulePhase} from '@domain/production-schedule/production-schedule-phase.enum';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {PathWidth} from '@domain/textile-data/machine-quality/path-width';\nimport {ListDrawing} from '@presentation/components/drawing-list/list-drawing';\nimport {Zone} from '@presentation/pages/texfab/production-schedule/add/plan/builder/zone';\nimport {Observable} from 'rxjs';\n\nexport const PRODUCTION_SCHEDULE_PLAN = new InjectionToken('ProductionSchedulePlan');\n\nexport interface ProductionSchedulePlan {\n currentUpdatedProductionSchedule: Observable;\n currentEditingPaths: Observable;\n didPatchProductionSchedulePlan: Observable;\n currentSelectedZone: Observable;\n\n applyMeasurementsCalculationsFactor(factorForConversionFromMillimetersToDents: number): void;\n\n initialiseProductionSchedule(productionSchedule: ProductionSchedule): Observable;\n\n hasUnsavedChanges(newBuilder: boolean): boolean;\n\n hasNoPaths(productionSchedule: ProductionSchedule): boolean;\n\n disableUnsavedChanges(): void;\n\n discardUnsavedChanges(): void;\n\n discardTemporarySavedChanges(): void;\n\n dispatchNewProductionSchedule(productionSchedule: ProductionSchedule): void;\n\n updateEditingPaths(isEditingPaths: boolean): void;\n\n setSelectedZone(zone: Zone): void;\n\n canVerify(): boolean;\n\n manualSaveProductionSchedule(id?: string, productionSchedulePhase?: ProductionSchedulePhase): void;\n\n addDrawingToColoredYarnSet(listDrawing: ListDrawing, startDent: number, indexInColoredYarnSet?: number): Observable;\n\n addDrawingToProductionSchedulePath(\n listDrawing: ListDrawing,\n productionSchedulePathNumber: number,\n productionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n indexInProductionSchedulePath?: number\n ): Observable;\n\n addPathLayoutTemplates(productionSchedule: ProductionSchedule): void;\n\n removeProductionScheduleItem(productionScheduleItemInPathGroupUuid: string, productionSchedulePathNumber: number, startDentOfColoredYarnSet, newBuilder?: boolean): void;\n\n removeProductionScheduleItems(productionScheduleItems: ProductionScheduleItemInPathGroup[], onSuccess?: () => void): void;\n\n removeProductionSchedulePath(productionSchedulePathNumber: number, coloredYarnSetId: number): void;\n\n editProductionScheduleItem(\n productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup,\n productionScheduleItemInPathGroupIndex: number,\n productionSchedulePathIndex: number,\n startDentOfColoredYarnSet: number\n ): void;\n\n moveProductionScheduleItemToProductionSchedulePath(\n sourceProductionSchedulePathNumber: number,\n indexInSourceProductionSchedulePath: number,\n sourceProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n destinationProductionSchedulePathNumber: number,\n indexInDestinationProductionSchedulePath: number,\n destinationProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup\n ): void;\n\n moveProductionScheduleItemToColoredYarnSet(\n sourceProductionSchedulePathNumber: number,\n sourceProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n destinationProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n productionScheduleItemInPathGroup: ProductionScheduleItemInPathGroup,\n indexInColoredYarnSet?: number\n ): void;\n\n moveProductionSchedulePathToColoredYarnSet(\n sourceProductionSchedulePath: ProductionSchedulePath,\n sourceProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n destinationProductionScheduleColoredYarnSet: OverviewListColoredYarnSetWithStartDent,\n indexInProductionSchedulePathsOfColoredYarnSet?: number,\n pathIndex?: number\n ): void;\n\n updateDrawingsAndOrderLinesOfProductionSchedule(drawings: Drawing[], orderLines: ProductionScheduleOrderLine[], productionSchedule?: ProductionSchedule): void;\n\n setProductionSchedule(productionSchedule: ProductionSchedule): void;\n\n cancelOngoingRecoloring(): void;\n\n lookupCommercialWidthInPathWidths(commercialWidthInMM: number, pathWidths: PathWidth[]): number | null;\n}\n","import {Directive, Input, OnInit} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {Authentication} from '@infrastructure/http/authentication/authentication';\nimport {ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {AssertionUtils, BaseComponent, canShowErrorForErrorCodeAndFormControlForFormGroup, moment} from '@vdw/angular-component-library';\nimport {DateTime} from 'luxon';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {ConfirmationForm} from './confirmation-form';\n\n@Directive()\nexport abstract class ConfirmProductionScheduleBaseComponent extends BaseComponent implements OnInit {\n @Input() public productionSchedule: ProductionSchedule;\n public maximumLossOfProductionScheduleInPercent: number;\n public confirmationForm: ConfirmationForm;\n public completingAndPlanning = false;\n public completingAndQueuing = false;\n public completingAndProcess = false;\n public processing = false;\n public readonly TEXFAB_QUEUE_PERMISSION = Permission.TEXFAB_CARPET_QUEUE;\n public readonly PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE = Permission.TEXFAB_PLANNINGBOARD;\n public readonly PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE_NEW = Permission.TEXFAB_PLANNINGBOARD_NEW;\n public readonly SCHEDULE_DUE_DATE_PERMISSION = Permission.SCHEDULE_DUE_DATE;\n private currentSubscription: ProfileSubscription;\n\n public constructor(\n private readonly formBuilder: FormBuilder,\n protected readonly productionSchedules: ProductionSchedules,\n protected authentication: Authentication\n ) {\n super();\n }\n\n public datePickerFilter = (date: Date | null): boolean => {\n let result = moment().startOf('day').isSameOrBefore(date);\n\n if (!result) {\n const dueDate: Date = this.confirmationForm.getRawValue().dueDate?.toJSDate();\n if (!AssertionUtils.isNullOrUndefined(dueDate) && !AssertionUtils.isNullOrUndefined(this.productionSchedule.dueDate)) {\n const dueDateIsUnchanged = this.confirmationForm.controls.dueDate.pristine;\n if (dueDateIsUnchanged) {\n result = date.getFullYear() === dueDate.getFullYear() && date.getMonth() === dueDate.getMonth() && date.getDate() === dueDate.getDate();\n }\n }\n }\n\n return result;\n };\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.setFormFields();\n }\n\n public canShowConfirmationForm(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.confirmationForm);\n }\n\n public canShowErrorForFormControl(errorCode: string, formControlName: string): boolean {\n return canShowErrorForErrorCodeAndFormControlForFormGroup(errorCode, formControlName, this.confirmationForm);\n }\n\n public canShowWarningsForProductionSchedule(): boolean {\n let result = !AssertionUtils.isNullOrUndefined(this.productionSchedule.warnings);\n\n if (result) {\n const {totalLossInPercent, maxBuggyLengthExceeded, minBuggyLengthReached} = this.productionSchedule.warnings;\n const currentLossInPercentExceedsMaximumLoss = totalLossInPercent > this.maximumLossOfProductionScheduleInPercent;\n\n result = currentLossInPercentExceedsMaximumLoss || maxBuggyLengthExceeded || !minBuggyLengthReached;\n }\n\n return result;\n }\n\n public getEarliestPossibleDueDate(): DateTime {\n return DateTime.fromJSDate(this.productionSchedule.dueDate) ?? DateTime.now();\n }\n\n private canComplete(): boolean {\n return this.confirmationForm.valid;\n }\n\n private isUserBasic(): boolean {\n return !this.hasTexfabQueuePermission() && !this.hasPlanningPermission();\n }\n\n public canShowPlanAndQueueButton(): boolean {\n return (\n this.canComplete() && this.productionSchedule.machine.isMachinePremium() && this.hasTexfabQueuePermission() && this.productionSchedule.addToPlanboard && !this.productionSchedule.machine.remote\n );\n }\n\n public canShowProcessAndSendButton(): boolean {\n return this.canShowProcessButton();\n }\n\n public canShowPlanButton(): boolean {\n return !this.isUserBasic() && this.productionSchedule.addToPlanboard && !this.productionSchedule.machine.remote;\n }\n\n public canShowProcessButton(): boolean {\n return this.canComplete() && (this.isUserBasic() || !this.productionSchedule.addToPlanboard || !this.productionSchedule.machine.isMachinePremium() || this.productionSchedule.machine.remote);\n }\n\n public isProcessAndSendRaisedButton(): boolean {\n return this.productionSchedule.machine.isMachinePremium() && (this.isUserBasic() || !this.productionSchedule.addToPlanboard);\n }\n\n public process(): void {\n if (!this.completingAndQueuing && !this.completingAndPlanning && !this.completingAndProcess) {\n this.adjustProductionOrderLabelWithLatestChanges();\n this.processing = true;\n\n this.productionSchedules\n .process(this.productionSchedule)\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n finalize(() => (this.processing = false))\n )\n .subscribe(() => this.onProductionScheduleCompleted());\n }\n }\n\n public completeAndPlan(): void {\n if (!this.completingAndQueuing && !this.completingAndProcess && !this.processing) {\n this.adjustProductionOrderLabelWithLatestChanges();\n this.completingAndPlanning = true;\n\n this.productionSchedules\n .completeAndPlan(this.productionSchedule)\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n finalize(() => (this.completingAndPlanning = false))\n )\n .subscribe(() => this.onProductionScheduleCompleted());\n }\n }\n\n public completeAndQueue(): void {\n if (!this.completingAndPlanning && !this.completingAndProcess && !this.processing) {\n this.adjustProductionOrderLabelWithLatestChanges();\n this.completingAndQueuing = true;\n\n this.productionSchedules\n .completeAndQueue(this.productionSchedule)\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n finalize(() => (this.completingAndQueuing = false))\n )\n .subscribe(() => this.onProductionScheduleCompleted());\n }\n }\n\n public hasScheduleDueDatePermission(): boolean {\n return this.currentSubscription?.hasPermission(this.SCHEDULE_DUE_DATE_PERMISSION);\n }\n\n private hasTexfabQueuePermission(): boolean {\n return this.currentSubscription?.hasPermission(this.TEXFAB_QUEUE_PERMISSION);\n }\n\n private hasPlanningPermission(): boolean {\n return this.currentSubscription.hasAtLeastOneOfThePermissions([this.PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE, this.PERMISSION_TO_PLAN_PRODUCTION_SCHEDULE_NEW]);\n }\n\n private adjustProductionOrderLabelWithLatestChanges(): void {\n this.productionSchedule.name = this.confirmationForm.value.name;\n this.productionSchedule.dueDate = this.confirmationForm.getRawValue().dueDate?.toJSDate();\n this.productionSchedule.comment = this.confirmationForm.value.comment;\n }\n\n private setFormFields(): void {\n this.confirmationForm = this.formBuilder.group({\n name: this.formBuilder.control(this.productionSchedule.name, Validators.required, AsyncUniqueValidator.createValidator(this.productionSchedules, this.productionSchedule.name)),\n dueDate: this.formBuilder.control({value: this.productionSchedule.dueDate ? DateTime.fromJSDate(this.productionSchedule.dueDate) : null, disabled: !this.hasScheduleDueDatePermission()}),\n comment: this.formBuilder.control(this.productionSchedule.comment)\n });\n }\n\n protected abstract onProductionScheduleCompleted(): void;\n\n protected abstract onProductionScheduleCompleted(): void;\n}\n","import {Component, Input} from '@angular/core';\nimport {ProductionScheduleWarnings} from '@domain/production-schedule/production-schedule-warnings';\nimport {Message, MessageType, TranslateService} from '@vdw/angular-component-library';\n\n@Component({\n selector: 'app-warnings-for-production-schedule-plan',\n templateUrl: './warnings-for-production-schedule-plan.component.html'\n})\nexport class WarningsForProductionSchedulePlanComponent {\n @Input() public productionScheduleWarnings: ProductionScheduleWarnings;\n @Input() public maximumLossOfProductionScheduleInPercent: number;\n private translate: TranslateService;\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public canShowWarningForMaximumLossInProductionSchedule(): boolean {\n return this.getWarningTotalLossInPercentValue() > this.maximumLossOfProductionScheduleInPercent;\n }\n\n public getWarningTotalLossInPercentValue(): number {\n return this.productionScheduleWarnings.totalLossInPercent;\n }\n\n public getMessages(): Message[] {\n const result = [];\n if (this.canShowWarningForMaximumLossInProductionSchedule()) {\n const description = this.translate.instant('PRODUCTION_ORDER.WEAVE_PLAN.CONFIRMATION.WARNINGS.MAXIMUM_LOSS_EXCEEDED', {\n currentLossInPercent: this.getWarningTotalLossInPercentValue(),\n maximumLossInPercent: this.maximumLossOfProductionScheduleInPercent\n });\n result.push(new Message(null, description, MessageType.WARNING, null));\n }\n\n if (!this.productionScheduleWarnings.minBuggyLengthReached) {\n const description = this.translate.instant('PRODUCTION_ORDER.WEAVE_PLAN.CONFIRMATION.WARNINGS.MINIMUM_BUGGY_LENGTH_NOT_REACHED');\n result.push(new Message(null, description, MessageType.WARNING, null));\n }\n\n if (this.productionScheduleWarnings.maxBuggyLengthExceeded) {\n const description = this.translate.instant('PRODUCTION_ORDER.WEAVE_PLAN.CONFIRMATION.WARNINGS.MAXIMUM_BUGGY_LENGTH_EXCEEDED');\n result.push(new Message(null, description, MessageType.WARNING, null));\n }\n\n return result;\n }\n}\n","\n","
\n \n
\n
\n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n \n
\n\n
\n \n {{ 'GENERAL.COMMENT' | bmsTranslate }}\n \n \n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n \n {{ 'PRODUCTION_ORDER.REPEAT_ORDER' | bmsTranslate }}\n \n {{ getNumberOfRepeatsForecast() }}\n \n \n \n
\n
\n\n \n \n\n \n \n
\n
\n\n
\n \n @if (canShowProcessButton()) {\n \n }\n @if (canShowProcessAndSendButton()) {\n \n }\n @if (canShowPlanButton()) {\n \n }\n
\n

({{ 'GENERAL.HINTS.MACHINE_NOT_PREMIUM' | bmsTranslate }})

\n
\n \n
\n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {ProductionSchedulePathsOfColoredYarnSet} from '@domain/production-schedule/production-schedule-paths-of-colored-yarn-set';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {convertCommercialUnit, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {cloneDeep, sumBy, toNumber} from 'lodash-es';\nimport {ConfirmProductionScheduleBaseComponent} from '../confirm-production-schedule-base.component';\nimport {ConfirmationForm} from '../confirmation-form';\nimport {ConfirmProductionScheduleOnDesktopInput} from './confirm-production-schedule-desktop-input.interface';\n\n@Component({\n templateUrl: './confirm-production-schedule-desktop.component.html',\n styleUrls: ['./confirm-production-schedule-desktop.component.scss']\n})\nexport class ConfirmProductionScheduleDesktopComponent extends ConfirmProductionScheduleBaseComponent implements OnInit {\n public commercialUnit: Unit;\n public confirmationForm: ConfirmationForm;\n public productionOrderCustomSettings: ProductionOrderCustomSettings;\n public accessAllPermission: Permission = Permission.ACCESS_ALL;\n private readonly dialogRef: MatDialogRef;\n\n public constructor(\n dialogRef: MatDialogRef,\n formBuilder: FormBuilder,\n @Inject(PRODUCTION_SCHEDULES) protected readonly productionSchedules: ProductionSchedules,\n @Inject(MAT_DIALOG_DATA) public data: ConfirmProductionScheduleOnDesktopInput,\n @Inject(AUTHENTICATION) protected authentication: Authentication,\n private translate: TranslateService\n ) {\n super(formBuilder, productionSchedules, authentication);\n\n this.dialogRef = dialogRef;\n this.productionSchedule = cloneDeep(data.productionSchedule);\n this.commercialUnit = data.commercialUnit;\n this.productionOrderCustomSettings = data.productionOrderCustomSettings;\n this.maximumLossOfProductionScheduleInPercent = this.productionOrderCustomSettings?.maximumLossInPercent ?? 0;\n }\n\n public decrementNumberOfRepeats(): void {\n if (this.productionSchedule.numberOfRepeats > 0) {\n this.productionSchedule.numberOfRepeats--;\n }\n }\n\n public incrementNumberOfRepeats(): void {\n this.productionSchedule.numberOfRepeats++;\n }\n\n public amountChanged(numberOfRepeats: number): void {\n this.productionSchedule.numberOfRepeats = numberOfRepeats;\n }\n\n public getNumberOfRepeatsForecast(): string {\n const totalLengthInMM = sumBy(this.productionSchedule.productionSchedulePathsOfColoredYarnSets, (productionSchedulePathsOfColoredYarnSet: ProductionSchedulePathsOfColoredYarnSet) => {\n return sumBy(productionSchedulePathsOfColoredYarnSet.productionSchedulePaths, 'totalLengthInMM');\n });\n\n let hint;\n\n if (toNumber(this.productionSchedule.numberOfRepeats) === 0) {\n hint = this.translate.instant('GENERAL.HINTS.UNKNOWN');\n } else {\n hint = `${this.translate.instant('GENERAL.DIMENSIONS.TOTAL_LENGTH')}: ${this.productionSchedule.numberOfRepeats} x ${convertCommercialUnit({\n from: {\n unit: Unit.MILLIMETER,\n value: totalLengthInMM\n },\n to: Unit.METER\n })}${Unit.METER}`;\n }\n\n return hint;\n }\n\n protected onProductionScheduleCompleted(): void {\n this.dialogRef.close(this.productionSchedule);\n }\n}\n","export enum ConflictWithOrderlinesDialogResult {\n DISMISS,\n ADJUST_ORDER_PLAN\n}\n","import {AfterViewInit, Component, ElementRef, Renderer2, ViewChild} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {max} from 'lodash-es';\nimport {Amount} from './amount';\n\n@Component({\n templateUrl: './conflicts-with-order-lines-amount.component.html',\n styleUrls: ['./conflicts-with-order-lines-amount.component.scss']\n})\nexport class ConflictsWithOrderLinesAmountComponent implements ICellRendererAngularComp, AfterViewInit {\n @ViewChild('requested') public requested: ElementRef;\n @ViewChild('currently') public currently: ElementRef;\n @ViewChild('planned') public planned: ElementRef;\n @ViewChild('tooMuch') public tooMuch: ElementRef;\n public amount: Amount;\n private renderer: Renderer2;\n\n public constructor(renderer: Renderer2) {\n this.renderer = renderer;\n }\n\n public ngAfterViewInit(): void {\n this.setLabelsWidth();\n }\n\n public agInit(params: ICellRendererParams): void {\n this.amount = {\n requested: params.value[0],\n inPlan: params.value[1],\n planned: params.value[2],\n tooMuch: params.value[3]\n };\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n private setLabelsWidth(): void {\n const labelWidths = [this.requested.nativeElement.clientWidth, this.currently.nativeElement.clientWidth, this.planned.nativeElement.clientWidth, this.tooMuch.nativeElement.clientWidth];\n const biggestLabelWidth = max(labelWidths);\n this.renderer.setStyle(this.requested.nativeElement, 'min-width', `${biggestLabelWidth}px`);\n this.renderer.setStyle(this.currently.nativeElement, 'min-width', `${biggestLabelWidth}px`);\n this.renderer.setStyle(this.planned.nativeElement, 'min-width', `${biggestLabelWidth}px`);\n this.renderer.setStyle(this.tooMuch.nativeElement, 'min-width', `${biggestLabelWidth}px`);\n }\n}\n","
\n
\n {{ amount.requested }}\n {{ 'ORDERBOOK.REQUESTED' | bmsTranslate }}\n
\n
\n {{ amount.inPlan }}\n {{ 'ORDERBOOK.CURRENTLY' | bmsTranslate }}\n
\n
\n {{ amount.planned }}\n {{ 'ORDERBOOK.PLANNED' | bmsTranslate }}\n
\n
\n {{ amount.tooMuch }}\n {{ 'ORDERBOOK.TOO_MUCH_MOBILE' | bmsTranslate }}\n
\n
\n","
\n \n \n
\n

{{ 'ORDERBOOK.CONFLICT_ORDERLINE_HINT' | bmsTranslate }}

\n \n
\n\n \n
\n","import {AfterViewInit, Component, EventEmitter, Inject, Input, OnInit, Optional, Output, ViewChild} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {ConflictedOrderLine} from '@presentation/pages/texfab/production-schedule/confirm/conflicted-order-line';\nimport {ConflictWithOrderlinesDialogResult} from '@presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflict-with-orderlines-dialog-result';\nimport {ColDefBuilderFactoryService, GridOptionsBuilderFactoryService, ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE, SelectGridDialog, TranslateService} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, ValueGetterParams} from 'ag-grid-community';\nimport {isNil} from 'lodash-es';\nimport {ConflictsWithOrderLinesAmountComponent} from './amount/conflicts-with-order-lines-amount.component';\n\n@Component({\n selector: 'app-conflicts-with-order-lines',\n templateUrl: './conflicts-with-order-lines.component.html',\n styleUrls: ['./conflicts-with-order-lines.component.scss']\n})\nexport class ConflictsWithOrderLinesComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('conflictsWithOrderLinesGrid') public conflictsWithOrderLinesGrid: AgGridAngular;\n @Input() public conflictedOrderLines: ConflictedOrderLine[];\n @Output() public closeConflicts: EventEmitter = new EventEmitter();\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n\n public constructor(\n @Inject(RESPONSIVENESS_VIEW_MODE) private responsivenessViewMode: ResponsivenessViewMode,\n @Optional() @Inject(MAT_DIALOG_DATA) public data: any,\n @Optional() private readonly dialogRef: MatDialogRef,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {\n if (!isNil(data)) {\n this.conflictedOrderLines = data.conflictedOrderLines;\n }\n }\n\n public get gridOptionsForConflictsWithOrderLines(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.initialiseGridOptionsForConflictsWithOrderLines();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.conflictsWithOrderLinesGrid?.api];\n }\n\n public cancel(): void {\n this.closeConflicts.emit(null);\n }\n\n public getChooseEventName(): string {\n const adjustOrderPlanTranslationKey = this.translate.instant('GENERAL.ACTIONS.ADJUST_OBJECT', {object: this.translate.instant('PRODUCTION_ORDER.WEAVE_PLAN.WEAVE_PLAN').toLowerCase()});\n return this.isMobile() ? 'GENERAL.ACTIONS.IGNORE' : adjustOrderPlanTranslationKey;\n }\n\n public chooseEvent(): void {\n this.isMobile() ? this.dismiss() : this.goToPlan();\n }\n\n public dismiss(): void {\n if (!this.isMobile()) {\n this.dialogRef.close(ConflictWithOrderlinesDialogResult.DISMISS);\n } else {\n this.closeConflicts.emit(ConflictWithOrderlinesDialogResult.DISMISS);\n }\n }\n\n public isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n\n private goToPlan(): void {\n if (!this.isMobile()) {\n this.dialogRef.close(ConflictWithOrderlinesDialogResult.ADJUST_ORDER_PLAN);\n } else {\n this.closeConflicts.emit(ConflictWithOrderlinesDialogResult.ADJUST_ORDER_PLAN);\n }\n }\n\n private initialiseGridOptionsForConflictsWithOrderLines(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForConflictsWithOrderLine(), GridIdentifier.ORDER_LINES_CONFLICTS)\n .withRowHeight(this.isMobile() ? 115 : 32)\n .withoutGetRowId()\n .withoutSorting()\n .withSuppressRowClickSelection()\n .build()\n ];\n }\n\n private getColumnDefsForConflictsWithOrderLine(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('ORDERBOOK.ORDERBOOK_REFERENCE')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getValueForOrderNumber(params.data), true)\n .build(),\n ...(this.isMobile()\n ? [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.AMOUNT')\n .withValueGetter((params: ValueGetterParams) => {\n return [params.data.requestedAmount, params.data.amountInSchedule, params.data.amountAlreadyPlanned, params.data.amountTooMuchPlanned];\n })\n .withCellRenderer(ConflictsWithOrderLinesAmountComponent)\n .withRightAlignment()\n .build()\n ]\n : [\n this.colDefBuilderFactoryService.getBuilder().withField('requestedAmount').withHeaderName('ORDERBOOK.REQUESTED').withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('amountInSchedule').withHeaderName('ORDERBOOK.CURRENTLY_IN_PLAN').withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('amountInSchedule').withHeaderName('ORDERBOOK.ALREADY_PLANNED').withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('amountTooMuchPlanned').withHeaderName('ORDERBOOK.TOO_MUCH').withRightAlignment().build()\n ])\n ];\n }\n\n private getValueForOrderNumber(params: ConflictedOrderLine): string {\n return `${params.salesOrderReference}, ${params.salesOrderLineReference}`;\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {FinishingForProductionSchedule} from '@domain/production-schedule/finishing-for-production-schedule';\nimport {ProductionSchedule} from '@domain/production-schedule/production-schedule';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Finishings, FINISHINGS} from '@infrastructure/http/finishing/finishings';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {ConfirmProductionScheduleDesktopComponent} from '@presentation/pages/texfab/production-schedule/confirm/confirm-desktop/confirm-production-schedule-desktop.component';\nimport {ConfirmProductionScheduleOnDesktopResult} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result';\nimport {ConflictedOrderLine} from '@presentation/pages/texfab/production-schedule/confirm/conflicted-order-line';\nimport {ConflictWithOrderlinesDialogResult} from '@presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflict-with-orderlines-dialog-result';\nimport {ConflictsWithOrderLinesComponent} from '@presentation/pages/texfab/production-schedule/confirm/conflicts-with-order-lines/conflicts-with-order-lines.component';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {BackendError, DialogBuilderFactoryService, UnhandledBackendError, Unit} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, isNil} from 'lodash-es';\nimport {EMPTY, Observable, Subject} from 'rxjs';\nimport {switchMap} from 'rxjs/operators';\nimport {ConfirmProductionScheduleOnDesktopInput} from './confirm-desktop/confirm-production-schedule-desktop-input.interface';\n\n@Injectable()\nexport class ConfirmProductionScheduleOnDesktopCommand {\n private confirmProductionScheduleOnDesktopSubject: Subject;\n\n public constructor(\n @Inject(FINISHINGS) private readonly finishings: Finishings,\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {}\n\n public execute(productionSchedule: ProductionSchedule, productionOrderCustomSettings: ProductionOrderCustomSettings): Observable {\n this.confirmProductionScheduleOnDesktopSubject = new Subject();\n\n if (isEqual(productionSchedule.status, ProductionScheduleStatus.TO_RECONFIRM)) {\n this.confirmProductionSchedule(productionSchedule, productionOrderCustomSettings);\n } else {\n this.checkPossibleConflictsWithOrderLines(productionSchedule, productionOrderCustomSettings);\n }\n\n return this.confirmProductionScheduleOnDesktopSubject.asObservable();\n }\n\n public getAndConfirmProductionSchedule(productionScheduleId: string | number, productionOrderCustomSettings: ProductionOrderCustomSettings): Observable {\n return this.productionSchedules.getById(productionScheduleId).pipe(\n switchMap((productionSchedule: ProductionSchedule) => {\n return !isNil(productionSchedule) ? this.execute(productionSchedule, productionOrderCustomSettings) : EMPTY;\n })\n );\n }\n\n private checkPossibleConflictsWithOrderLines(productionSchedule: ProductionSchedule, productionOrderCustomSettings: ProductionOrderCustomSettings): void {\n this.productionSchedules.checkPossibleConflictsWithOrderLines(productionSchedule.id as string).subscribe({\n next: (conflictedOrderLines: ConflictedOrderLine[]) => {\n if (isEmpty(conflictedOrderLines)) {\n this.confirmProductionSchedule(productionSchedule, productionOrderCustomSettings);\n } else {\n this.showConflictsDialog(productionSchedule, conflictedOrderLines, productionOrderCustomSettings);\n }\n },\n error: this.handleUnhandledBackendError()\n });\n }\n\n private confirmProductionSchedule(productionSchedule: ProductionSchedule, productionOrderCustomSettings: ProductionOrderCustomSettings): void {\n if (!isNil(productionSchedule.finishing)) {\n this.finishings.getOverviewListFinishingById(productionSchedule.finishing.id).subscribe({\n next: (overviewListFinishing: OverviewListFinishing) => {\n productionSchedule.updateFinishing(FinishingForProductionSchedule.fromOverviewListFinishing(overviewListFinishing));\n this.showConfirmDialog(productionSchedule, productionOrderCustomSettings);\n },\n error: this.handleUnhandledBackendError()\n });\n } else {\n this.showConfirmDialog(productionSchedule, productionOrderCustomSettings);\n }\n }\n\n private showConflictsDialog(productionSchedule: ProductionSchedule, conflictedOrderLines: ConflictedOrderLine[], productionOrderCustomSettings: ProductionOrderCustomSettings): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withCloseDisabled()\n .openSelectGridDialog(ConflictsWithOrderLinesComponent, {conflictedOrderLines})\n .subscribe((result: ConflictWithOrderlinesDialogResult) => {\n if (isNil(result)) {\n this.confirmProductionScheduleOnDesktopSubject.next(ConfirmProductionScheduleOnDesktopResult.CANCELLED);\n this.confirmProductionScheduleOnDesktopSubject.complete();\n } else {\n if (isEqual(result, ConflictWithOrderlinesDialogResult.DISMISS)) {\n this.confirmProductionSchedule(productionSchedule, productionOrderCustomSettings);\n } else if (isEqual(result, ConflictWithOrderlinesDialogResult.ADJUST_ORDER_PLAN)) {\n this.confirmProductionScheduleOnDesktopSubject.next(ConfirmProductionScheduleOnDesktopResult.PLAN_ADJUSTMENT_NEEDED);\n this.confirmProductionScheduleOnDesktopSubject.complete();\n }\n }\n });\n }\n\n private showConfirmDialog(productionSchedule: ProductionSchedule, productionOrderCustomSettings: ProductionOrderCustomSettings): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('confirm-production-schedule-dialog')\n .withCloseDisabled()\n .openDialog(ConfirmProductionScheduleDesktopComponent, {\n productionSchedule,\n commercialUnit: Unit.CENTIMETER,\n productionOrderCustomSettings\n } as ConfirmProductionScheduleOnDesktopInput)\n .subscribe((result: ProductionSchedule) => {\n if (isNil(result)) {\n this.confirmProductionScheduleOnDesktopSubject.next(ConfirmProductionScheduleOnDesktopResult.CANCELLED);\n } else {\n this.confirmProductionScheduleOnDesktopSubject.next(ConfirmProductionScheduleOnDesktopResult.CONFIRMED);\n }\n this.confirmProductionScheduleOnDesktopSubject.complete();\n });\n }\n\n private handleUnhandledBackendError(): (error: BackendError) => void {\n return (error: UnhandledBackendError): void => {\n this.confirmProductionScheduleOnDesktopSubject.error(error);\n this.confirmProductionScheduleOnDesktopSubject.complete();\n };\n }\n}\n","export enum ConfirmProductionScheduleOnDesktopResult {\n CONFIRMED,\n CANCELLED,\n PLAN_ADJUSTMENT_NEEDED\n}\n","
\n @for (action of actions; track action.name) {\n

\n {{ action.name | bmsTranslate }}\n

\n }\n
\n","import {Component} from '@angular/core';\nimport {ListOverviewAction} from '@presentation/pages/texfab/production-schedule/overview/list-overview-action';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './list-overview-action.component.html',\n styleUrls: ['./list-overview-action.component.scss']\n})\nexport class ListOverviewActionsComponent implements ICellRendererAngularComp {\n public actions: ListOverviewAction[];\n\n public agInit(params: ICellRendererParams): void {\n this.actions = params.value;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {ProductionOrders, PRODUCTION_ORDERS} from '@infrastructure/http/production-order/production-orders';\nimport {OverviewListProductionSchedule} from '@presentation/pages/texfab/production-schedule/overview/overview-list-production-schedule';\nimport {ReasonForFailureContext} from '@presentation/pages/texfab/production-schedule/overview/reason-for-failure-context';\nimport {DialogBuilderFactoryService, DialogType, TranslateService} from '@vdw/angular-component-library';\nimport {isEqual, isNil} from 'lodash-es';\n\n@Injectable()\nexport class ShowReasonForFailureDialogCommand {\n public constructor(\n @Inject(PRODUCTION_ORDERS) private readonly productionOrders: ProductionOrders,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public execute(productionSchedule: OverviewListProductionSchedule): void {\n this.productionOrders.getReasonForFailure(Number(productionSchedule.id)).subscribe((reasonForFailureContext: ReasonForFailureContext) => {\n let messageText: string;\n let extraInformationText: string;\n\n if (isEqual(reasonForFailureContext.errorCode, 'PROCESSING_ERROR')) {\n messageText = this.translate.instant(`PRODUCTION_ORDER.ERRORS.PROCESSING_ERROR.${reasonForFailureContext.reasonForFailure}`, {\n entityName: reasonForFailureContext.entityName\n });\n } else {\n messageText = `PRODUCTION_ORDER.ERRORS.${reasonForFailureContext.errorCode}`;\n }\n\n if (!isNil(reasonForFailureContext.errorText)) {\n extraInformationText = reasonForFailureContext.errorText;\n }\n\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: 'GENERAL.ERRORS.ERROR_DETAILS',\n messageText,\n extraMessageText: extraInformationText,\n type: DialogType.ERROR\n });\n });\n }\n}\n","import {ProductionScheduleGlobalStatus} from './production-schedule-global-status.enum';\nimport {ProductionScheduleStatusColorDescription} from './production-schedule-status-color-description.enum';\nimport {ProductionScheduleStatusColor} from './production-schedule-status-color.enum';\nimport {ProductionScheduleStatus} from './production-schedule-status.enum';\n\nexport class ProductionScheduleState {\n private _globalStatus: ProductionScheduleGlobalStatus;\n private _statusColor: ProductionScheduleStatusColor;\n private _statusColorDescription: ProductionScheduleStatusColorDescription;\n private _subStatus: ProductionScheduleStatus;\n\n public constructor(\n globalStatus: ProductionScheduleGlobalStatus,\n statusColor: ProductionScheduleStatusColor,\n statusColorDescription: ProductionScheduleStatusColorDescription,\n subStatus: ProductionScheduleStatus\n ) {\n this._globalStatus = globalStatus;\n this._statusColor = statusColor;\n this._statusColorDescription = statusColorDescription;\n this._subStatus = subStatus;\n }\n\n public get globalStatus(): ProductionScheduleGlobalStatus {\n return this._globalStatus;\n }\n\n public get statusColor(): ProductionScheduleStatusColor {\n return this._statusColor;\n }\n\n public get statusColorDescription(): ProductionScheduleStatusColorDescription {\n return this._statusColorDescription;\n }\n\n public get subStatus(): ProductionScheduleStatus {\n return this._subStatus;\n }\n\n public static fromJSON(productionScheduleStateJSON: any): ProductionScheduleState {\n return new ProductionScheduleState(\n productionScheduleStateJSON.globalStatus,\n productionScheduleStateJSON.statusColor,\n productionScheduleStateJSON.statusColorDescription,\n productionScheduleStateJSON.subStatus\n );\n }\n}\n","export class MachineQualityForOverviewListProductionSchedule {\n private _id: number;\n private _technicalName: string;\n private _reedDensity: number;\n private _pickDensity: number;\n private _weftDensity: number;\n\n public constructor(id: number, technicalName: string, reedDensity: number, pickDensity: number, weftDensity: number) {\n this._id = id;\n this._technicalName = technicalName;\n this._reedDensity = reedDensity;\n this._pickDensity = pickDensity;\n this._weftDensity = weftDensity;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get technicalName(): string {\n return this._technicalName;\n }\n\n public get reedDensity(): number {\n return this._reedDensity;\n }\n\n public get pickDensity(): number {\n return this._pickDensity;\n }\n\n public get weftDensity(): number {\n return this._weftDensity;\n }\n\n public static fromJSON(machineQualityForOverviewListProductionScheduleJSON: any): MachineQualityForOverviewListProductionSchedule {\n return new MachineQualityForOverviewListProductionSchedule(\n machineQualityForOverviewListProductionScheduleJSON.id,\n machineQualityForOverviewListProductionScheduleJSON.technicalName,\n machineQualityForOverviewListProductionScheduleJSON.reedDensity,\n machineQualityForOverviewListProductionScheduleJSON.pickDensity,\n machineQualityForOverviewListProductionScheduleJSON.weftDensity\n );\n }\n}\n","export class MachineForOverviewListProductionSchedule {\n private _id: number;\n private _name: string;\n private _remoteMachine: boolean;\n\n public constructor(id: number, name: string, remoteMachine: boolean) {\n this._id = id;\n this._name = name;\n this._remoteMachine = remoteMachine;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get remoteMachine(): boolean {\n return this._remoteMachine;\n }\n\n public static fromJSON(machineForOverviewListProductionScheduleJSON: any): MachineForOverviewListProductionSchedule {\n return new MachineForOverviewListProductionSchedule(\n machineForOverviewListProductionScheduleJSON.id,\n machineForOverviewListProductionScheduleJSON.name,\n machineForOverviewListProductionScheduleJSON.remoteMachine\n );\n }\n}\n","import {IdName} from '@domain/id-name';\nimport {ProductionOrderYield} from '@domain/planning/production-order-yield';\nimport {ProductionScheduleState} from '@domain/production-schedule/production-schedule-state';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {MachineQualityForOverviewListProductionSchedule} from '@presentation/pages/texfab/production-schedule/overview/machine-quality-for-overview-list-production-schedule';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {StringUtils} from '@vdw/angular-component-library';\nimport {includes, map} from 'lodash-es';\nimport {MachineForOverviewListProductionSchedule} from './machine-for-overview-list-production-schedule';\n\nexport class OverviewListProductionSchedule {\n private _id: string | number;\n private _name: string;\n private _status: ProductionScheduleStatus;\n private _state: ProductionScheduleState;\n private _machine: MachineForOverviewListProductionSchedule;\n private _machineQuality: MachineQualityForOverviewListProductionSchedule;\n private _coloredYarnSets: OverviewListColoredYarnSetWithStartDent[];\n private _dateCreated: Date;\n private _dueDate: Date;\n private _yield: ProductionOrderYield;\n private _mappingForCurrentPositionOnMachine: CreelMap[];\n private _pathWidthsInMM: number;\n private _pathWidthsInDents: number;\n private _weftDensity: number;\n private _lengthInMM: number;\n private _lengthInPicks: number;\n private _buggy1: string;\n private _buggy2: string;\n private _numberOfPaths: number;\n private _creel: IdName;\n private _dateModified: Date;\n private _comment: string;\n private _missingDesigns: boolean;\n private _colorSets: OverviewListColorSet[];\n private _isSample: boolean;\n private _practicalPickDensityInPicksPerMM: number;\n private _widthInMM: number;\n private _widthInDents: number;\n private _wovenStartDate: Date;\n private _wovenEndDate: Date;\n\n private readonly statusesRequiredToRemoveMachineFiles: ProductionScheduleStatus[] = [\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL\n ];\n\n public constructor(\n id: string | number,\n name: string,\n status: ProductionScheduleStatus,\n state: ProductionScheduleState,\n machine: MachineForOverviewListProductionSchedule,\n machineQuality: MachineQualityForOverviewListProductionSchedule,\n coloredYarnSets: OverviewListColoredYarnSetWithStartDent[],\n dateCreated: Date,\n dueDate: Date,\n yieldOfProductionSchedule: ProductionOrderYield,\n mappingForCurrentPositionOnMachine: CreelMap[],\n pathWidthsInMM: number,\n pathWidthsInDents: number,\n weftDensity: number,\n lengthInMM: number,\n lengthInPicks: number,\n buggy1: string,\n buggy2: string,\n numberOfPaths: number,\n creel: IdName,\n dateModified: Date,\n comment: string,\n missingDesigns: boolean,\n colorSets: OverviewListColorSet[],\n isSample: boolean,\n practicalPickDensityInPicksPerMM: number,\n widthInMM: number,\n widthInDents: number,\n wovenStartDate: Date,\n wovenEndDate: Date\n ) {\n this._id = id;\n this._name = name;\n this._status = status;\n this._state = state;\n this._machine = machine;\n this._machineQuality = machineQuality;\n this._coloredYarnSets = coloredYarnSets;\n this._dateCreated = dateCreated;\n this._dueDate = dueDate;\n this._yield = yieldOfProductionSchedule;\n this._mappingForCurrentPositionOnMachine = mappingForCurrentPositionOnMachine;\n this._pathWidthsInMM = pathWidthsInMM;\n this._pathWidthsInDents = pathWidthsInDents;\n this._weftDensity = weftDensity;\n this._lengthInMM = lengthInMM;\n this._lengthInPicks = lengthInPicks;\n this._buggy1 = buggy1;\n this._buggy2 = buggy2;\n this._numberOfPaths = numberOfPaths;\n this._creel = creel;\n this._dateModified = dateModified;\n this._comment = comment;\n this._missingDesigns = missingDesigns;\n this._colorSets = colorSets;\n this._isSample = isSample;\n this._practicalPickDensityInPicksPerMM = practicalPickDensityInPicksPerMM;\n this._widthInMM = widthInMM;\n this._widthInDents = widthInDents;\n this._wovenStartDate = wovenStartDate;\n this._wovenEndDate = wovenEndDate;\n }\n\n public get id(): string | number {\n return this._id;\n }\n\n public set id(value: string | number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get status(): ProductionScheduleStatus {\n return this._status;\n }\n\n public set status(value: ProductionScheduleStatus) {\n this._status = value;\n }\n\n public get state(): ProductionScheduleState {\n return this._state;\n }\n\n public set state(value: ProductionScheduleState) {\n this._state = value;\n }\n\n public get machine(): MachineForOverviewListProductionSchedule {\n return this._machine;\n }\n\n public get machineQuality(): MachineQualityForOverviewListProductionSchedule {\n return this._machineQuality;\n }\n\n public get coloredYarnSets(): OverviewListColoredYarnSetWithStartDent[] {\n return this._coloredYarnSets;\n }\n\n public get dateCreated(): Date {\n return this._dateCreated;\n }\n\n public get dueDate(): Date {\n return this._dueDate;\n }\n\n public get yield(): ProductionOrderYield {\n return this._yield;\n }\n\n public get mappingForCurrentPositionOnMachine(): CreelMap[] {\n return this._mappingForCurrentPositionOnMachine;\n }\n\n public get pathWidthsInMM(): number {\n return this._pathWidthsInMM;\n }\n\n public get pathWidthsInDents(): number {\n return this._pathWidthsInDents;\n }\n\n public get weftDensity(): number {\n return this._weftDensity;\n }\n\n public get lengthInMM(): number {\n return this._lengthInMM;\n }\n\n public get lengthInPicks(): number {\n return this._lengthInPicks;\n }\n\n public get buggy1(): string {\n return this._buggy1;\n }\n\n public get buggy2(): string {\n return this._buggy2;\n }\n\n public get numberOfPaths(): number {\n return this._numberOfPaths;\n }\n\n public get creel(): IdName {\n return this._creel;\n }\n\n public get dateModified(): Date {\n return this._dateModified;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public get missingDesigns(): boolean {\n return this._missingDesigns;\n }\n\n public get colorSets(): OverviewListColorSet[] {\n return this._colorSets;\n }\n\n public get isSample(): boolean {\n return this._isSample;\n }\n\n public get practicalPickDensityInPicksPerMM(): number {\n return this._practicalPickDensityInPicksPerMM;\n }\n\n public get widthInMM(): number {\n return this._widthInMM;\n }\n\n public get widthInDents(): number {\n return this._widthInDents;\n }\n\n public get wovenStartDate(): Date {\n return this._wovenStartDate;\n }\n\n public set wovenStartDate(value: Date) {\n this._wovenStartDate = value;\n }\n\n public get wovenEndDate(): Date {\n return this._wovenEndDate;\n }\n\n public set wovenEndDate(value: Date) {\n this._wovenEndDate = value;\n }\n\n public static fromJSON(overviewListProductionScheduleJSON: any): OverviewListProductionSchedule {\n return new OverviewListProductionSchedule(\n overviewListProductionScheduleJSON.id,\n overviewListProductionScheduleJSON.name,\n overviewListProductionScheduleJSON.status,\n overviewListProductionScheduleJSON.state ? ProductionScheduleState.fromJSON(overviewListProductionScheduleJSON.state) : null,\n MachineForOverviewListProductionSchedule.fromJSON(overviewListProductionScheduleJSON.machine),\n MachineQualityForOverviewListProductionSchedule.fromJSON(overviewListProductionScheduleJSON.machineQuality),\n map(overviewListProductionScheduleJSON.coloredYarnSets, (coloredYarnSetJSON: any) => {\n return OverviewListColoredYarnSetWithStartDent.fromJSON(coloredYarnSetJSON);\n }),\n StringUtils.toDate(overviewListProductionScheduleJSON.dateCreated),\n StringUtils.toDate(overviewListProductionScheduleJSON.dueDate),\n overviewListProductionScheduleJSON.yield,\n overviewListProductionScheduleJSON.mappingForCurrentPositionOnMachine,\n overviewListProductionScheduleJSON.pathWidthsInMM,\n overviewListProductionScheduleJSON.pathWidthsInDents,\n overviewListProductionScheduleJSON.machineQuality.weftDensity,\n overviewListProductionScheduleJSON.lengthInMM,\n overviewListProductionScheduleJSON.lengthInPicks,\n overviewListProductionScheduleJSON.buggy1,\n overviewListProductionScheduleJSON.buggy2,\n overviewListProductionScheduleJSON.numberOfPaths,\n IdName.fromJSON(overviewListProductionScheduleJSON.creel),\n StringUtils.toDate(overviewListProductionScheduleJSON.dateModified),\n overviewListProductionScheduleJSON.comment,\n overviewListProductionScheduleJSON.missingDesigns,\n overviewListProductionScheduleJSON.colorSets.map((colorSetJSON: any) => OverviewListColorSet.fromJSON(colorSetJSON)),\n overviewListProductionScheduleJSON.isSample,\n overviewListProductionScheduleJSON.practicalPickDensityInPicksPerMM,\n overviewListProductionScheduleJSON.widthInMM,\n overviewListProductionScheduleJSON.widthInDents,\n StringUtils.toDate(overviewListProductionScheduleJSON.wovenStartDate),\n StringUtils.toDate(overviewListProductionScheduleJSON.wovenEndDate)\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return this.canDuplicate() ? '' : 'PRODUCTION_ORDER.WARNINGS.PREVENT_DUPLICATE';\n }\n\n public canPrintWeavingOrder(): boolean {\n return this.isStatusAtleastProcessed() || this.hasToBeReconfirmed();\n }\n\n public canDownloadEpFiles(): boolean {\n return this.isStatusAtleastProcessed() || this.hasFailed();\n }\n\n public canRemoveMachineFiles(): boolean {\n return includes(this.statusesRequiredToRemoveMachineFiles, this.status);\n }\n\n public canBeConfirmed(): boolean {\n return this.status === ProductionScheduleStatus.VERIFIED || this.status === ProductionScheduleStatus.VERIFIED_WITH_WARNINGS || this.status === ProductionScheduleStatus.CREATED;\n }\n\n public hasFailed(): boolean {\n return this.status === ProductionScheduleStatus.FAILURE;\n }\n\n public canBeCompleted(): boolean {\n return this.status === ProductionScheduleStatus.TRANSLATED && this._machine.remoteMachine;\n }\n\n public hasToBeReconfirmed(): boolean {\n return this.status === ProductionScheduleStatus.TO_RECONFIRM;\n }\n\n private isStatusAtleastProcessed(): boolean {\n const productionScheduleStatuses: ProductionScheduleStatus[] = [\n ProductionScheduleStatus.PROCESSED,\n ProductionScheduleStatus.FINALIZING,\n ProductionScheduleStatus.FINALIZED,\n ProductionScheduleStatus.TRANSLATING,\n ProductionScheduleStatus.TRANSLATED,\n ProductionScheduleStatus.SENDING,\n ProductionScheduleStatus.ARRIVED,\n ProductionScheduleStatus.EXECUTING,\n ProductionScheduleStatus.EXECUTED,\n ProductionScheduleStatus.EXECUTED_COMPLETE,\n ProductionScheduleStatus.EXECUTED_PARTIAL,\n ProductionScheduleStatus.CANCELLED,\n ProductionScheduleStatus.QUEUING,\n ProductionScheduleStatus.QUEUED\n ];\n\n return includes(productionScheduleStatuses, this.status);\n }\n}\n","export class FilterModelsUtils {\n public static setFilterModelsForColumnId(combinedValues: {[key: string]: string}, filterModel: {[key: string]: any}, key: string): void {\n const setFilterModelIndex = filterModel[key]?.filterModels?.findIndex((model: any) => model?.filterType === 'set');\n if (setFilterModelIndex !== -1) {\n const setFilterModel = filterModel[key].filterModels[setFilterModelIndex];\n const setFilterValues = setFilterModel.values;\n\n const mappedValues = setFilterValues\n .map((value: string) => {\n const entry = Object.entries(combinedValues).find(([_, translatedValue]: [string, string]) => translatedValue === value);\n return entry ? entry[0] : undefined;\n })\n .filter((mappedValue: string | undefined) => mappedValue !== undefined);\n\n setFilterModel.values = mappedValues as string[];\n }\n\n const textFilterModelIndex = filterModel[key]?.filterModels?.findIndex((model: any) => model?.filterType === 'text');\n if (textFilterModelIndex !== -1) {\n const textFilterModel = filterModel[key].filterModels[textFilterModelIndex];\n const searchText = textFilterModel.filter.toLowerCase();\n\n const matchingKeys = Object.entries(combinedValues)\n .filter(([_, translatedValue]: [string, string]) => translatedValue.toLowerCase().includes(searchText))\n .map(([originalKey, _]: [string, string]) => originalKey);\n\n if (matchingKeys.length > 0) {\n this.setFilterModelValues(filterModel, key, matchingKeys);\n } else {\n filterModel[key] = {\n filterType: 'set',\n values: ['']\n };\n }\n\n if (filterModel[key]?.filterModels) {\n filterModel[key].filterModels.splice(textFilterModelIndex, 1);\n }\n }\n }\n\n private static setFilterModelValues(filterModel: {[key: string]: any}, key: string, values: string[]): void {\n if (!filterModel[key]) {\n filterModel[key] = {\n filterType: 'set',\n values: values\n };\n } else {\n if (filterModel[key].filterModels) {\n const setFilterModel = filterModel[key].filterModels.find((model: any) => model?.filterType === 'set');\n if (setFilterModel) {\n setFilterModel.values = [...new Set([...setFilterModel.values, ...values])];\n } else {\n filterModel[key].filterModels.push({\n filterType: 'set',\n values: values\n });\n }\n } else {\n filterModel[key].filterModels = [\n {\n filterType: 'set',\n values: values\n }\n ];\n }\n }\n }\n}\n","\n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, Inject, OnInit, Renderer2, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {PrintDocument} from '@application/command/print-document';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {FilterModelsUtils} from '@application/helper/filter-models-utils';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {MACHINE_QUALITIES, MachineQualities} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {PRODUCTION_ORDERS, ProductionOrders} from '@infrastructure/http/production-order/production-orders';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {ProductionOrderCreated} from '@infrastructure/signalr/production-order/production-order-created';\nimport {ProductionOrderStatusChange} from '@infrastructure/signalr/production-order/production-order-status-change';\nimport {REALTIME_PRODUCTION_ORDER, RealtimeProductionOrder} from '@infrastructure/signalr/production-order/realtime-production-order';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {getRowHeightForCreelPreview} from '@presentation/components/select-creel/get-row-height-for-creel-preview/get-row-height-for-creel-preview';\nimport {ConfirmProductionScheduleOnDesktopCommand} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-command';\nimport {ConfirmProductionScheduleOnDesktopResult} from '@presentation/pages/texfab/production-schedule/confirm/confirm-production-schedule-on-desktop-result';\nimport {ShowReasonForFailureDialogCommand} from '@presentation/pages/texfab/production-schedule/overview/actions/show-reason-for-failure-dialog-command';\nimport {OverviewListProductionSchedule} from '@presentation/pages/texfab/production-schedule/overview/overview-list-production-schedule';\nimport {TextileDataOverviewComponent} from '@presentation/pages/textile-data/textile-data-overview/textile-data-overview.component';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AlertDialogResult,\n BackendError,\n BaseComponent,\n convertUnit,\n DialogBuilder,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n GridModel,\n ToastService,\n TranslateService,\n UnavailableArchiveError,\n UnhandledBackendError,\n Unit\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {CellClickedEvent, ColDef, GridOptions, IMultiFilterModel, IServerSideDatasource, IServerSideGetRowsParams, RowNode, SortModelItem} from 'ag-grid-community';\nimport {cloneDeep, every, filter, find, first, isEqual, isNil, lowerCase, map, replace, size} from 'lodash-es';\nimport {forkJoin, Observable} from 'rxjs';\nimport {debounceTime, finalize, takeUntil} from 'rxjs/operators';\nimport {ColumnUnitsMap} from './column-units-map';\nimport {ProductionScheduleOverviewService} from './production-schedule-overview.service';\n\n@Component({\n templateUrl: './production-schedule-overview-page.component.html',\n styleUrls: ['./production-schedule-overview-page.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ProductionScheduleOverviewPageComponent extends BaseComponent implements OnInit {\n @ViewChild('downloadAnchor') public downloadAnchor: ElementRef;\n @ViewChild('textileDataOverview') public textileDataOverview: TextileDataOverviewComponent;\n @ViewChild('exportProductionSchedulesGrid') public exportProductionSchedulesGrid: AgGridAngular;\n\n public productionOrdersCustomSettings: ProductionOrderCustomSettings;\n public advancedSearchFilters: PropertyValue[] = [];\n public loadingForTheFirstTime = true;\n public weftDensityUnit = Unit.WEFTS_PER_METER;\n public pickDensityUnit = Unit.PICKS_PER_METER;\n public reedDensityUnit = Unit.DENTS_PER_METER;\n public isActionsMenuOpen = false;\n public dataSource: IServerSideDatasource;\n public exportGridOptions: GridOptions = {};\n public exportData: OverviewListProductionSchedule[] = [];\n public isExporting = false;\n\n public readonly permissionToDownloadEpFiles = Permission.TEXFAB_VIEW;\n public readonly quantityOfRowsToRequestPerSlice = 10;\n public readonly GRID_IDENTIFIER = GridIdentifier.PRODUCTION_SCHEDULE_OVERVIEW;\n\n private listOfMachineQualitiesCustomSettings: PropertyValue[];\n private pageUrls: PageUrls;\n private isConfirmingProductionSchedule = false;\n private isPrintingProductionSchedule = false;\n private sort: {sort: string; colId: string};\n private selectedProductionSchedules: OverviewListProductionSchedule[] = [];\n private currentSubscription: Subscription;\n private dialogBuilder: DialogBuilder;\n\n private readonly printWeaveOrderPermission: Permission = Permission.PRINT_WEAVE_ORDER;\n private readonly machineFileTranslation = 'MACHINE.DETAILS.IMAGE_LIST.MACHINE_FILE';\n private readonly STATUS_COL_ID = 'status';\n private readonly MACHINE_COL_ID = 'machineName';\n private COLUMN_UNITS_MAP: ColumnUnitsMap;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(MACHINE_QUALITIES) private readonly machineQualities: MachineQualities,\n @Inject(PRODUCTION_SCHEDULES) public readonly productionSchedules: ProductionSchedules,\n @Inject(PRODUCTION_ORDERS) private readonly productionOrders: ProductionOrders,\n @Inject(REALTIME_PRODUCTION_ORDER) private readonly realtimeProductionOrder: RealtimeProductionOrder,\n private readonly httpProductionOrderCustomSettings: HttpProductionOrdersCustomSettingsService,\n private readonly toastService: ToastService,\n private readonly router: Router,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly printDocument: PrintDocument,\n private readonly renderer: Renderer2,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly showReasonForFailureDialogCommand: ShowReasonForFailureDialogCommand,\n private readonly confirmProductionScheduleOnDesktopCommand: ConfirmProductionScheduleOnDesktopCommand,\n private readonly overviewService: ProductionScheduleOverviewService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.COLUMN_UNITS_MAP = this.overviewService.getDefaultColumnUnitsMap();\n\n this.initialiseAdvancedSearchFilters();\n this.pageUrls = LastModifiedCardUtils.getPageUrls('productionSchedule');\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n if (this.hasPermissionToNavigateToNewBuilder()) {\n this.pageUrls.add = this.pageUrls.add + '/new';\n this.pageUrls.manageAdd = this.pageUrls.manageAdd + '/new';\n this.pageUrls.duplicate = this.pageUrls.duplicate + '/new';\n this.pageUrls.edit = this.pageUrls.edit + '/new';\n }\n\n this.getServerSideDataSource();\n }\n\n public getTextileDataType(): TextileDataType {\n if (this.hasPermissionToNavigateToNewBuilder()) {\n return TextileDataType.PRODUCTION_SCHEDULE_NEW;\n }\n\n return TextileDataType.PRODUCTION_SCHEDULE;\n }\n\n public getColumnDefsForListOfProductionSchedules(): ColDef[] {\n return this.overviewService.getColumnDefs(\n this.pageUrls?.edit,\n (columnIdentifier: string) => this.getPossibleColumnsValues(columnIdentifier),\n () => this.COLUMN_UNITS_MAP\n );\n }\n\n public getRowHeight(params: {data: OverviewListProductionSchedule}): number {\n let rowHeight = 32;\n const productionSchedule: OverviewListProductionSchedule = params.data;\n\n if (!!productionSchedule) {\n const heightForCreelPreviews = getRowHeightForCreelPreview(productionSchedule.coloredYarnSets);\n\n rowHeight = Math.max(rowHeight, heightForCreelPreviews);\n }\n\n return rowHeight;\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(this.pageUrls.settings);\n }\n\n public canDownloadEpFilesForSelectedProductionSchedule(): boolean {\n return this.isSingleProductionScheduleSelected() && this.getSelectedProductionSchedule().canDownloadEpFiles();\n }\n\n public downloadEpFilesForSelectedProductionSchedule(): void {\n if (this.canDownloadEpFilesForSelectedProductionSchedule()) {\n const selectedProductionSchedule = this.getSelectedProductionSchedule();\n\n this.productionOrders\n .downloadEpFiles(`${selectedProductionSchedule.id}`)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (file: ArrayBuffer) => {\n const blob = new Blob([file]);\n\n this.renderer.setAttribute(this.downloadAnchor.nativeElement, 'href', URL.createObjectURL(blob));\n this.renderer.setAttribute(this.downloadAnchor.nativeElement, 'download', `${selectedProductionSchedule.name}.zip`);\n\n this.downloadAnchor.nativeElement.click();\n },\n error: (error: UnhandledBackendError) => {\n if (error instanceof UnavailableArchiveError) {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: 'PRODUCTION_ORDER.OVERVIEW.DOWNLOAD_EPS',\n messageText: 'PRODUCTION_ORDER.WARNINGS.NOT_YET_ARCHIVED',\n type: DialogType.INFORMATION\n });\n } else {\n throw error;\n }\n }\n });\n }\n }\n\n public canRemoveMachineFilesForSelectedProductionSchedule(): boolean {\n return this.isSingleProductionScheduleSelected() && this.getSelectedProductionSchedule().canRemoveMachineFiles();\n }\n\n public removeMachineFilesForSelectedProductionSchedule(): void {\n if (this.canRemoveMachineFilesForSelectedProductionSchedule()) {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: lowerCase(this.translate.instant(this.machineFileTranslation, {count: 2}))}),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((result: AlertDialogResult) => {\n if (isEqual(result, AlertDialogResult.CONFIRM)) {\n this.deleteSelectedProductionScheduleMachineFiles(this.getSelectedProductionSchedule());\n }\n });\n }\n }\n\n public reloadProductionSchedules(advancedSearchFilters: PropertyValue[]): void {\n this.advancedSearchFilters = advancedSearchFilters;\n this.textileDataOverview.hideOverlay();\n this.textileDataOverview.ensureIndexIsVisible(0);\n this.refreshServerSide(true);\n }\n\n public openActionsMenu(): void {\n this.isActionsMenuOpen = true;\n }\n\n public closeActionsMenu(): void {\n this.isActionsMenuOpen = false;\n }\n\n public canConfirmSelectedProductionSchedule(): boolean {\n return this.isSingleProductionScheduleSelected() && this.getSelectedProductionSchedule().canBeConfirmed();\n }\n\n public confirmSelectedProductionSchedule(): void {\n if (!this.isConfirmingProductionSchedule && this.canConfirmSelectedProductionSchedule()) {\n this.isConfirmingProductionSchedule = true;\n const productionScheduleId = this.getSelectedProductionSchedule().id;\n\n this.confirmProductionScheduleOnDesktopCommand\n .getAndConfirmProductionSchedule(productionScheduleId, this.productionOrdersCustomSettings)\n .pipe(\n finalize(() => (this.isConfirmingProductionSchedule = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((confirmProductionScheduleOnDesktopResult: ConfirmProductionScheduleOnDesktopResult) => {\n if (isEqual(confirmProductionScheduleOnDesktopResult, ConfirmProductionScheduleOnDesktopResult.CONFIRMED)) {\n this.updateProductionOrderStatus(productionScheduleId, ProductionScheduleStatus.COMPLETED);\n } else if (isEqual(confirmProductionScheduleOnDesktopResult, ConfirmProductionScheduleOnDesktopResult.PLAN_ADJUSTMENT_NEEDED)) {\n this.router.navigate([replace(this.pageUrls.edit, '/:id', ''), productionScheduleId]);\n }\n });\n }\n }\n\n public canPrintSelectedProductionScheduleWeavingOrder(): boolean {\n return this.isSingleProductionScheduleSelected() && this.getSelectedProductionSchedule().canPrintWeavingOrder() && this.hasPrintWeaveOrderPermission();\n }\n\n public printWeavingOrderForSelectedProductionSchedule(): void {\n if (!this.isPrintingProductionSchedule && this.canPrintSelectedProductionScheduleWeavingOrder()) {\n const selectedProductionSchedule = this.getSelectedProductionSchedule();\n this.isPrintingProductionSchedule = true;\n forkJoin([\n this.productionOrders.getWeavingOrderXMLForProductionOrder(Number(selectedProductionSchedule.id)),\n this.productionOrders.getWeavingOrderXSLTForProductionOrder(Number(selectedProductionSchedule.id))\n ])\n .pipe(\n finalize(() => (this.isPrintingProductionSchedule = false)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((result: [string, string]) => {\n this.printDocument.execute(result);\n });\n }\n }\n\n public canShowFailureReasonForSelectedProductionSchedule(): boolean {\n return this.isSingleProductionScheduleSelected() && this.getSelectedProductionSchedule().hasFailed();\n }\n\n public showFailureReasonForSelectedProductionSchedule(): void {\n if (this.canShowFailureReasonForSelectedProductionSchedule()) {\n this.showReasonForFailureDialogCommand.execute(this.getSelectedProductionSchedule());\n }\n }\n\n public hasSelectedProductionSchedule(): boolean {\n return !isNil(this.getSelectedProductionSchedule());\n }\n\n public hasPrintWeaveOrderPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.printWeaveOrderPermission);\n }\n\n public productionSchedulesSelected(selectedProductionSchedules: OverviewListProductionSchedule[]): void {\n this.selectedProductionSchedules = selectedProductionSchedules;\n }\n\n public canCompleteProductionSchedules(): boolean {\n return every(this.selectedProductionSchedules, (selectedProductionSchedule: OverviewListProductionSchedule) => selectedProductionSchedule.canBeCompleted());\n }\n\n public canCompletePartiallyProductionSchedules(): boolean {\n return isEqual(size(this.selectedProductionSchedules), 1) && first(this.selectedProductionSchedules).canBeCompleted();\n }\n\n public completeProductionSchedules(): void {\n if (this.canCompleteProductionSchedules()) {\n const requests = map(this.selectedProductionSchedules, (selectedProductionSchedule: OverviewListProductionSchedule) =>\n this.productionOrders.completeProductionOrder(Number(selectedProductionSchedule.id), ProductionScheduleStatus.EXECUTED_COMPLETE)\n );\n\n forkJoin(requests).pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe();\n }\n }\n\n public completePartiallyProductionSchedules(): void {\n if (this.canCompletePartiallyProductionSchedules()) {\n this.editProductionSchedule(first(this.selectedProductionSchedules), true);\n }\n }\n\n public exportAllData(filterModel: IMultiFilterModel): void {\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n this.dialogBuilder.openAlertDialog({\n titleText: 'AGGRID.EXPORT',\n messageText: 'AGGRID.EXPORTMESSAGE',\n type: DialogType.INFORMATION\n });\n\n this.isExporting = true;\n this.exportProductionSchedulesGrid.api.setGridOption('columnDefs', this.getColumnDefsForListOfProductionSchedules());\n const sortModel: SortModelItem[] = [];\n let startRow: number = 0;\n let endRow: number = 30;\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n\n this.fetchExportData(gridModel);\n }\n\n private fetchExportData(gridModel: GridModel): void {\n this.productionOrders\n .getSlice(gridModel)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfProductionSchedules: OverviewListProductionSchedule[]) => {\n listOfProductionSchedules.forEach((productionSchedule: OverviewListProductionSchedule) => {\n this.exportData.push(productionSchedule);\n });\n\n if (listOfProductionSchedules.length < 29) {\n this.exportProductionSchedulesGrid.api.setGridOption('rowData', this?.exportData);\n this.exportGridOptions.cacheBlockSize = this?.exportData.length;\n this.exportProductionSchedulesGrid.api.exportDataAsCsv({\n processCellCallback: (params: any) => {\n if (params.column.colId === this.MACHINE_COL_ID) {\n return params.value.name;\n } else {\n return params.value;\n }\n },\n columnKeys: [\n 'status',\n 'name',\n 'machineName',\n 'technicalName',\n 'pickDensity',\n 'reedDensity',\n 'pathWidthsInMM',\n 'pathWidthsInDents',\n 'lengthInMM',\n 'lengthInPicks',\n 'weftDensity',\n 'dateCreated',\n 'dueDate'\n ]\n });\n this.exportData = [];\n this.isExporting = false;\n this.dialogBuilder.close();\n } else {\n gridModel.startRow += 30;\n gridModel.endRow += 30;\n this.fetchExportData(gridModel);\n }\n });\n }\n\n private hasPermissionToNavigateToNewBuilder(): boolean {\n return this.currentSubscription?.hasPermission(Permission.TEXFAB_NEW_BUILDER);\n }\n\n private getServerSideDataSource(): void {\n this.dataSource = {\n getRows: (params: IServerSideGetRowsParams): void => {\n this.textileDataOverview.hideOverlay();\n const sources: (Observable | Observable)[] = [];\n const sortModel: SortModelItem[] = params.request.sortModel;\n const startRow: number = params.request.startRow;\n const endRow: number = params.request.endRow;\n const filterModel = this.convertFilterModel(cloneDeep(params.request.filterModel));\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n\n if (!this.haveCustomSettingsBeenLoaded()) {\n sources.push(...[this.machineQualities.getListOfCustomSettings(), this.httpProductionOrderCustomSettings.get()]);\n }\n\n forkJoin([this.productionOrders.getSlice(gridModel), ...sources])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: ([listOfProductionSchedules, listOfMachineQualitiesCustomSettings, productionOrderCustomSettings]: [\n OverviewListProductionSchedule[],\n PropertyValue[],\n ProductionOrderCustomSettings\n ]) => {\n if (!this.haveCustomSettingsBeenLoaded()) {\n this.listOfMachineQualitiesCustomSettings = listOfMachineQualitiesCustomSettings;\n this.productionOrdersCustomSettings = productionOrderCustomSettings;\n\n this.weftDensityUnit = Unit[this.getDefaultParameterForPropertyName('weftDensityUnit').propertyValue as string];\n this.pickDensityUnit = Unit[this.getDefaultParameterForPropertyName('pickDensityUnit').propertyValue as string];\n this.reedDensityUnit = Unit[this.getDefaultParameterForPropertyName('reedDensityUnit').propertyValue as string];\n this.COLUMN_UNITS_MAP = this.overviewService.updateColumnUnitsMap(this.COLUMN_UNITS_MAP, this.weftDensityUnit, this.pickDensityUnit, this.reedDensityUnit);\n\n this.changeDetectorRef.detectChanges();\n\n this.subscribeToRealtimeProductionOrderChanges();\n }\n\n let endRowPO: number;\n\n if (listOfProductionSchedules.length < this.quantityOfRowsToRequestPerSlice) {\n endRowPO = startRow + listOfProductionSchedules.length;\n }\n\n if (startRow === 0 && listOfProductionSchedules.length === 0) {\n this.textileDataOverview.showNoRowsOverlay();\n }\n\n this.loadingForTheFirstTime = false;\n\n this.changeDetectorRef.detectChanges();\n\n this.textileDataOverview.setLoadingCellRendererParams({\n loadingForTheFirstTime: this.loadingForTheFirstTime\n });\n\n params.success({\n rowData: listOfProductionSchedules,\n rowCount: endRowPO\n });\n },\n error: () => {\n params.success({\n rowData: [],\n rowCount: 0\n });\n this.textileDataOverview.showNoRowsOverlay();\n }\n });\n }\n };\n }\n\n private convertFilterModel(filterModel: {[key: string]: any}): {[key: string]: any} {\n Object.keys(filterModel).forEach((key: string) => {\n if (key in this.COLUMN_UNITS_MAP) {\n const numberFilterModel = filterModel[key].filterModels.find((model: any) => model?.filterType === 'number');\n if (numberFilterModel) {\n if (numberFilterModel.operator !== undefined) {\n numberFilterModel.conditions.forEach((condition: any) => this.convertNumberFilterValue(key, condition));\n } else {\n this.convertNumberFilterValue(key, numberFilterModel);\n }\n }\n\n const setFilterModel = filterModel[key].filterModels.find((model: any) => model?.filterType === 'set');\n if (setFilterModel) {\n setFilterModel.values = setFilterModel.values.map((value: string) => this.convertFilterValue(key, parseFloat(value)));\n }\n } else if (key === 'status') {\n FilterModelsUtils.setFilterModelsForColumnId(this.translate.instant('PRODUCTION_ORDER.PRODUCTION_SCHEDULE_COMBINED_STATES'), filterModel, key);\n }\n });\n return filterModel;\n }\n\n private convertNumberFilterValue(key: string, numberFilterModel: any): void {\n if (numberFilterModel.filter) {\n numberFilterModel.filter = this.convertFilterValue(key, numberFilterModel.filter);\n }\n if (numberFilterModel.filterTo) {\n numberFilterModel.filterTo = this.convertFilterValue(key, numberFilterModel.filterTo);\n }\n }\n\n private convertFilterValue(key: string, value: number): number {\n return convertUnit({\n from: {\n value,\n unit: this.COLUMN_UNITS_MAP[key].getDisplayUnit()\n },\n to: this.COLUMN_UNITS_MAP[key].dataToUnit\n });\n }\n\n private initialiseAdvancedSearchFilters(): void {\n this.advancedSearchFilters.push(\n {\n propertyName: AdvancedSearchInput.PRODUCTION_SCHEDULE_STATUS,\n possiblePropertyValues: filter(EnumUtils.getEnumValues(ProductionScheduleStatus), (status: ProductionScheduleStatus) => !isEqual(status, ProductionScheduleStatus.TO_PLAN))\n },\n {propertyName: AdvancedSearchInput.NAME},\n {propertyName: AdvancedSearchInput.MACHINE},\n {propertyName: AdvancedSearchInput.PICK_DENSITY},\n {propertyName: AdvancedSearchInput.REED_DENSITY},\n {propertyName: AdvancedSearchInput.COMPLETION_DATE_START},\n {propertyName: AdvancedSearchInput.COMPLETION_DATE_END}\n );\n }\n\n private deleteSelectedProductionScheduleMachineFiles(selectedProductionSchedule: OverviewListProductionSchedule): void {\n this.productionOrders\n .removeMachineFiles(selectedProductionSchedule.id, selectedProductionSchedule.machine.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT', {object: this.translate.instant(this.machineFileTranslation, {count: 2})})\n });\n },\n error: (errorMessage: BackendError) => {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: lowerCase(this.translate.instant(this.machineFileTranslation, {count: 2}))}),\n messageText: errorMessage.message,\n type: DialogType.INFORMATION\n });\n }\n });\n }\n\n private editProductionSchedule(event: CellClickedEvent | OverviewListProductionSchedule, completingPartially: boolean = false): void {\n this.router.navigate([this.pageUrls.edit.replace(':id', event instanceof OverviewListProductionSchedule ? event.id : event.data.id)], {\n state: {completingPartially}\n });\n }\n\n private getDefaultParameterForPropertyName(propertyName: string): PropertyValue {\n return find(this.listOfMachineQualitiesCustomSettings, ['propertyName', propertyName]);\n }\n\n private subscribeToRealtimeProductionOrderChanges(): void {\n this.realtimeProductionOrder\n .getProductionOrdersStatusChanges()\n .pipe(debounceTime(1000), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionOrderStatusChange: ProductionOrderStatusChange) => {\n if (this.isGridSortedByStatus()) {\n this.refreshServerSide(false);\n } else {\n this.updateProductionOrderStatus(productionOrderStatusChange.id, productionOrderStatusChange.status);\n }\n });\n\n this.realtimeProductionOrder\n .getProductionOrderCreated()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((productionOrderCreated: ProductionOrderCreated) => {\n this.updateProductionOrderId(productionOrderCreated.scheduleId, productionOrderCreated.productionOrderId);\n });\n }\n\n private updateProductionOrderStatus(id: number | string, status: ProductionScheduleStatus): void {\n this.textileDataOverview.forEachNode((node: RowNode) => {\n if (isEqual(node.data?.id, `${id}`)) {\n node.data.status = status;\n node.setData(node.data);\n }\n });\n }\n\n private updateProductionOrderId(oldId: string, newId: number): void {\n this.textileDataOverview.forEachNode((node: RowNode) => {\n if (isEqual(node.data?.id, oldId)) {\n node.data.id = `${newId}`;\n node.setData(node.data);\n }\n });\n }\n\n private getPossibleColumnsValues(columnIdentifier: string): Observable {\n return this.productionOrders?.getPossibleValues(columnIdentifier).pipe(takeUntil(this.unSubscribeOnViewDestroy));\n }\n\n private refreshServerSide(purge: boolean): void {\n this.textileDataOverview.refreshServerSide(purge);\n }\n\n private isGridSortedByStatus(): boolean {\n return this.sort?.colId === this.STATUS_COL_ID;\n }\n\n private haveCustomSettingsBeenLoaded(): boolean {\n return !isNil(this.listOfMachineQualitiesCustomSettings) && !isNil(this.productionOrdersCustomSettings);\n }\n\n private getSelectedProductionSchedule(): OverviewListProductionSchedule {\n return first(this.selectedProductionSchedules);\n }\n\n private isSingleProductionScheduleSelected(): boolean {\n return isEqual(size(this.selectedProductionSchedules), 1);\n }\n}\n","export enum ProductionScheduleCombinedStatus {\n CREATE_BUSY_DRAFT = 'Create Busy Draft',\n CREATE_BUSY_CREATING = 'Create Busy Creating',\n CREATE_WARNING_VERIFIED_WITH_WARNINGS = 'Create Warning Verified With Warnings',\n CREATE_WARNING_TO_RECONFIRM = 'Create Warning To Reconfirm',\n CREATE_FAILURE_VERIFIED_WITH_ERRORS = 'Create Failure Verified With Errors',\n CREATE_COMPLETE_VERIFIED = 'Create Complete Verified',\n CREATE_COMPLETE_CANCELLED = 'Create Complete Cancelled',\n CREATE_COMPLETE_HIDDEN = 'Create Complete Hidden',\n\n CONFIRM_BUSY_PROCESSING = 'Confirm Busy Processing',\n CONFIRM_BUSY_PROCESSED = 'Confirm Busy Processed',\n CONFIRM_BUSY_TRANSLATING = 'Confirm Busy Translating',\n CONFIRM_BUSY_CREATING = 'Confirm Busy Creating',\n\n CONFIRM_COMPLETE_TRANSLATED = 'Confirm Complete Translated',\n CONFIRM_COMPLETE_CREATED = 'Confirm Complete Created',\n\n CONFIRM_FAILURE_PROCESSING = 'Confirm Failure Processing',\n CONFIRM_FAILURE_TRANSLATING = 'Confirm Failure Translating',\n CONFIRM_FAILURE_CREATED = 'Confirm Failure Created',\n\n SEND_BUSY_SENDING = 'Send Busy Sending',\n SEND_FAILURE_SENDING = 'Send Failure Sending',\n SEND_COMPLETE_SENT = 'Send Complete Sent',\n\n PLAN_BUSY_PLANNING = 'Plan Busy Planning',\n PLAN_FAILURE_PLANNING = 'Plan Failure Planning',\n PLAN_COMPLETE_PLANNED = 'Plan Complete Planned',\n\n REPLAN_BUSY_REPLANNING = 'Replan Busy Replanning',\n REPLAN_COMPLETE_REPLANNED = 'Replan Complete Replanned',\n REPLAN_WARNING_REPLANNED_WITH_WARNINGS = 'Replan Warning Replanned With Warnings',\n REPLAN_FAILURE_REPLANNING = 'Replan Failure Replanning',\n\n PRODUCE_BUSY_PRODUCING = 'Produce Busy Producing',\n PRODUCE_COMPLETE_PRODUCED_COMPLETELY = 'Produce Complete Produced Completely',\n PRODUCE_WARNING_PRODUCED_PARTIALLY = 'Produce Warning Produced Partially',\n PRODUCE_WARNING_NO_PRODUCTION_INFORMATION_RECEIVED = 'Produce Warning No Production Information Received'\n}\n","export enum ColumnUnitsId {\r\n PATH_WIDTHS_IN_MM_COL_ID = 'pathWidthsInMM',\r\n WEFT_DENSITY_COL_ID = 'weftDensity',\r\n PICK_DENSITY_COL_ID = 'pickDensity',\r\n REED_DENSITY_COL_ID = 'reedDensity',\r\n PRACTICAL_PICK_DENSITY_COL_ID = 'practicalPickDensity',\r\n LENGTH_IN_MM_COL_ID = 'lengthInMM',\r\n WIDTH_IN_MM_COL_ID = 'widthInMM'\r\n}\r\n","
\n
\n \n \n
\n
\n","import {ChangeDetectorRef, Component, Inject, QueryList, ViewChildren} from '@angular/core';\nimport {getMappedColoredYarnSetWithStartDent} from '@application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set-with-start-dent';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {ColorListPreviewComponent} from '@presentation/components/color-list-preview/color-list-preview.component';\nimport {RepositionDialogData} from '@presentation/components/reposition-dialog/reposition-dialog-data.interface';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {GridCreelPreviewComponent} from '@presentation/pages/textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component';\nimport {TextileDataDetailDialogData} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail-dialog-data.interface';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {DialogBuilderFactoryService, ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE, TranslateService} from '@vdw/angular-component-library';\nimport {ICellEditorParams} from 'ag-grid-community';\nimport {cloneDeep} from 'lodash-es';\n\n@Component({\n selector: 'app-production-schedule-overview-creel-preview',\n templateUrl: './production-schedule-overview-creel-preview.component.html',\n styleUrls: ['../../../../textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component.scss']\n})\nexport class ProductionScheduleOverviewCreelPreviewComponent extends GridCreelPreviewComponent {\n @ViewChildren('colorListPreview') public colorListPreviewElements: QueryList;\n public creelMaps: CreelMap[];\n private theoreticalValue: OverviewListColoredYarnSetWithStartDent[];\n\n public constructor(\n dialogBuilderFactoryService: DialogBuilderFactoryService,\n translate: TranslateService,\n @Inject(RESPONSIVENESS_VIEW_MODE) protected responsivenessViewMode: ResponsivenessViewMode,\n changeDetectorRef: ChangeDetectorRef\n ) {\n super(dialogBuilderFactoryService, translate, responsivenessViewMode, changeDetectorRef);\n }\n\n public agInit(params: ICellEditorParams): void {\n params.value = params.data.coloredYarnSets;\n this.theoreticalValue = cloneDeep(params.value);\n this.creelMaps = params.data.mappingForCurrentPositionOnMachine;\n\n if (this.creelMaps) {\n params.value = params.value.map((coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) => {\n return getMappedColoredYarnSetWithStartDent(\n coloredYarnSetWithStartDent,\n this.creelMaps.find((creelMap: CreelMap) => creelMap.coloredYarnSetId === coloredYarnSetWithStartDent.coloredYarnSet.id),\n 'asc'\n );\n });\n\n super.agInit(params);\n\n setTimeout(() => {\n this.colorListPreviewElements.forEach((colorListPreviewElement: ColorListPreviewComponent) => {\n colorListPreviewElement.calculateCreelPositionsToShow();\n });\n });\n } else {\n super.agInit(params);\n }\n }\n\n protected getDialogDataForColoredYarnSetDetailsDialog(\n data: {colorList: OverviewListColoredYarnSet; event: MouseEvent},\n index: number\n ): RepositionDialogData & TextileDataDetailDialogData {\n return {\n ...super.getDialogDataForColoredYarnSetDetailsDialog(data, index),\n ...(this.creelMaps\n ? {\n creelMap: this.creelMaps.find((creelMap: CreelMap) => creelMap.coloredYarnSetId === data.colorList.id),\n textileData: this.theoreticalValue[index].coloredYarnSet\n }\n : {})\n };\n }\n}\n","\n{{ machine.name }}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {MachineForOverviewListProductionSchedule} from '../machine-for-overview-list-production-schedule';\n\n@Component({\n selector: 'app-production-schedule-overview-machine',\n templateUrl: './production-schedule-overview-machine.component.html',\n styleUrls: ['./production-schedule-overview-machine.component.scss']\n})\nexport class ProductionScheduleOverviewMachineComponent implements ICellRendererAngularComp {\n public machine: MachineForOverviewListProductionSchedule;\n\n public agInit(params: ICellRendererParams): void {\n this.machine = params.value;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {Injectable} from '@angular/core';\r\nimport {ProductionOrderYield} from '@domain/planning/production-order-yield';\r\nimport {ProductionScheduleCombinedStatus} from '@domain/production-schedule/production-schedule-combined-states.enum';\r\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\r\nimport {AgGridUtils, AssertionUtils, ColDefBuilderFactoryService, convertUnit, EnumUtils, LinkIconRendererComponent, TranslateService, Unit} from '@vdw/angular-component-library';\r\nimport {CellClassParams, ColDef, HeaderValueGetterParams, ICellRendererParams, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\r\nimport {L10nIntlService} from 'angular-l10n';\r\nimport {Observable, of} from 'rxjs';\r\nimport {ColumnUnitsId} from './column-units-id-enum';\r\nimport {ColumnUnitsMap} from './column-units-map';\r\nimport {ProductionScheduleOverviewCreelPreviewComponent} from './creel-preview/production-schedule-overview-creel-preview.component';\r\nimport {ProductionScheduleOverviewMachineComponent} from './machine/production-schedule-overview-machine.component';\r\nimport {OverviewListProductionSchedule} from './overview-list-production-schedule';\r\nimport {ProductionScheduleOverviewStatusComponent} from './status/production-schedule-overview-status.component';\r\n\r\n@Injectable()\r\nexport class ProductionScheduleOverviewService {\r\n private readonly booleanTrueTranslation = 'GENERAL.CONDITION.YES';\r\n private readonly booleanFalseTranslation = 'GENERAL.CONDITION.NO';\r\n private readonly STATUS_COL_ID = 'status';\r\n private readonly MACHINE_COL_ID = 'machineName';\r\n\r\n public readonly SLICE_SIZE = 10;\r\n\r\n public constructor(\r\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\r\n private readonly l10nIntlService: L10nIntlService,\r\n private readonly translate: TranslateService\r\n ) {}\r\n\r\n public getColumnDefs(\r\n editUrl: string,\r\n getPossibleColumnsValues: (columnIdentifier: string) => Observable,\r\n getColumnUnits: () => {[colId: string]: {dataFromUnit: Unit; dataToUnit: Unit; getDisplayUnit: () => Unit}}\r\n ): ColDef[] {\r\n return [\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColIdAndField(this.STATUS_COL_ID)\r\n .withHeaderName('GENERAL.STATUS')\r\n .withCellRenderer(ProductionScheduleOverviewStatusComponent)\r\n .withTooltipValueGetter((params: ITooltipParams) => {\r\n const data = params.data as OverviewListProductionSchedule;\r\n if (data && data.state) {\r\n const globalStatus = this.translate.instant(`PRODUCTION_ORDER.GLOBAL_STATUS.${data.state.globalStatus}` || params.value);\r\n const statusColor = this.translate.instant(`PRODUCTION_ORDER.STATUS_COLOR_DESCRIPTION.${data.state.statusColorDescription}` || params.value);\r\n const subStatus = this.translate.instant(`PRODUCTION_ORDER.STATUS.${data.state.subStatus}` || params.value);\r\n return `${globalStatus}-${statusColor}-${subStatus}`;\r\n }\r\n return params.value;\r\n })\r\n .withPinned(true)\r\n .withMobile()\r\n .withTextMultiFilter(of(EnumUtils.getEnumValues(ProductionScheduleCombinedStatus) as string[] | number[]))\r\n .withLockVisible()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColIdAndField('name', true)\r\n .withHeaderName('GENERAL.NAME')\r\n .withCellClass((cellClassParams: CellClassParams): string[] => this.getNameCellClass(cellClassParams))\r\n .withPinned(true)\r\n .withLockVisible()\r\n .withTextMultiFilter()\r\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\r\n return {\r\n params,\r\n editPageUrl: editUrl\r\n };\r\n })\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withField('machine')\r\n .withColId(this.MACHINE_COL_ID)\r\n .withHeaderName('MACHINE.MACHINE')\r\n .withTooltipField('machine.name')\r\n .withCellRenderer(ProductionScheduleOverviewMachineComponent)\r\n .withTextMultiFilter()\r\n .withLockVisible()\r\n .build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('numberOfPaths', true).withHeaderName('PRODUCTION_ORDER.PATH', 2, true).withNumericMultiFilter().withRightAlignment().build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColIdAndField(ColumnUnitsId.PATH_WIDTHS_IN_MM_COL_ID)\r\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.OPTIONAL_SETTINGS.PATH_WIDTHS', 1, false, 'GENERAL.UNIT.MILLIMETER')\r\n .withTextMultiFilter()\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColIdAndField('pathWidthsInDents')\r\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.OPTIONAL_SETTINGS.PATH_WIDTHS', 1, false, 'GENERAL.UNIT.DENTS')\r\n .withTextMultiFilter()\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withField('machineQuality.technicalName', true)\r\n .withColId('technicalName')\r\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY')\r\n .withTextMultiFilter()\r\n .build(),\r\n this.colDefBuilderFactoryService.getBuilder().withField('creel.name', true).withColId('creelName').withHeaderName('TEXTILE_DATA.CREEL.CREEL').withTextMultiFilter().withHide().build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET')\r\n .withValueGetter((params: ValueGetterParams) => {\r\n const names = params.data.coloredYarnSets.map((coloredYarnSets: OverviewListColoredYarnSetWithStartDent) => coloredYarnSets.coloredYarnSet.name);\r\n return names.length > 0 ? names.join(', ') : '';\r\n })\r\n .withCellRenderer(ProductionScheduleOverviewCreelPreviewComponent, undefined, true)\r\n .withoutFilter()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColIdAndField('yieldPercentage')\r\n .withHeaderName('GENERAL.YIELD', 1, false, 'GENERAL.UNIT.PERCENTAGE')\r\n .withValueGetter((params: ValueGetterParams) => this.getYieldValue(params.data.yield), true)\r\n .withNumericMultiFilter()\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.WEFT_DENSITY_COL_ID)\r\n .withHeaderValueGetter((params: HeaderValueGetterParams) =>\r\n this.getHeaderNameAndSetTooltip('TEXTILE_DATA.MACHINE_QUALITY.WEFTDENSITY', getColumnUnits()[ColumnUnitsId.WEFT_DENSITY_COL_ID].getDisplayUnit(), params)\r\n )\r\n .withValueGetter(\r\n (params: ValueGetterParams) =>\r\n AgGridUtils.buildAgGridCellTextWithoutUnit(\r\n params.data.machineQuality.weftDensity,\r\n Unit.WEFTS_PER_MILLIMETER,\r\n getColumnUnits()[ColumnUnitsId.WEFT_DENSITY_COL_ID].getDisplayUnit(),\r\n this.l10nIntlService\r\n ),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.PICK_DENSITY_COL_ID)\r\n .withHeaderValueGetter((params: HeaderValueGetterParams) =>\r\n this.getHeaderNameAndSetTooltip('TEXTILE_DATA.MACHINE_QUALITY.PICKDENSITY', getColumnUnits()[ColumnUnitsId.PICK_DENSITY_COL_ID].getDisplayUnit(), params)\r\n )\r\n .withValueGetter(\r\n (params: ValueGetterParams) =>\r\n AgGridUtils.buildAgGridCellTextWithoutUnit(\r\n params.data.machineQuality.pickDensity,\r\n Unit.PICKS_PER_MILLIMETER,\r\n getColumnUnits()[ColumnUnitsId.PICK_DENSITY_COL_ID].getDisplayUnit(),\r\n this.l10nIntlService\r\n ),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.REED_DENSITY_COL_ID)\r\n .withHeaderValueGetter((params: HeaderValueGetterParams) =>\r\n this.getHeaderNameAndSetTooltip('TEXTILE_DATA.MACHINE_QUALITY.REEDDENSITY', getColumnUnits()[ColumnUnitsId.REED_DENSITY_COL_ID].getDisplayUnit(), params)\r\n )\r\n .withValueGetter(\r\n (params: ValueGetterParams) =>\r\n AgGridUtils.buildAgGridCellTextWithoutUnit(\r\n params.data.machineQuality.reedDensity,\r\n Unit.DENTS_PER_MILLIMETER,\r\n getColumnUnits()[ColumnUnitsId.REED_DENSITY_COL_ID].getDisplayUnit(),\r\n this.l10nIntlService\r\n ),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.PRACTICAL_PICK_DENSITY_COL_ID)\r\n .withHeaderValueGetter((params: HeaderValueGetterParams) =>\r\n this.getHeaderNameAndSetTooltip('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_PICK_DENSITY', getColumnUnits()[ColumnUnitsId.PICK_DENSITY_COL_ID].getDisplayUnit(), params)\r\n )\r\n .withValueGetter(\r\n (params: ValueGetterParams) =>\r\n AgGridUtils.buildAgGridCellTextWithoutUnit(\r\n params.data.practicalPickDensityInPicksPerMM,\r\n Unit.PICKS_PER_MILLIMETER,\r\n getColumnUnits()[ColumnUnitsId.PICK_DENSITY_COL_ID].getDisplayUnit(),\r\n this.l10nIntlService\r\n ),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.LENGTH_IN_MM_COL_ID)\r\n .withHeaderName('GENERAL.DIMENSIONS.LENGTH', 1, false, 'GENERAL.UNIT.METER')\r\n .withValueGetter(\r\n (params: ValueGetterParams) => (params.data.lengthInMM ? AgGridUtils.buildAgGridCellTextWithoutUnit(params.data.lengthInMM, Unit.MILLIMETER, Unit.METER, this.l10nIntlService) : ''),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId('lengthInPicks')\r\n .withHeaderName('GENERAL.DIMENSIONS.LENGTH', 1, false, 'GENERAL.UNIT.PICKS')\r\n .withValueGetter((params: ValueGetterParams) => (params.data.lengthInPicks ? params.data.lengthInPicks : ''), true)\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId(ColumnUnitsId.WIDTH_IN_MM_COL_ID)\r\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH', 1, false, 'GENERAL.UNIT.CENTIMETER')\r\n .withValueGetter(\r\n (params: ValueGetterParams) => (params.data.widthInMM ? AgGridUtils.buildAgGridCellTextWithoutUnit(params.data.widthInMM, Unit.MILLIMETER, Unit.CENTIMETER, this.l10nIntlService) : ''),\r\n true\r\n )\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId('widthInDents')\r\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH', 1, false, 'GENERAL.UNIT.DENTS')\r\n .withValueGetter((params: ValueGetterParams) => (params.data.widthInDents ? params.data.widthInDents : ''), true)\r\n .withNumericMultiFilter()\r\n .withRightAlignment()\r\n .build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('buggy1', true).withHeaderName('PLANNING.BUGGY.BUGGY_1').withTextMultiFilter().withHide().build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('buggy2', true).withHeaderName('PLANNING.BUGGY.BUGGY_2').withTextMultiFilter().withHide().build(),\r\n this.colDefBuilderFactoryService.getBuilder().withField('dateModified').withHeaderName('GENERAL.DATETIME.DATE').withDate().withDateMultiFilter().build(),\r\n this.colDefBuilderFactoryService.getBuilder().withField('dueDate').withHeaderName('GENERAL.DATETIME.DUE_DATE').withDate().withDateMultiFilter().withHide().build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('comment', true).withHeaderName('GENERAL.COMMENT').withTextMultiFilter().withHide().build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId('missingDesigns')\r\n .withHeaderName('PRODUCTION_ORDER.MISSING_DESIGN')\r\n .withValueGetter((params: ValueGetterParams) => (params.data.missingDesigns ? this.translate.instant(this.booleanTrueTranslation) : this.translate.instant(this.booleanFalseTranslation)), true)\r\n .withBooleanFilter(this.translate.instant(this.booleanFalseTranslation), this.translate.instant(this.booleanTrueTranslation))\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService\r\n .getBuilder()\r\n .withColId('isSample')\r\n .withHeaderName('PRODUCTION_ORDER.SAMPLE')\r\n .withValueGetter((params: ValueGetterParams) => (params.data.isSample ? this.translate.instant(this.booleanTrueTranslation) : this.translate.instant(this.booleanFalseTranslation)), true)\r\n .withBooleanFilter(this.translate.instant(this.booleanFalseTranslation), this.translate.instant(this.booleanTrueTranslation))\r\n .withHide()\r\n .build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('wovenStartDate').withHeaderName('GENERAL.DATETIME.START_DATE').withDate(true).withDateMultiFilter().build(),\r\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('wovenEndDate').withHeaderName('GENERAL.DATETIME.END_DATE').withDate(true).withDateMultiFilter().build()\r\n ];\r\n }\r\n\r\n public getDefaultColumnUnitsMap(): ColumnUnitsMap {\r\n return {\r\n [ColumnUnitsId.PATH_WIDTHS_IN_MM_COL_ID]: {dataFromUnit: Unit.MILLIMETER, dataToUnit: Unit.MILLIMETER, getDisplayUnit: (): Unit => Unit.CENTIMETER},\r\n [ColumnUnitsId.WEFT_DENSITY_COL_ID]: {dataFromUnit: Unit.WEFTS_PER_MILLIMETER, dataToUnit: Unit.WEFTS_PER_METER, getDisplayUnit: (): Unit => Unit.WEFTS_PER_METER},\r\n [ColumnUnitsId.PICK_DENSITY_COL_ID]: {dataFromUnit: Unit.PICKS_PER_MILLIMETER, dataToUnit: Unit.PICKS_PER_METER, getDisplayUnit: (): Unit => Unit.PICKS_PER_METER},\r\n [ColumnUnitsId.REED_DENSITY_COL_ID]: {dataFromUnit: Unit.DENTS_PER_MILLIMETER, dataToUnit: Unit.DENTS_PER_METER, getDisplayUnit: (): Unit => Unit.DENTS_PER_METER},\r\n [ColumnUnitsId.PRACTICAL_PICK_DENSITY_COL_ID]: {dataFromUnit: Unit.PICKS_PER_MILLIMETER, dataToUnit: Unit.PICKS_PER_METER, getDisplayUnit: (): Unit => Unit.PICKS_PER_METER},\r\n [ColumnUnitsId.LENGTH_IN_MM_COL_ID]: {dataFromUnit: Unit.MILLIMETER, dataToUnit: Unit.METER, getDisplayUnit: (): Unit => Unit.METER},\r\n [ColumnUnitsId.WIDTH_IN_MM_COL_ID]: {dataFromUnit: Unit.MILLIMETER, dataToUnit: Unit.MILLIMETER, getDisplayUnit: (): Unit => Unit.CENTIMETER}\r\n };\r\n }\r\n\r\n public updateColumnUnitsMap(columnUnitsMap: ColumnUnitsMap, weftDensityUnit: Unit, pickDensityUnit: Unit, reedDensityUnit: Unit): ColumnUnitsMap {\r\n columnUnitsMap[ColumnUnitsId.WEFT_DENSITY_COL_ID].getDisplayUnit = (): Unit => weftDensityUnit;\r\n columnUnitsMap[ColumnUnitsId.PICK_DENSITY_COL_ID].getDisplayUnit = (): Unit => pickDensityUnit;\r\n columnUnitsMap[ColumnUnitsId.PRACTICAL_PICK_DENSITY_COL_ID].getDisplayUnit = (): Unit => pickDensityUnit;\r\n columnUnitsMap[ColumnUnitsId.REED_DENSITY_COL_ID].getDisplayUnit = (): Unit => reedDensityUnit;\r\n\r\n return columnUnitsMap;\r\n }\r\n\r\n private getNameCellClass(cellClassParams: CellClassParams): string[] {\r\n const result = [];\r\n\r\n const productionSchedule: OverviewListProductionSchedule = cellClassParams.data;\r\n if (AssertionUtils.isEmpty(productionSchedule.name)) {\r\n result.push('disabled');\r\n }\r\n return result;\r\n }\r\n\r\n private getConversionRate(key: string, columnUnits: {[colId: string]: {dataFromUnit: Unit; dataToUnit: Unit; getDisplayUnit: () => Unit}}): number {\r\n return convertUnit({\r\n from: {\r\n value: 1,\r\n unit: columnUnits[key].dataFromUnit\r\n },\r\n to: columnUnits[key].getDisplayUnit()\r\n });\r\n }\r\n\r\n private getYieldValue(productionOrderYield: ProductionOrderYield): string {\r\n return !AssertionUtils.isNullOrUndefined(productionOrderYield)\r\n ? `${productionOrderYield.current}/${productionOrderYield.planned} - ${((100 * productionOrderYield.current) / productionOrderYield.planned).toFixed(1)}%`\r\n : '';\r\n }\r\n\r\n private getHeaderNameAndSetTooltip(headerName: string, unit: Unit, params: HeaderValueGetterParams): string {\r\n const headerNameWithUnit = `${this.translate.instant(headerName)} (${this.translate.instant(`GENERAL.UNIT.${Unit.getKeyFromValue(unit)}`)})`;\r\n params.colDef.headerTooltip = headerNameWithUnit;\r\n return headerNameWithUnit;\r\n }\r\n}\r\n","export enum ProductionScheduleGlobalStatus {\n CREATE = 'CREATE',\n CONFIRM = 'CONFIRM',\n SEND = 'SEND',\n PLAN = 'PLAN',\n REPLAN = 'REPLAN',\n PRODUCE = 'PRODUCE'\n}\n\nconst CREATE_ICON_NAME = 'solid-create';\nconst CONFIRM_ICON_NAME = 'solid-processing';\nconst SEND_ICON_NAME = 'solid-send';\nconst PLAN_ICON_NAME = 'solid-plan';\nconst REPLAN_ICON_NAME = 'solid-replan';\nconst PRODUCE_ICON_NAME = 'solid-execute';\n\nconst productionScheduleGlobalStatusIconMap: Map = new Map([\n [ProductionScheduleGlobalStatus.CREATE, CREATE_ICON_NAME],\n [ProductionScheduleGlobalStatus.CONFIRM, CONFIRM_ICON_NAME],\n [ProductionScheduleGlobalStatus.SEND, SEND_ICON_NAME],\n [ProductionScheduleGlobalStatus.PLAN, PLAN_ICON_NAME],\n [ProductionScheduleGlobalStatus.REPLAN, REPLAN_ICON_NAME],\n [ProductionScheduleGlobalStatus.PRODUCE, PRODUCE_ICON_NAME]\n]);\n\nexport namespace ProductionScheduleGlobalStatus {\n export function getStatusIconName(status: ProductionScheduleGlobalStatus): string {\n return productionScheduleGlobalStatusIconMap.get(status);\n }\n}\n","import {Component} from '@angular/core';\nimport {ProductionScheduleGlobalStatus} from '@domain/production-schedule/production-schedule-global-status.enum';\nimport {ProductionScheduleState} from '@domain/production-schedule/production-schedule-state';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './production-schedule-overview-status.component.html',\n styleUrls: ['./production-schedule-overview-status.component.scss']\n})\nexport class ProductionScheduleOverviewStatusComponent implements ICellRendererAngularComp {\n private productionScheduleStatus: ProductionScheduleStatus;\n private productionScheduleState: ProductionScheduleState;\n\n public getIconNameForProductionScheduleStatus(): string {\n return this.productionScheduleState\n ? ProductionScheduleGlobalStatus.getStatusIconName(this.productionScheduleState.globalStatus)\n : ProductionScheduleStatus.getStatusIconName(this.productionScheduleStatus);\n }\n\n public getIconColorNameForProductionScheduleStatus(): string {\n return this.productionScheduleState ? this.productionScheduleState.statusColor.toLowerCase() : '';\n }\n\n public agInit(params: ICellRendererParams): void {\n this.productionScheduleStatus = params.value;\n this.productionScheduleState = params.data?.state;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","\n","
\n \n\n
\n \n \n
\n
\n

{{ 'GENERAL.GENERAL' | bmsTranslate }}

\n
\n
\n \n
\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.MAXIMUM_LOSS' | bmsTranslate }}\n \n %\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n ({{ 'GENERAL.HINTS.UNAUTHORIZED' | bmsTranslate }}) \n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.MAX_DIFFERENCE_IN_PATH' | bmsTranslate }} \n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.ALLOW_EXCEEDING_REQUESTED_AMOUNT_OF_ORDER_LINE_ITEMS' | bmsTranslate }}\n \n\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.ALLOW_PREFILTER_ON_QUALITIES_AND_COLOREDYARNSETS' | bmsTranslate }}\n \n\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.ADD_ON_PLANNING_BOARD' | bmsTranslate }}\n \n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n

{{ 'PRODUCTION_ORDER.WEAVE_PLAN.REST_ZONE.REST_ZONE' | bmsTranslate: {count: 2} }}

\n
\n
\n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.' + restZonePositionEnum[possibleRestZonePosition] | bmsTranslate }}\n \n \n\n @if (productionScheduleCustomSettingsForm.controls.restZones.controls.userDefinedRestZonePosition.enabled) {\n
\n \n \n @for (possibleRestZonePosition of possibleUserDefinedRestZonePositions; track possibleRestZonePosition) {\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.' + restZonePositionEnum[possibleRestZonePosition] | bmsTranslate }}\n \n }\n \n \n
\n }\n\n
\n \n {{ 'PRODUCTION_ORDER.WEAVE_PLAN.REST_ZONE.MINIMUM_WIDTH' | bmsTranslate }}\n \n \n {{ 'GENERAL.UNIT.DENTS' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: INT_32_MAXIMUM_VALUE} }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: 0} }}\n \n \n
\n
\n
\n
\n
\n

{{ 'PRODUCTION_ORDER.WEAVE_PLAN.FREE_ZONE.FREE_ZONE' | bmsTranslate: {count: 2} }}

\n\n
\n
\n
\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.LEFT' | bmsTranslate }}\n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.RIGHT' | bmsTranslate }}\n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.IN_BETWEEN' | bmsTranslate }}\n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n

{{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.USE_AS_MAXIMUM_VALUE_FOR' | bmsTranslate }}

\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.LEFT' | bmsTranslate }}\n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.RIGHT' | bmsTranslate }}\n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.IN_BETWEEN' | bmsTranslate }}\n \n
\n
\n
\n
\n
\n
\n

{{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.LOOM_DELETE_POLICY_FOR_FILES' | bmsTranslate: {count: 2} }}

\n \n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.' + possibleLoomDeletePolicy | bmsTranslate }}\n \n \n @if (productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyTimePeriodInDays.enabled) {\n
\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.DAY' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\n \n \n
\n }\n
\n
\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.SCHEDULE_FILE_AUTO_DELETE_AFTER_START_ON_LOOM' | bmsTranslate }}\n \n\n \n {{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.SCHEDULE_ONLY_START_FROM_QUEUE' | bmsTranslate }}\n \n
\n
\n
\n
\n
\n \n \n
\n
\n

{{ 'GENERAL.LABEL.LABEL' | bmsTranslate: {count: 2} }}

\n\n
\n
\n \n \n {{ 'GENERAL.LABEL.FONT_FAMILY' | bmsTranslate }}\n \n \n @for (fontFamily of possibleFontFamilies; track fontFamily) {\n \n {{ 'GENERAL.FONTS.FONT_FAMILY.' + fontFamily | bmsTranslate }}\n \n }\n \n \n\n
\n \n \n {{ 'GENERAL.LABEL.FONT_WEIGHT' | bmsTranslate }}\n \n\n \n @for (fontWeight of possibleFontWeights; track fontWeight) {\n \n {{ 'GENERAL.FONTS.FONT_WEIGHT.' + fontWeight | bmsTranslate }}\n \n }\n \n \n \n \n {{ 'GENERAL.LABEL.FONT_STYLE' | bmsTranslate }}\n \n \n @for (fontStyle of possibleFontStyles; track fontStyle) {\n \n {{ 'GENERAL.FONTS.FONT_STYLE.' + fontStyle | bmsTranslate }}\n \n }\n \n \n
\n\n
\n \n \n {{ 'GENERAL.LABEL.LABEL_HEIGHT' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n \n \n {{ 'GENERAL.LABEL.FONT_SIZE' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.UNIT.MILLIMETER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n
\n
\n

{{ 'PRODUCTION_ORDER.CUSTOM_SETTINGS.PATH_LABELS.TITLE' | bmsTranslate }}

\n\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {AfterViewInit, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, Validators} from '@angular/forms';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {FontFamily} from '@domain/fonts/font-family.enum';\nimport {FontStyle} from '@domain/fonts/font-style.enum';\nimport {FontWeight} from '@domain/fonts/font-weight.enum';\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\nimport {FreeZoneSettings} from '@domain/production-schedule/custom-settings/free-zone-settings';\nimport {LoomScheduleSettings} from '@domain/production-schedule/custom-settings/loom-schedule-settings';\nimport {PathLabelSettings} from '@domain/production-schedule/custom-settings/path-label-settings';\nimport {ProductionOrderCustomSettings} from '@domain/production-schedule/custom-settings/production-order-custom-settings';\nimport {RestZoneSettings} from '@domain/production-schedule/custom-settings/rest-zone-settings';\nimport {LoomDeletePolicy} from '@domain/production-schedule/loom-delete-policy/loom-delete-policy.enum';\nimport {RestZonePosition} from '@domain/production-schedule/rest-zone/rest-zone-position.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {BackendLimitsConstants} from '@shared/constants/backend-limits.constants';\nimport {BaseComponent, canShowErrorForErrorCodeAndFormControlForFormGroup, EnumUtils, FormValidationHelper, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {some} from 'lodash-es';\nimport {forkJoin} from 'rxjs';\nimport {distinctUntilChanged, finalize, startWith, takeUntil} from 'rxjs/operators';\nimport {ProductionScheduleCustomSettingsForm} from './production-schedule-custom-settings-form';\n\n@Component({\n selector: 'app-production-schedule-custom-settings',\n templateUrl: './production-schedule-custom-settings.component.html',\n styleUrls: ['./production-schedule-custom-settings.component.scss']\n})\nexport class ProductionScheduleCustomSettingsComponent extends BaseComponent implements OnInit, AfterViewInit {\n private readonly VIEW_LOSS_PERMISSION: Permission = Permission.VIEW_LOSS;\n private readonly PRODUCTION_SCHEDULE_OVERVIEW_URL = NavigationUtils.getAbsolutePath(NavigationId.CARPET_PRODUCTION_ORDER);\n\n public readonly INT_32_MAXIMUM_VALUE = BackendLimitsConstants.INT32_MAX;\n public readonly ACCESS_ALL_PERMISSION: Permission = Permission.ACCESS_ALL;\n\n public initialCustomSettings: ProductionOrderCustomSettings;\n public productionScheduleCustomSettingsForm: ProductionScheduleCustomSettingsForm;\n public nameGenerationProperties: NameGeneratorProperty[];\n public pathLabelNameGenerationProperties: NameGeneratorProperty[];\n\n public restZonePositionEnum = RestZonePosition;\n public possibleRestZonePositions: RestZonePosition[] = RestZonePosition.getRestZonePositions();\n public possibleUserDefinedRestZonePositions: RestZonePosition[] = RestZonePosition.getUserDefinedRestZonePositions();\n public possibleLoomDeletePolicies: LoomDeletePolicy[] = EnumUtils.getEnumValues(LoomDeletePolicy);\n public possibleFontFamilies: FontFamily[] = EnumUtils.getEnumValues(FontFamily);\n public possibleFontWeights: FontWeight[] = EnumUtils.getEnumValues(FontWeight);\n public possibleFontStyles: FontStyle[] = EnumUtils.getEnumValues(FontStyle);\n public hasPlanningBoardPermission: boolean = false;\n\n private alreadyAdjustedCustomSettings = false;\n private saveButtonTouched = false;\n private showCustomSettings = false;\n\n private currentSubscription: ProfileSubscription;\n\n public constructor(\n private readonly toastService: ToastService,\n private readonly httpProductionOrdersCustomSettings: HttpProductionOrdersCustomSettingsService,\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly formBuilder: FormBuilder,\n private readonly translate: TranslateService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngAfterViewInit(): void {\n this.changeDetectorRef.detectChanges();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.hasPlanningBoardPermission =\n (this.currentSubscription?.hasPermission(Permission.TEXFAB_PLANNINGBOARD) ?? false) || (this.currentSubscription?.hasPermission(Permission.TEXFAB_PLANNINGBOARD_NEW) ?? false);\n this.initialiseCustomSettings();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.onDestroy();\n }\n\n public canShowErrorForFormControl(errorCode: string, formControlName: string): boolean {\n return canShowErrorForErrorCodeAndFormControlForFormGroup(errorCode, formControlName, this.productionScheduleCustomSettingsForm);\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = some(this.productionScheduleCustomSettingsForm?.controls, (control: FormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public saveCustomSettings(): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.productionScheduleCustomSettingsForm], this.document);\n\n if (isValid) {\n this.saving = true;\n\n const formValue = this.productionScheduleCustomSettingsForm.getRawValue();\n const customSettingsToSave: ProductionOrderCustomSettings = new ProductionOrderCustomSettings(\n undefined,\n formValue.nameGenerator,\n formValue.maximumLossInPercent,\n formValue.maxDifferenceInPathCommercialLength,\n formValue.allowExceedingRequestedAmountOfOrderLineItems,\n formValue.allowPreFilterOnQualitiesAndColoredYarnSets,\n formValue.onPlanningBoard,\n new RestZoneSettings(formValue.restZones.position, formValue.restZones.userDefinedRestZonePosition, formValue.restZones.minimumWidth),\n new FreeZoneSettings(\n formValue.freeZones.leftCommercialWidth,\n formValue.freeZones.leftUseAsMaximum,\n formValue.freeZones.rightCommercialWidth,\n formValue.freeZones.rightUseAsMaximum,\n formValue.freeZones.inBetweenCommercialWidth,\n formValue.freeZones.inBetweenUseAsMaximum\n ),\n new PathLabelSettings(\n formValue.pathLabel.nameGenerator,\n this.initialCustomSettings.pathLabel.technicalHeightInPicks,\n formValue.labels.labelFontFamily,\n formValue.labels.labelFontWeight,\n formValue.labels.labelFontStyle,\n formValue.labels.commercialLabelFontSize,\n formValue.labels.commercialLabelHeightInMM\n ),\n new LoomScheduleSettings(\n formValue.loomDeletePolicy.loomDeletePolicyOption,\n formValue.loomDeletePolicy.loomDeletePolicyTimePeriodInDays,\n formValue.loomDeletePolicy.scheduleFileAutoDeleteAfterStartOnLoom,\n formValue.loomDeletePolicy.scheduleOnlyStartFromQueue\n ),\n this.initialCustomSettings.epNameGenerator\n );\n\n this.httpProductionOrdersCustomSettings\n .save(customSettingsToSave)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving()))\n .subscribe(() => {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.SAVED_OBJECT', {\n object: this.translate.instant(this.translate.instant('GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS').toLowerCase())\n })\n });\n\n this.navigateBack();\n });\n }\n }\n\n public canShowCancelButton(): boolean {\n return this.alreadyAdjustedCustomSettings;\n }\n\n public navigateBack(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.PRODUCTION_SCHEDULE_OVERVIEW_URL);\n }\n\n public canShowCustomSettings(): boolean {\n return this.showCustomSettings;\n }\n\n public hasViewLossPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.VIEW_LOSS_PERMISSION);\n }\n\n public getKeysOfNameGeneratorSeparator(): string[] {\n return EnumUtils.getEnumNames(NameGeneratorSeparator);\n }\n\n private setFormFields(): void {\n this.productionScheduleCustomSettingsForm = this.formBuilder.group({\n nameGenerator: this.formBuilder.control(this.initialCustomSettings.nameGenerator),\n maximumLossInPercent: this.formBuilder.control({value: this.initialCustomSettings.maximumLossInPercent, disabled: !this.hasViewLossPermission()}, Validators.required),\n maxDifferenceInPathCommercialLength: this.formBuilder.control(this.initialCustomSettings.maxDifferenceInPathLengthInMillimeters, Validators.required),\n allowExceedingRequestedAmountOfOrderLineItems: this.formBuilder.control(this.initialCustomSettings.allowExceedingRequestedAmountOfOrderLineItems),\n onPlanningBoard: this.formBuilder.control(this.initialCustomSettings.addProductionOrderToPlanningBoard),\n allowPreFilterOnQualitiesAndColoredYarnSets: this.formBuilder.control(this.initialCustomSettings.allowPreFilterOnQualitiesAndColoredYarnSets),\n restZones: this.formBuilder.group({\n position: this.formBuilder.control(this.initialCustomSettings.restZone.restPosition),\n userDefinedRestZonePosition: this.formBuilder.control(this.initialCustomSettings.restZone.userDefinedRestPosition),\n minimumWidth: this.formBuilder.control(this.initialCustomSettings.restZone.maxDentsRestToDivideOverFree, [Validators.required, Validators.max(this.INT_32_MAXIMUM_VALUE), Validators.min(0)])\n }),\n freeZones: this.formBuilder.group({\n leftCommercialWidth: this.formBuilder.control(this.initialCustomSettings.freeZone.leftWidthInMillimeters, Validators.required),\n leftUseAsMaximum: this.formBuilder.control(this.initialCustomSettings.freeZone.leftUseAsMaximum),\n rightCommercialWidth: this.formBuilder.control(this.initialCustomSettings.freeZone.rightWidthInMillimeters, Validators.required),\n rightUseAsMaximum: this.formBuilder.control(this.initialCustomSettings.freeZone.rightUseAsMaximum),\n inBetweenCommercialWidth: this.formBuilder.control(this.initialCustomSettings.freeZone.inBetweenWidthInMillimeters, Validators.required),\n inBetweenUseAsMaximum: this.formBuilder.control(this.initialCustomSettings.freeZone.inBetweenUseAsMaximum)\n }),\n labels: this.formBuilder.group({\n commercialLabelFontSize: this.formBuilder.control(this.initialCustomSettings.pathLabel.fontSizeInMM, Validators.required),\n commercialLabelHeightInMM: this.formBuilder.control(this.initialCustomSettings.pathLabel.heightInMM, Validators.required),\n labelFontFamily: this.formBuilder.control(this.initialCustomSettings.pathLabel.fontFamily),\n labelFontWeight: this.formBuilder.control(this.initialCustomSettings.pathLabel.fontWeight),\n labelFontStyle: this.formBuilder.control(this.initialCustomSettings.pathLabel.fontStyle)\n }),\n pathLabel: this.formBuilder.group({\n nameGenerator: this.formBuilder.control(this.initialCustomSettings.pathLabel.nameGenerator)\n }),\n loomDeletePolicy: this.formBuilder.group({\n loomDeletePolicyOption: this.formBuilder.control(this.initialCustomSettings.loomSchedule.deletePolicy),\n loomDeletePolicyTimePeriodInDays: this.formBuilder.control(this.initialCustomSettings.loomSchedule.deletePolicyTimePeriodInDays, [Validators.required, Validators.min(1)]),\n scheduleFileAutoDeleteAfterStartOnLoom: this.formBuilder.control(this.initialCustomSettings.loomSchedule.scheduleFileAutoDeleteAfterStartOnLoom),\n scheduleOnlyStartFromQueue: this.formBuilder.control(this.initialCustomSettings.loomSchedule.scheduleOnlyStartFromQueue)\n })\n });\n\n this.setValueWatcherForRestZonePosition();\n this.setValueWatcherForLoomDeletePolicy();\n }\n\n private setValueWatcherForRestZonePosition(): void {\n this.productionScheduleCustomSettingsForm.controls.restZones.controls.position.valueChanges\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), distinctUntilChanged(), startWith(this.productionScheduleCustomSettingsForm.controls.restZones.controls.position.value))\n .subscribe((restZonePosition: RestZonePosition) => {\n if (restZonePosition === RestZonePosition.USER_DEFINED) {\n this.productionScheduleCustomSettingsForm.controls.restZones.controls.userDefinedRestZonePosition.enable();\n this.productionScheduleCustomSettingsForm.controls.restZones.controls.userDefinedRestZonePosition.setValue(\n this.initialCustomSettings.restZone.userDefinedRestPosition ?? RestZonePosition.LEFT\n );\n } else {\n this.productionScheduleCustomSettingsForm.controls.restZones.controls.userDefinedRestZonePosition.disable();\n this.productionScheduleCustomSettingsForm.controls.restZones.controls.userDefinedRestZonePosition.setValue(null);\n }\n });\n }\n\n private setValueWatcherForLoomDeletePolicy(): void {\n this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyOption.valueChanges\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), distinctUntilChanged(), startWith(this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyOption.value))\n .subscribe((loomDeletePolicy: LoomDeletePolicy) => {\n if (loomDeletePolicy === LoomDeletePolicy.TIME_PERIOD) {\n this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyTimePeriodInDays.enable();\n this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyTimePeriodInDays.setValue(\n this.initialCustomSettings.loomSchedule.deletePolicyTimePeriodInDays ?? 1\n );\n } else {\n this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyTimePeriodInDays.disable();\n this.productionScheduleCustomSettingsForm.controls.loomDeletePolicy.controls.loomDeletePolicyTimePeriodInDays.setValue(null);\n }\n });\n }\n\n private initialiseCustomSettings(): void {\n forkJoin([\n this.httpProductionOrdersCustomSettings.get(),\n this.httpProductionOrdersCustomSettings.hasAlreadyAdjusted(),\n this.httpProductionOrdersCustomSettings.getNameGenerationProperties(),\n this.httpProductionOrdersCustomSettings.getPathLabelNameGenerationProperties()\n ])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(\n ([customSettings, alreadyAdjustedCustomSettings, nameGenerationProperties, pathLabelNameGenerationProperties]: [\n ProductionOrderCustomSettings,\n boolean,\n NameGeneratorProperty[],\n NameGeneratorProperty[]\n ]) => {\n this.initialCustomSettings = customSettings;\n this.alreadyAdjustedCustomSettings = alreadyAdjustedCustomSettings;\n this.nameGenerationProperties = nameGenerationProperties;\n this.pathLabelNameGenerationProperties = pathLabelNameGenerationProperties;\n\n this.showCustomSettings = true;\n\n this.setFormFields();\n }\n );\n }\n}\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AlertDialogResult, AssertionUtils, DialogBuilderFactoryService, DialogType} from '@vdw/angular-component-library';\nimport {Observable, Observer} from 'rxjs';\nimport {AddProductionSchedulePageComponent} from '../add/add-production-schedule-page.component';\n\nexport const canDeactivateProductionScheduleInitialPreparationsGuard = (\n component: AddProductionSchedulePageComponent,\n _: ActivatedRouteSnapshot,\n currentState: RouterStateSnapshot,\n nextState: RouterStateSnapshot\n): Observable => {\n const navigationHelperService = inject(NavigationHelperService);\n const dialogBuilderFactoryService = inject(DialogBuilderFactoryService);\n\n return new Observable((observer: Observer) => {\n if (component?.isDirty()) {\n if (!AssertionUtils.isNullOrUndefined(component.initialPreparationsComponent?.initialPreparationsAdditionalOptionsComponent)) {\n component.initialPreparationsComponent.getProductionSchedule();\n }\n\n if (\n !AssertionUtils.isNullOrUndefined(currentState) &&\n !AssertionUtils.isNullOrUndefined(nextState) &&\n navigationHelperService.isNextRouteRelatedToCurrent(getCurrentRouteLeaf(currentState.url), nextState.url)\n ) {\n confirm(observer, component, true);\n } else {\n showDiscardConfirmation(observer, component, dialogBuilderFactoryService);\n }\n } else {\n confirm(observer, component);\n }\n });\n};\n\nconst showDiscardConfirmation = (observer: Observer, component: AddProductionSchedulePageComponent, dialogBuilderFactoryService: DialogBuilderFactoryService): void => {\n dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n type: DialogType.DISCARD\n })\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.DISCARD) {\n confirm(observer, component);\n } else if (result === AlertDialogResult.CANCEL) {\n cancel(observer);\n }\n });\n};\n\nconst confirm = (observer: Observer, component: AddProductionSchedulePageComponent, navigationThroughNavigationHelper: boolean = false): void => {\n observer.next(true);\n observer.complete();\n\n component.notifyChangesToForm(navigationThroughNavigationHelper);\n};\n\nconst cancel = (observer: Observer): void => {\n observer.next(false);\n observer.complete();\n};\n\nconst getCurrentRouteLeaf = (currentRoute: string): RouteLeaf => {\n const possibleCurrentRoutes = [\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForProductConfiguration,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForMachine,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForRun,\n RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView\n ];\n\n return possibleCurrentRoutes.find((routeLeaf: RouteLeaf) => RouteUtils.isRoutePathMatching(currentRoute, routeLeaf.absolutePath));\n};\n","import {inject} from '@angular/core';\nimport {PRODUCTION_SCHEDULE_PLAN} from '@presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan';\nimport {AlertDialogResult, DialogBuilderFactoryService, DialogType} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {Observable, Observer} from 'rxjs';\n\nexport const canDeactivateProductionScheduleGuard = (): Observable => {\n const productionSchedulePlan = inject(PRODUCTION_SCHEDULE_PLAN);\n const dialogBuilderFactoryService = inject(DialogBuilderFactoryService);\n\n return new Observable((observer: Observer) => {\n if (productionSchedulePlan.hasUnsavedChanges(false)) {\n dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n type: DialogType.DISCARD\n })\n .subscribe((result: AlertDialogResult) => {\n if (isEqual(result, AlertDialogResult.DISCARD)) {\n productionSchedulePlan.discardUnsavedChanges();\n observer.next(true);\n } else {\n observer.next(false);\n }\n observer.complete();\n });\n } else {\n observer.next(true);\n observer.complete();\n }\n });\n};\n","import {inject} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteLeaf} from '@application/helper/routing/route-leaf';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {PRODUCTION_SCHEDULE_PLAN} from '@presentation/pages/texfab/production-schedule/add/plan/production-schedule-plan';\nimport {AlertDialogResult, AssertionUtils, DialogBuilderFactoryService, DialogType} from '@vdw/angular-component-library';\nimport {Observable, Observer} from 'rxjs';\nimport {AddProductionScheduleNewPageComponent} from '../add/add-production-schedule-new-page.component';\n\nexport const canDeactivateProductionScheduleGuardNew = (\n component: AddProductionScheduleNewPageComponent,\n _: ActivatedRouteSnapshot,\n currentState: RouterStateSnapshot,\n nextState: RouterStateSnapshot\n): Observable => {\n const productionSchedulePlan = inject(PRODUCTION_SCHEDULE_PLAN);\n const dialogBuilderFactoryService = inject(DialogBuilderFactoryService);\n const navigationHelperService = inject(NavigationHelperService);\n const productionScheduleId = component?.productionScheduleToAdd?.id;\n\n return new Observable((observer: Observer) => {\n if (\n (productionSchedulePlan.hasUnsavedChanges(true) ||\n (!AssertionUtils.isNullOrUndefined(productionScheduleId) && productionSchedulePlan.hasNoPaths(component?.productionScheduleToAdd) && !component?.justInitialized)) &&\n !component?.saveButtonClicked &&\n !component.areAllFieldsDisabled()\n ) {\n dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n type: DialogType.DISCARD_AND_SAVE\n })\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.DISCARD) {\n productionSchedulePlan.discardUnsavedChanges();\n productionSchedulePlan.discardTemporarySavedChanges();\n observer.next(true);\n observer.complete();\n if (\n !component.productionScheduleToAdd.hasSavedManually &&\n !AssertionUtils.isNullOrUndefined(navigationHelperService?.routingHistory[navigationHelperService?.routingHistory?.length - 1]?.route)\n ) {\n navigationHelperService.routingHistory[navigationHelperService.routingHistory.length - 1].route = '/texfab/production-order';\n }\n } else if (result === AlertDialogResult.SAVE) {\n // Save the production schedule builder changes\n productionSchedulePlan.manualSaveProductionSchedule(component?.productionScheduleToAdd?.id?.toString(), component.currentProductionSchedulePhase);\n\n // Save the changes in the configuration phase if there are any\n if (component?.productionScheduleInitialPreparationsForm?.touched) {\n component?.saveConfigurationPhaseFromLeaveDialog().subscribe({\n next: (succesfullSave: boolean) => {\n observer.next(succesfullSave);\n observer.complete();\n },\n error: () => {\n observer.next(false);\n observer.complete();\n }\n });\n } else {\n observer.next(true);\n observer.complete();\n }\n }\n });\n } else if (\n (AssertionUtils.isNullOrUndefined(productionScheduleId) &&\n (!isFormEmpty(component?.productionScheduleInitialPreparationsForm) || component?.productionScheduleInitialPreparationsForm.touched) &&\n !navigationHelperService.isNextRouteRelatedToCurrent(getCurrentRouteLeaf(currentState?.url), nextState?.url)) ||\n (component.isDuplicatingProductionOrder() && !component?.saveButtonClicked)\n ) {\n dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n type: DialogType.DISCARD_AND_SAVE\n })\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.DISCARD) {\n observer.next(true);\n observer.complete();\n } else if (result === AlertDialogResult.SAVE) {\n component?.saveConfigurationPhaseFromLeaveDialog().subscribe({\n next: (succesfullSave: boolean) => {\n observer.next(succesfullSave);\n observer.complete();\n },\n error: () => {\n observer.next(false);\n observer.complete();\n }\n });\n } else {\n observer.next(false);\n observer.complete();\n }\n });\n } else {\n observer.next(true);\n observer.complete();\n component.justInitialized = false;\n }\n });\n};\n\nconst isFormEmpty = (form: FormGroup): boolean => {\n return Object.values(form?.controls).every((control: FormControl) => AssertionUtils.isNullOrUndefined(control?.value));\n};\n\nconst getCurrentRouteLeaf = (currentRoute: string): RouteLeaf => {\n const possibleCurrentRoutes = [\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewView,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForProductConfiguration,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForMachine,\n RouteUtils.paths.texFab.productionOrder.addProductionOrderNewViewForRun,\n RouteUtils.paths.texFab.productionOrder.editProductionOrderNewView\n ];\n\n return possibleCurrentRoutes.find((routeLeaf: RouteLeaf) => RouteUtils.isRoutePathMatching(currentRoute, routeLeaf.absolutePath));\n};\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddProductionSchedulePageComponent} from '@presentation/pages/texfab/production-schedule/add/add-production-schedule-page.component';\nimport {ProductionScheduleCustomSettingsComponent} from '@presentation/pages/texfab/production-schedule/custom-settings/production-schedule-custom-settings.component';\nimport {ProductionScheduleOverviewPageComponent} from '@presentation/pages/texfab/production-schedule/overview/production-schedule-overview-page.component';\nimport {canDeactivateProductionScheduleInitialPreparationsGuard} from '@presentation/pages/texfab/production-schedule/security/can-deactivate-production-schedule-initial-preparations-guard.service';\nimport {canDeactivateProductionScheduleGuard} from '@presentation/pages/texfab/production-schedule/security/can-deactivate-production-schedule.guard';\nimport {AddProductionScheduleNewPageComponent} from './add/add-production-schedule-new-page.component';\nimport {canDeactivateProductionScheduleGuardNew} from './security/can-deactivate-production-schedule-new.guard';\n\nconst shared = {parentId: NavigationId.PRODUCTION_SCHEDULE_MODULE};\n\nexport const productionScheduleRoutes = [\n Factory.createPrototypeComponentRoute(ProductionScheduleOverviewPageComponent, {route: '', requiredPermission: Permission.TEXFAB_SCHEDULE, id: NavigationId.CARPET_PRODUCTION_ORDER, ...shared}),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'add', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(AddProductionScheduleNewPageComponent, {route: 'add/new', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_NEW, ...shared}, null, [\n canDeactivateProductionScheduleGuardNew\n ]),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'add/machine/:id', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(AddProductionScheduleNewPageComponent, {route: 'add/machine/new/:id', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_MACHINE_NEW, ...shared}, null, [\n canDeactivateProductionScheduleGuardNew\n ]),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'add/run', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_RUN, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(AddProductionScheduleNewPageComponent, {route: 'add/run/new', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_RUN_NEW, ...shared}, null, [\n canDeactivateProductionScheduleGuardNew\n ]),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'add/product-configuration/:id', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(\n AddProductionScheduleNewPageComponent,\n {route: 'add/product-configuration/:id/new', id: NavigationId.ADD_CARPET_PRODUCTION_SCHEDULE_CONFIGURATION_NEW, ...shared},\n null,\n [canDeactivateProductionScheduleGuardNew]\n ),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'edit/:id', id: NavigationId.EDIT_CARPET_PRODUCTION_SCHEDULE, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(AddProductionSchedulePageComponent, {route: 'add/:id', id: NavigationId.DUPLICATE_CARPET_PRODUCTION_SCHEDULE, ...shared}, null, [\n canDeactivateProductionScheduleGuard,\n canDeactivateProductionScheduleInitialPreparationsGuard\n ]),\n Factory.createPrototypeComponentRoute(AddProductionScheduleNewPageComponent, {route: 'edit/:id/new', id: NavigationId.EDIT_CARPET_PRODUCTION_SCHEDULE_NEW, ...shared}, null, [\n canDeactivateProductionScheduleGuardNew\n ]),\n Factory.createPrototypeComponentRoute(AddProductionScheduleNewPageComponent, {route: 'add/:id/new', id: NavigationId.DUPLICATE_CARPET_PRODUCTION_SCHEDULE_NEW, ...shared}, null, [\n canDeactivateProductionScheduleGuardNew\n ]),\n Factory.createPrototypeComponentRoute(ProductionScheduleCustomSettingsComponent, {\n route: 'settings',\n id: NavigationId.CARPET_PRODUCTION_SCHEDULE_SETTINGS,\n ...shared\n })\n];\n\nexport const productionScheduleDataRouting: ModuleWithProviders = RouterModule.forChild(productionScheduleRoutes);\n","import {PaymentStatus} from '@domain/sales-order/payment-status';\nimport {SalesOrderStatus} from '@domain/sales-order/sales-order-status';\nimport {Priority} from '@vdw/angular-component-library';\n\nexport class OverviewListSalesOrder {\n private _id: number;\n private _orderNumber: number;\n private _customer: {\n name: string;\n };\n\n private _desiredDate: Date;\n private _priority: Priority;\n private _paymentStatus: PaymentStatus;\n private _status: SalesOrderStatus;\n private _addedToOrderBook: boolean;\n\n public constructor(\n id: number,\n orderNumber: number,\n customer: {name: string},\n desiredDate: Date,\n priority: Priority,\n paymentStatus: PaymentStatus,\n status: SalesOrderStatus,\n addedToOrderBook: boolean\n ) {\n this._id = id;\n this._orderNumber = orderNumber;\n this._customer = customer;\n this._desiredDate = desiredDate;\n this._priority = priority;\n this._paymentStatus = paymentStatus;\n this._status = status;\n this._addedToOrderBook = addedToOrderBook;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get orderNumber(): number {\n return this._orderNumber;\n }\n\n public get customer(): {name: string} {\n return this._customer;\n }\n\n public get desiredDate(): Date {\n return this._desiredDate;\n }\n\n public get priority(): Priority {\n return this._priority;\n }\n\n public get paymentStatus(): PaymentStatus {\n return this._paymentStatus;\n }\n\n public get status(): SalesOrderStatus {\n return this._status;\n }\n\n public get addedToOrderBook(): boolean {\n return this._addedToOrderBook;\n }\n\n public static fromJSON(overviewListSalesOrderJSON: any): OverviewListSalesOrder {\n return new OverviewListSalesOrder(\n overviewListSalesOrderJSON.id,\n overviewListSalesOrderJSON.orderNumber,\n {name: overviewListSalesOrderJSON.customer.name},\n new Date(overviewListSalesOrderJSON.desiredDate),\n overviewListSalesOrderJSON.priority,\n overviewListSalesOrderJSON.paymentStatus,\n overviewListSalesOrderJSON.status,\n overviewListSalesOrderJSON.addedToOrderBook\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PaymentStatus} from '@domain/sales-order/payment-status';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {SALES_ORDERS, SalesOrders} from '@infrastructure/http/sales-order/sales-orders';\nimport {OverviewListSalesOrder} from '@presentation/pages/texfab/sales-order/overview/overview-list-sales-order';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogBuilderFactoryService,\n DialogType,\n GridTagComponent,\n LinkIconRendererComponent,\n Priority,\n TagColor,\n TagSize,\n ToastService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {CellClassParams, CellClickedEvent, ColDef, GridApi, ICellRendererParams, ITooltipParams} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './sales-order-overview-page.component.html',\n styleUrls: ['./sales-order-overview-page.component.scss']\n})\nexport class SalesOrderOverviewPageComponent extends BaseComponent implements OnInit {\n public listOfSalesOrders: OverviewListSalesOrder[];\n\n public readonly textileDataType = TextileDataType;\n public readonly GRID_IDENTIFIER = GridIdentifier.SALES_ORDER_OVERVIEW;\n\n private pageUrls: PageUrls;\n private currentSubscription: Subscription;\n\n public constructor(\n @Inject(SALES_ORDERS) public salesOrders: SalesOrders,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.pageUrls = LastModifiedCardUtils.getPageUrls('salesOrder');\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.getSalesOrders();\n }\n\n public getColumnDefsForListOfSalesOrders(): ColDef[] {\n const colDefs = [\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('orderNumber')\n .withField('orderNumber', true)\n .withHeaderName('SALES_ORDERS.ORDER_NUMBER')\n .withComparator(intComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .build(),\n this.colDefBuilderFactory.getBuilder().withColId('name').withField('customer.name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory.getBuilder().withColIdAndField('desiredDate').withHeaderName('SALES_ORDERS.DESIRED_DATE').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('priority')\n .withHeaderName('SALES_ORDERS.PRIORITY.PRIORITY')\n .withCellRenderer(GridTagComponent, {\n translationKey: 'SALES_ORDERS.PRIORITY.',\n size: TagSize.LARGE,\n colorGetter: {\n [Priority.LOW]: TagColor.PRIMARY,\n [Priority.MEDIUM]: TagColor.WARNING,\n [Priority.HIGH]: TagColor.ERROR\n }\n })\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`SALES_ORDERS.PRIORITY.${params.value}`).toUpperCase())\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('paymentStatus')\n .withHeaderName('SALES_ORDERS.PAYMENT_STATUS.PAYMENT_STATUS')\n .withCellRenderer(GridTagComponent, {\n colorGetter: {\n [PaymentStatus.PAID]: TagColor.SUCCESS,\n [PaymentStatus.OPEN]: TagColor.ERROR,\n [PaymentStatus.ADVANCE_PAID]: TagColor.PRIMARY\n },\n translationKey: 'SALES_ORDERS.PAYMENT_STATUS.',\n size: TagSize.LARGE\n })\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`SALES_ORDERS.PAYMENT_STATUS.${params.value}`).toUpperCase())\n .build()\n ];\n\n if (this.currentSubscription?.hasPermission(Permission.TEXFAB_ORDERBOOK)) {\n const addToOrderBookColDef = this.colDefBuilderFactory\n .getBuilder()\n .withColId('actions')\n .withHeaderName('GENERAL.ACTIONS.ACTIONS')\n .withCellRenderer((params: ICellRendererParams) => {\n const translationKey = (params.data as OverviewListSalesOrder).addedToOrderBook ? 'SALES_ORDERS.ADDED' : 'SALES_ORDERS.ADD_TO_ORDER_BOOK';\n return this.translate.instant(translationKey);\n })\n .withOnCellClicked((event: CellClickedEvent) => this.addToOrderBook(event))\n .withCellClass((params: CellClassParams) => ((params.data as OverviewListSalesOrder).addedToOrderBook ? [] : ['url']))\n .withoutFilter()\n .build();\n\n colDefs.push(addToOrderBookColDef);\n }\n\n return colDefs;\n }\n\n public exportGridForSalesOrders(gridApi: GridApi): void {\n gridApi.exportDataAsCsv({\n columnKeys: ['orderNumber', 'name', 'desiredDate', 'priority', 'paymentStatus']\n });\n }\n\n private getSalesOrders(): void {\n this.salesOrders\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfSalesOrders: OverviewListSalesOrder[]) => (this.listOfSalesOrders = listOfSalesOrders));\n }\n\n private addToOrderBook(event: CellClickedEvent): void {\n if (!(event.data as OverviewListSalesOrder).addedToOrderBook) {\n this.salesOrders\n .copyToOrderbook(event.data.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('SALES_ORDERS.ADDED')\n });\n this.getSalesOrders();\n },\n error: () => {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('SALES_ORDERS.ADD_TO_ORDER_BOOK'),\n messageText: this.translate.instant('SALES_ORDERS.ADD_TO_ORDER_BOOK_ERROR', {salesOrderName: event.data.orderNumber}),\n type: DialogType.INFORMATION\n });\n }\n });\n }\n }\n}\n","\n","import {OverviewListColoredYarnSetStubFactory} from '@application/helper/textile-data/colored-yarn-set/overview-list-colored-yarn-set-stub-factory';\nimport {DrawingForArticle} from '@domain/article/drawing-for-article';\nimport {MachineQualityForArticle} from '@domain/article/machine-quality-for-article';\nimport {FixedShape} from '@domain/drawing-library/fixed-shape.enum';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\n\nexport class OverviewListArticleStubFactory {\n public static getRandomArticleWithId(id: number): OverviewListArticle {\n return new OverviewListArticle(\n id,\n `Article_${id}`,\n new DrawingForArticle(767, '6core_20002720', FixedShape[FixedShape.RECTANGULAR], false),\n new MachineQualityForArticle(387, 'TH2038', 1),\n OverviewListColoredYarnSetStubFactory.getRandomColoredYarnSet()\n );\n }\n}\n","import {OverviewListArticleStubFactory} from '@application/helper/articles/overview-list-article-stub-factory';\nimport {ArticleForSalesOrderLine} from '@domain/sales-order/article-for-sales-order-line';\nimport {OrderLineForSalesOrder} from '@domain/sales-order/order-line-for-sales-order';\n\nexport class OrderLineForSalesOrderStubFactory {\n public static getRandomOrderLine(): OrderLineForSalesOrder {\n return this.getRandomOrderLineWithId(1);\n }\n\n public static getRandomOrderLineWithId(id: number): OrderLineForSalesOrder {\n return new OrderLineForSalesOrder(id, ArticleForSalesOrderLine.fromOverviewListArticle(OverviewListArticleStubFactory.getRandomArticleWithId(1)), 200, 0, 200, 0);\n }\n}\n","export enum SalesOrderStatus {\n DRAFT = 'DRAFT',\n ADDED_TO_ORDERBOOK = 'ADDED_TO_ORDERBOOK'\n}\n","import {OrderLineForSalesOrderStubFactory} from '@application/helper/sales-order/order-line-for-sales-order-stub-factory';\nimport {CustomerForSalesOrder} from '@domain/sales-order/customer-for-sales-order';\nimport {OrderLineForSalesOrder} from '@domain/sales-order/order-line-for-sales-order';\nimport {PaymentStatus} from '@domain/sales-order/payment-status';\nimport {SalesOrder} from '@domain/sales-order/sales-order';\nimport {SalesOrderStatus} from '@domain/sales-order/sales-order-status';\nimport {Priority} from '@vdw/angular-component-library';\n\nexport class SalesOrderStubFactory {\n public static getRandomSalesOrderWithId(id: number): SalesOrder {\n return this.getRandomSalesOrderWithIdAndOrderLines(id, [OrderLineForSalesOrderStubFactory.getRandomOrderLine()]);\n }\n\n public static getRandomSalesOrderWithOrderLines(orderLines: OrderLineForSalesOrder[]): SalesOrder {\n return this.getRandomSalesOrderWithIdAndOrderLines(1, orderLines);\n }\n\n public static getRandomSalesOrderWithIdAndOrderLines(id: number, orderLines: OrderLineForSalesOrder[]): SalesOrder {\n return new SalesOrder(id, 100 + id, new CustomerForSalesOrder(1, 'name'), new Date(), Priority.HIGH, PaymentStatus.OPEN, orderLines, SalesOrderStatus.DRAFT);\n }\n}\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {ARTICLES, Articles} from '@infrastructure/http/article/articles';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\nimport {GridColoredYarnSetPreviewComponent} from '@presentation/pages/textile-data/colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogComponentData,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n SelectGridDialog\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, RowDoubleClickedEvent} from 'ag-grid-community';\nimport {isNil} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './select-article.component.html'\n})\nexport class SelectArticleComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('articlesGrid') public articlesGrid: AgGridAngular;\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n public listOfArticles: OverviewListArticle[];\n private readonly getArticlesCommand: Observable;\n\n public constructor(\n @Inject(ARTICLES) private readonly articles: Articles,\n private readonly dialogRef: MatDialogRef,\n private readonly navigationHelperService: NavigationHelperService>,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n @Inject(MAT_DIALOG_DATA) data: any\n ) {\n super();\n\n if (!isNil(data?.getArticlesCommand)) {\n this.getArticlesCommand = data.getArticlesCommand;\n }\n }\n\n public get gridOptionsForListOfArticles(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.setGridOptionsForListOfArticles();\n this.getArticles();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.articlesGrid?.api];\n }\n\n public canSelectArticle(): boolean {\n return !AssertionUtils.isEmpty(this.listOfArticles) && !AssertionUtils.isNullOrUndefined(this.articlesGrid?.api) && this.articlesGrid.api.getSelectedRows().length > 0;\n }\n\n public selectArticle(): void {\n this.dialogRef.close(this.articlesGrid.api.getSelectedRows()[0]);\n }\n\n public navigateToAddArticle(): void {\n this.navigationHelperService.navigateToNextRouteWithPartialState({dialogComponent: SelectArticleComponent}, RouteUtils.paths.texFab.article.addArticle.absolutePath);\n }\n\n private setGridOptionsForListOfArticles(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfArticles(), GridIdentifier.SELECT_ARTICLE)\n .withOnRowDoubleClicked((row: RowDoubleClickedEvent) => {\n if (!row.node.isSelected()) {\n row.node.setSelected(true);\n }\n this.selectArticle();\n })\n .withNoRowsOverlay({\n titleParam: 'ARTICLES.ARTICLE',\n hideDescription: true,\n scale: 0.7\n } as NoDataOverlayComponentParams)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .build()\n ];\n }\n\n private getArticles(): void {\n const request = !isNil(this.getArticlesCommand) ? this.getArticlesCommand : this.articles.getAll();\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((articles: OverviewListArticle[]) => {\n this.listOfArticles = articles;\n });\n }\n\n private getColumnDefsForListOfArticles(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('name').withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('design.name').withHeaderName('DESIGN_LIBRARY.DESIGN').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('machineQuality.nameWithVersion')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('coloredYarnSet')\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET')\n .withCellRenderer(GridColoredYarnSetPreviewComponent)\n .withSortable(false)\n .build()\n ];\n }\n}\n","
\n \n
\n \n \n
\n \n
\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {Customer} from '@domain/customer/customer';\nimport {Customers, CUSTOMERS} from '@infrastructure/http/customer/customers';\nimport {\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogComponentData,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n SelectGridDialog\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, RowDoubleClickedEvent} from 'ag-grid-community';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './select-customer.component.html'\n})\nexport class SelectCustomerComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('customersGrid') public customersGrid: AgGridAngular;\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n public listOfCustomers: Customer[];\n\n public constructor(\n @Inject(CUSTOMERS) private readonly customers: Customers,\n private readonly dialogRef: MatDialogRef,\n private readonly navigationHelperService: NavigationHelperService>,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public get gridOptionsForListOfCustomers(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.setGridOptionsForListOfCustomers();\n this.getCustomers();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.customersGrid?.api];\n }\n\n public canSelectCustomer(): boolean {\n return this.listOfCustomers?.length && !AssertionUtils.isEmpty(this.customersGrid?.api?.getSelectedRows());\n }\n\n public selectCustomer(): void {\n this.dialogRef.close(this.customersGrid.api.getSelectedRows()[0]);\n }\n\n public navigateToAddCustomer(): void {\n this.navigationHelperService.navigateToNextRouteWithPartialState({dialogComponent: SelectCustomerComponent}, RouteUtils.paths.texFab.customer.addCustomer.absolutePath);\n }\n\n private setGridOptionsForListOfCustomers(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfCustomers(), GridIdentifier.SELECT_CUSTOMER)\n .withOnRowDoubleClicked((row: RowDoubleClickedEvent) => {\n if (!row.node.isSelected()) {\n row.node.setSelected(true);\n }\n this.selectCustomer();\n })\n .withNoRowsOverlay({\n titleParam: 'CUSTOMERS.CUSTOMER',\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .build()\n ];\n }\n\n private getCustomers(): void {\n this.customers\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((customers: Customer[]) => {\n this.listOfCustomers = customers;\n });\n }\n\n private getColumnDefsForListOfCustomers(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withField('number', true).withHeaderName('CUSTOMERS.NUMBER').withComparator(intComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('CUSTOMERS.NAME').withComparator(StringUtils.stringComparator).build()\n ];\n }\n}\n","
\n \n
\n \n \n
\n \n
\n","
\n \n \n\n
\n \n \n
\n
\n
\n

{{ 'GENERAL.ORDER_DETAILS' | bmsTranslate }}

\n
\n
\n
\n
\n
\n
\n \n {{ 'SALES_ORDERS.ORDER_NUMBER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NUMBER_DUPLICATE' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: int32MaximumValue} }}\n \n \n
\n
\n \n {{ 'CUSTOMERS.CUSTOMER' | bmsTranslate: {count: 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n
\n \n
\n
\n \n \n {{ 'SALES_ORDERS.PRIORITY.PRIORITY' | bmsTranslate }}\n \n \n \n {{ 'SALES_ORDERS.PRIORITY.' + priority | bmsTranslate }}\n \n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n
\n
\n \n \n {{ 'SALES_ORDERS.PAYMENT_STATUS.PAYMENT_STATUS' | bmsTranslate }}\n \n \n \n {{ 'SALES_ORDERS.PAYMENT_STATUS.' + paymentStatus | bmsTranslate }}\n \n \n \n
\n \n
\n \n
\n
\n
\n
\n
\n
\n
\n \n \n \n

{{ 'SALES_ORDERS.ORDER_LINES.ORDER_LINE' | bmsTranslate: {count: 2} }}

\n
\n
\n
\n \n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n {{ 'ARTICLES.ARTICLE' | bmsTranslate: {count: 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n \n {{ 'ORDERBOOK.REQUESTED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\n \n \n
\n \n
\n \n {{ 'ORDERBOOK.PLANNED' | bmsTranslate }}\n \n \n
\n
\n \n {{ 'ORDERBOOK.TO_PLAN' | bmsTranslate }}\n \n \n
\n
\n \n {{ 'ORDERBOOK.PRODUCED' | bmsTranslate }}\n \n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {AfterViewChecked, ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {FormArray, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationFunctionData} from '@application/helper/navigation-helper/navigation-function-data.interface';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {SalesOrderStubFactory} from '@application/helper/sales-order/sales-order-stub-factory';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {Article} from '@domain/article/article';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {Customer} from '@domain/customer/customer';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription as ProfileSubscription} from '@domain/profile/subscription';\nimport {ArticleForSalesOrderLine} from '@domain/sales-order/article-for-sales-order-line';\nimport {CustomerForSalesOrder} from '@domain/sales-order/customer-for-sales-order';\nimport {OrderLineForSalesOrder} from '@domain/sales-order/order-line-for-sales-order';\nimport {PaymentStatus} from '@domain/sales-order/payment-status';\nimport {SalesOrder} from '@domain/sales-order/sales-order';\nimport {SalesOrderStatus} from '@domain/sales-order/sales-order-status';\nimport {ARTICLES, Articles} from '@infrastructure/http/article/articles';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {CUSTOMERS, Customers} from '@infrastructure/http/customer/customers';\nimport {SALES_ORDERS, SalesOrders} from '@infrastructure/http/sales-order/sales-orders';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\nimport {SelectArticleComponent} from '@presentation/pages/texfab/sales-order/add/select-article/select-article.component';\nimport {SelectCustomerComponent} from '@presentation/pages/texfab/sales-order/add/select-customer/select-customer.component';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {BackendLimitsConstants} from '@shared/constants/backend-limits.constants';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n canShowErrorForErrorCodeAndButtonForFormGroup,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n DialogBuilderFactoryService,\n DialogComponentData,\n DialogType,\n EnumUtils,\n FormValidationHelper,\n HeaderAction,\n Priority,\n SaveType,\n skeletonViewAnimation,\n ToastService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {isEqual, isNil, some} from 'lodash-es';\nimport {DateTime} from 'luxon';\nimport {Observable} from 'rxjs';\nimport {finalize, switchMap, takeUntil} from 'rxjs/operators';\nimport {NavigationSalesOrderData} from './navigation-sales-order-data.interface';\n\n@Component({\n templateUrl: './add-sales-order-page.component.html',\n styleUrls: ['./add-sales-order-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .ag-root, .button-skeleton-wrapper')]\n})\nexport class AddSalesOrderPageComponent extends BaseComponent implements OnInit, AfterViewChecked {\n private static readonly salesOrderTranslationKey = 'SALES_ORDERS.SALES_ORDER';\n public readonly CUSTOMER_BASE_ROUTER_LINK = RouteUtils.paths.texFab.customer.editCustomer.absolutePath;\n public readonly ARTICLE_BASE_ROUTER_LINK = RouteUtils.paths.texFab.article.editArticle.absolutePath;\n public addSalesOrderForm: FormGroup<{\n orderNumber: FormControl;\n customer: FormControl;\n desiredDate: FormControl;\n priority: FormControl;\n orderLines: FormArray;\n status: FormControl;\n paymentStatus?: FormControl;\n amount?: FormControl;\n amountProduced?: FormControl;\n }>;\n\n public isLoadingSalesOrder = false;\n public priorities: string[] = EnumUtils.getEnumNames(Priority);\n public paymentStatuses: string[] = EnumUtils.getEnumNames(PaymentStatus);\n public salesOrderToSave: SalesOrder;\n public headerActions: HeaderAction[];\n public readonly int32MaximumValue = BackendLimitsConstants.INT32_MAX;\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_SALES_ORDER;\n private readonly urlToEditSalesOrder = RouteUtils.paths.texFab.salesOrder.editSalesOrder.path;\n private readonly urlToDuplicateSalesOrder = RouteUtils.paths.texFab.salesOrder.duplicateSalesOrder.path;\n private readonly urlToSalesOrderOverview = RouteUtils.paths.texFab.salesOrder.absolutePath;\n private readonly BASIC_DIALOG_PANEL_CLASS = 'basic-dialog-panel';\n private salesOrderEditPermission: Permission = LastModifiedCardUtils.getPermissionToModifyItems('salesOrder');\n private currentSubscription: ProfileSubscription;\n private saveButtonTouched = false;\n private selectedOrderlineIndex: number;\n\n public constructor(\n @Inject(SALES_ORDERS) private readonly salesOrders: SalesOrders,\n @Inject(CUSTOMERS) private readonly customers: Customers,\n @Inject(ARTICLES) private readonly articles: Articles,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly router: Router,\n private readonly formBuilder: FormBuilder,\n private readonly activatedRoute: ActivatedRoute,\n private readonly translate: TranslateService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly textileService: TextileService,\n private readonly toastService: ToastService,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n\n this.initializeAddSalesOrderFormFields();\n }\n\n public ngAfterViewChecked(): void {\n this.changeDetectorRef.detectChanges();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({salesOrder: this.getCurrentSalesOrder(), selectedOrderlineIndex: this.selectedOrderlineIndex});\n }\n\n public isEditingSalesOrder(): boolean {\n return isEqual(this.activatedRoute.snapshot.routeConfig.path, this.urlToEditSalesOrder);\n }\n\n public getActionText(): string {\n const title = this.isEditingSalesOrder() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n return this.translate.instant(title, {object: (this.translate.instant(AddSalesOrderPageComponent.salesOrderTranslationKey, {count: 1}) as string).toLowerCase()});\n }\n\n public canShowErrorForFormControl(errorCode: string, formControlName: string, formGroup?: FormGroup): boolean {\n return canShowErrorForErrorCodeAndButtonForFormGroup(errorCode, formControlName, !isNil(formGroup) ? formGroup : this.addSalesOrderForm);\n }\n\n public isSalesOrderBeingUsed(): boolean {\n return this.salesOrderToSave && this.salesOrderToSave.used && !this.isDuplicatingSalesOrder() && this.hasEditPermission();\n }\n\n public openConflictsDialog(): void {\n this.salesOrders\n .getConflicts(this.salesOrderToSave.id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass(this.BASIC_DIALOG_PANEL_CLASS)\n .withWidth('500px')\n .withHeight('auto')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createInUseData('SALES_ORDERS.SALES_ORDER', this.salesOrderToSave.orderNumber.toString(), conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n public selectCustomer(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectCustomerComponent)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((customer: Customer) => {\n if (!isNil(customer)) {\n this.addSalesOrderForm.get('customer').setValue(CustomerForSalesOrder.fromCustomer(customer));\n }\n });\n }\n\n public getChosenCustomer(): CustomerForSalesOrder {\n return this.addSalesOrderForm.get('customer').value;\n }\n\n public getEarliestPossibleDueDate(): DateTime {\n return DateTime.now();\n }\n\n public getOrderLines(): OrderLineFormGroup[] {\n return this.getOrderLinesFormArray().controls;\n }\n\n public selectArticleForOrderLine(orderLine: FormGroup, orderLineIndex: number): void {\n this.selectedOrderlineIndex = orderLineIndex;\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectArticleComponent)\n .subscribe((overviewListArticle: OverviewListArticle) => {\n this.selectedOrderlineIndex = null;\n if (!isNil(overviewListArticle)) {\n orderLine.get('article').setValue(ArticleForSalesOrderLine.fromOverviewListArticle(overviewListArticle));\n }\n });\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = some(this.addSalesOrderForm.controls, (control: FormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public hasAddedToOrderbook(): boolean {\n return this.salesOrderToSave.status === SalesOrderStatus.ADDED_TO_ORDERBOOK;\n }\n\n public cancel(): void {\n this.router.navigateByUrl(this.urlToSalesOrderOverview);\n }\n\n public saveSalesOrder(saveType: SaveType): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.addSalesOrderForm], this.document);\n\n if (isValid) {\n const salesOrderToSave: SalesOrder = this.getCurrentSalesOrder();\n this.saving = true;\n const request: Observable = this.isEditingSalesOrder() ? this.salesOrders.update(salesOrderToSave) : this.salesOrders.save(salesOrderToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) =>\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.SALES_ORDER,\n AddSalesOrderPageComponent.salesOrderTranslationKey,\n this.isEditingSalesOrder(),\n salesOrderToSave.orderNumber.toString(),\n id\n ),\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingSalesOrder() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public deleteSalesOrder(): void {\n this.textileService.removeConfirmation(this.salesOrderToSave, TextileDataType.SALES_ORDER, false, null, this.salesOrders);\n }\n\n public duplicateSalesOrder(): void {\n this.router.navigateByUrl(RouteUtils.paths.texFab.salesOrder.duplicateSalesOrder.absolutePath.replace(':id', this.salesOrderToSave.id.toString()));\n }\n\n public hasEditPermission(): boolean {\n return this.currentSubscription?.hasPermission(this.salesOrderEditPermission);\n }\n\n public hasMoreThanOneOrderLine(): boolean {\n return this.getOrderLines().length > 1;\n }\n\n public removeOrderLine(orderLineIndex: number): void {\n this.getOrderLinesFormArray().removeAt(orderLineIndex);\n }\n\n public addNewOrderLine(): void {\n const orderLines = this.getOrderLinesFormArray();\n const orderLineFormGroup = this.formBuilder.group({\n id: [null],\n article: [{value: null, disabled: !this.hasEditPermission() || this.isSalesOrderBeingUsed()}, Validators.required],\n amount: [1, [Validators.required, Validators.min(1)]],\n amountPlanned: [{value: 0, disabled: true}, Validators.required],\n amountLeft: [{value: 1, disabled: true}, Validators.required],\n amountProduced: [{value: 0, disabled: true}]\n });\n\n orderLineFormGroup\n .get('amount')\n .valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((amount: number) => {\n orderLineFormGroup.get('amountLeft').patchValue(amount);\n });\n\n orderLines.push(orderLineFormGroup);\n }\n\n private getOrderLinesFormArray(): FormArray {\n return this.addSalesOrderForm.controls.orderLines;\n }\n\n private isDuplicatingSalesOrder(): boolean {\n return isEqual(this.activatedRoute.snapshot.routeConfig.path, this.urlToDuplicateSalesOrder);\n }\n\n private getCurrentSalesOrder(): SalesOrder {\n const orderNumber: number = this.addSalesOrderForm.get('orderNumber').value;\n const customer: CustomerForSalesOrder = this.addSalesOrderForm.get('customer').value;\n const desiredDate: DateTime = this.addSalesOrderForm.get('desiredDate').value;\n const priority: Priority = this.addSalesOrderForm.get('priority').value;\n const paymentStatus: PaymentStatus = this.isEditingSalesOrder() ? this.addSalesOrderForm.get('paymentStatus').value : PaymentStatus.OPEN;\n const status: SalesOrderStatus = this.addSalesOrderForm.get('status').value;\n\n const orderLines: OrderLineForSalesOrder[] = this.getOrderLines().map((orderLineGroup: OrderLineFormGroup) => {\n return new OrderLineForSalesOrder(\n orderLineGroup.get('id').value,\n orderLineGroup.get('article').value,\n orderLineGroup.get('amount').value,\n orderLineGroup.get('amountPlanned').value,\n orderLineGroup.get('amountLeft').value,\n orderLineGroup.get('amountProduced').value\n );\n });\n\n return new SalesOrder(this.salesOrderToSave.id, orderNumber, customer, desiredDate?.toJSDate(), priority, paymentStatus, orderLines, status);\n }\n\n private initializeAddSalesOrderFormFields(): void {\n this.setAddSalesOrderForm();\n\n const emptySalesOrderState = {salesOrder: null, selectedOrderlineIndex: null} as NavigationSalesOrderData;\n const salesOrderState = this.navigationHelperService.getPartialState(Object.keys(emptySalesOrderState));\n if (!AssertionUtils.isNullOrUndefined(salesOrderState)) {\n this.salesOrderToSave = salesOrderState.salesOrder;\n this.setAddSalesOrderFormValues();\n } else if (this.isEditingSalesOrder() || this.isDuplicatingSalesOrder()) {\n const urlParams: Params = this.activatedRoute.snapshot.params;\n\n this.salesOrderToSave = SalesOrderStubFactory.getRandomSalesOrderWithId(1);\n this.setAddSalesOrderFormValues();\n\n this.isLoadingSalesOrder = true;\n\n this.salesOrders\n .getById(Number(urlParams.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (salesOrder: SalesOrder) => {\n this.salesOrderToSave = salesOrder;\n this.isLoadingSalesOrder = false;\n this.setAddSalesOrderFormValues();\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.urlToSalesOrderOverview)\n });\n } else {\n this.salesOrderToSave = SalesOrder.createEmptySalesOrder();\n this.setAddSalesOrderFormValues();\n }\n\n const orderLine = this.getOrderLines()[salesOrderState?.selectedOrderlineIndex];\n const getFunctionsBasedOnDialogComponent = new Map([\n [SelectCustomerComponent, {loadNewItem: ({newItemId}: NavigationNewItemData): void => this.setNewCustomer(newItemId), reopenDialog: (): void => this.selectCustomer()}],\n [\n SelectArticleComponent,\n {\n loadNewItem: ({newItemId}: NavigationNewItemData): void => this.setNewArticle(newItemId, orderLine),\n reopenDialog: (): void => this.selectArticleForOrderLine(orderLine, salesOrderState.selectedOrderlineIndex)\n }\n ]\n ]);\n\n this.navigationHelperService.setNewItemOrReopenDialogIfPresent(\n ({newItemId}: NavigationNewItemData, {dialogComponent}: DialogComponentData) => getFunctionsBasedOnDialogComponent.get(dialogComponent).loadNewItem({newItemId}),\n ({dialogComponent}: DialogComponentData) => getFunctionsBasedOnDialogComponent.get(dialogComponent).reopenDialog()\n );\n }\n\n private setAddSalesOrderForm(): void {\n this.addSalesOrderForm = this.formBuilder.group({\n orderNumber: this.formBuilder.control(\n {value: null, disabled: this.isEditingSalesOrder()},\n [Validators.required, Validators.max(this.int32MaximumValue)],\n AsyncUniqueValidator.createValidator(this.salesOrders, null)\n ),\n customer: this.formBuilder.control({value: null, disabled: !this.hasEditPermission() || this.isSalesOrderBeingUsed()}, Validators.required),\n desiredDate: this.formBuilder.control({value: null, disabled: !this.hasEditPermission() || this.isSalesOrderBeingUsed()}, Validators.required),\n priority: this.formBuilder.control({value: null, disabled: !this.hasEditPermission() || this.isSalesOrderBeingUsed()}, Validators.required),\n orderLines: this.formBuilder.array([\n this.formBuilder.group({\n id: this.formBuilder.control(null),\n article: this.formBuilder.control(null),\n amount: this.formBuilder.control(null),\n amountPlanned: this.formBuilder.control(null),\n amountLeft: this.formBuilder.control(null),\n amountProduced: this.formBuilder.control(null)\n })\n ]),\n status: this.formBuilder.control({value: null, disabled: !this.hasEditPermission() || this.isSalesOrderBeingUsed()})\n });\n\n this.addSalesOrderForm.controls.orderLines.clear();\n this.headerActions = [];\n }\n\n private setAddSalesOrderFormValues(): void {\n this.addSalesOrderForm.patchValue({\n orderNumber: this.isDuplicatingSalesOrder() ? null : this.salesOrderToSave.orderNumber,\n customer: this.salesOrderToSave.customer,\n desiredDate: this.salesOrderToSave.desiredDate ? DateTime.fromJSDate(this.salesOrderToSave.desiredDate) : null,\n priority: this.salesOrderToSave.priority,\n orderLines: [],\n status: null\n });\n this.addSalesOrderForm.controls.orderLines.clear();\n this.headerActions = [];\n\n this.salesOrderToSave.orderLines.forEach((orderLine: OrderLineForSalesOrder) => {\n const orderLineFormGroup: OrderLineFormGroup = this.formBuilder.group({\n id: [{value: orderLine.id, disabled: this.isSalesOrderBeingUsed()}],\n article: [{value: orderLine.article, disabled: this.isSalesOrderBeingUsed()}, Validators.required],\n amount: [{value: orderLine.amount, disabled: this.hasAddedToOrderbook() || this.isSalesOrderBeingUsed()}, Validators.required],\n amountPlanned: [{value: orderLine.amountPlanned, disabled: true}],\n amountLeft: [{value: orderLine.amountLeft, disabled: true}],\n amountProduced: [{value: orderLine.amountProduced, disabled: true}]\n });\n\n orderLineFormGroup\n .get('amount')\n .valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((amount: number) => {\n orderLineFormGroup.get('amountLeft').patchValue(amount);\n });\n\n this.addSalesOrderForm.controls.orderLines.push(orderLineFormGroup);\n });\n\n this.addSalesOrderForm.controls.orderNumber.addAsyncValidators(AsyncUniqueValidator.createValidator(this.salesOrders, this.isEditingSalesOrder() ? this.salesOrderToSave.orderNumber : null));\n this.addSalesOrderForm.controls.orderNumber.updateValueAndValidity();\n if (this.isEditingSalesOrder()) {\n this.addSalesOrderForm.controls.orderNumber.disable();\n } else {\n this.addSalesOrderForm.controls.orderNumber.enable();\n }\n\n if (!this.hasEditPermission() || this.isSalesOrderBeingUsed()) {\n this.addSalesOrderForm.controls.customer.disable();\n } else {\n this.addSalesOrderForm.controls.customer.enable();\n }\n\n if (this.isEditingSalesOrder()) {\n this.addSalesOrderForm.addControl('paymentStatus', new FormControl({value: this.salesOrderToSave.paymentStatus, disabled: this.isSalesOrderBeingUsed()}));\n this.addSalesOrderForm.addControl('amount', new FormControl({value: this.salesOrderToSave.getTotalAmountRequested(), disabled: true}));\n this.addSalesOrderForm.addControl('amountProduced', new FormControl({value: this.salesOrderToSave.getTotalAmountProduced(), disabled: true}));\n } else if (!this.isDuplicatingSalesOrder() && this.salesOrderToSave.orderLines.length === 0) {\n this.addNewOrderLine();\n }\n\n if (this.isSalesOrderBeingUsed() || !this.hasEditPermission()) {\n this.addSalesOrderForm.controls.desiredDate.disable();\n this.addSalesOrderForm.controls.priority.disable();\n this.addSalesOrderForm.controls.status.disable();\n this.addSalesOrderForm.controls.paymentStatus?.disable();\n } else {\n this.addSalesOrderForm.controls.desiredDate.enable();\n this.addSalesOrderForm.controls.priority.enable();\n this.addSalesOrderForm.controls.status.enable();\n this.addSalesOrderForm.controls.paymentStatus?.enable();\n }\n\n this.headerActions = [\n {\n label: this.translate.instant('SALES_ORDERS.ADD_TO_ORDER_BOOK'),\n disabled: this.salesOrderToSave.status === SalesOrderStatus.ADDED_TO_ORDERBOOK,\n onClick: (): void => this.addToOrderBook()\n }\n ];\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(AddSalesOrderPageComponent.salesOrderTranslationKey, {\n count: 1\n })\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private addToOrderBook(): void {\n if (this.salesOrderToSave) {\n this.salesOrders\n .copyToOrderbook(this.salesOrderToSave.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: () => {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('SALES_ORDERS.ADDED')\n });\n this.initializeAddSalesOrderFormFields();\n },\n error: () => {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('SALES_ORDERS.ADD_TO_ORDER_BOOK'),\n messageText: this.translate.instant('SALES_ORDERS.ADD_TO_ORDER_BOOK_ERROR', {salesOrderName: this.salesOrderToSave.orderNumber}),\n type: DialogType.INFORMATION\n });\n }\n });\n }\n }\n\n private setNewCustomer(id: number): void {\n this.customers\n .getById(id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((customer: Customer) => this.addSalesOrderForm.get('customer').setValue(CustomerForSalesOrder.fromCustomer(customer)));\n }\n\n private setNewArticle(id: number, orderLine: FormGroup): void {\n this.articles\n .getById(id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((article: Article) =>\n orderLine.get('article').setValue(\n new ArticleForSalesOrderLine(article.id, article.name, {\n shape: article.design.shape,\n repeated: article.design.repeated\n })\n )\n );\n }\n}\n\ntype OrderLineFormGroup = FormGroup<{\n id: FormControl;\n article: FormControl;\n amount: FormControl;\n amountPlanned: FormControl;\n amountLeft: FormControl;\n amountProduced: FormControl;\n}>;\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddSalesOrderPageComponent} from '@presentation/pages/texfab/sales-order/add/add-sales-order-page.component';\nimport {SalesOrderOverviewPageComponent} from '@presentation/pages/texfab/sales-order/overview/sales-order-overview-page.component';\n\nexport const salesOrderRoutes = [\n Factory.createPrototypeComponentRoute(SalesOrderOverviewPageComponent, {route: '', requiredPermission: null, id: NavigationId.SALES_ORDER}),\n Factory.createPrototypeComponentRoute(AddSalesOrderPageComponent, {route: 'add/:id', requiredPermission: Permission.TEXFAB_SALES_ORDER_EDIT, id: NavigationId.DUPLICATE_SALES_ORDER}),\n Factory.createPrototypeComponentRoute(AddSalesOrderPageComponent, {route: 'edit/:id', requiredPermission: Permission.TEXFAB_SALES_ORDER_VIEW, id: NavigationId.EDIT_SALES_ORDER}),\n Factory.createPrototypeComponentRoute(AddSalesOrderPageComponent, {route: 'add', requiredPermission: Permission.TEXFAB_SALES_ORDER_EDIT, reuse: true, id: NavigationId.ADD_SALES_ORDER})\n];\n\nexport const salesOrderDataRouting: ModuleWithProviders = RouterModule.forChild(salesOrderRoutes);\n","import {inject} from '@angular/core';\nimport {ActivatedRouteSnapshot, Router, RouterStateSnapshot} from '@angular/router';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {HttpProductionOrdersCustomSettingsService} from '@infrastructure/http/production-order-custom-settings/http-production-orders-custom-settings.service';\nimport {isEqual} from 'lodash-es';\nimport {Observable, of} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n// Don't remove unused childRoute: ActivatedRouteSnapshot or state: RouterStateSnapshot is seen as childRoute: ActivatedRouteSnapshot.\nexport const canActivateProductionScheduleGuard = (childRoute: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable => {\n const router = inject(Router);\n const httpProductionOrdersCustomSettings = inject(HttpProductionOrdersCustomSettingsService);\n\n if (!isEqual(state.url, NavigationUtils.getAbsolutePath(NavigationId.CARPET_PRODUCTION_SCHEDULE_SETTINGS))) {\n return httpProductionOrdersCustomSettings.hasAlreadyAdjusted().pipe(\n map((hasAlreadyAdjustedCustomSettings: boolean) => {\n let result = false;\n\n if (hasAlreadyAdjustedCustomSettings) {\n result = true;\n } else {\n router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.CARPET_PRODUCTION_SCHEDULE_SETTINGS));\n }\n\n return result;\n })\n );\n } else {\n return of(true);\n }\n};\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {NotFoundPageComponent} from '../status-codes/404/not-found-page.component';\nimport {canActivateProductionScheduleGuard} from './production-schedule/security/can-activate-production-schedule.guard';\n\nexport const texfabRoutes = [\n {path: '', component: NotFoundPageComponent},\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'planning',\n icon: 'solid-schedule',\n parentId: NavigationId.TEXFAB,\n id: NavigationId.PLANNING_MODULE,\n navigationKey: 'GENERAL.NAVIGATION.PLANNING_BOARD',\n requiredPermission: Permission.TEXFAB_PLANNINGBOARD\n },\n import('./planning/planning.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n icon: 'solid-schedule',\n route: 'planning-prototype',\n parentId: NavigationId.TEXFAB,\n id: NavigationId.PLANNING_PROTOTYPE_MODULE,\n navigationKey: 'GENERAL.NAVIGATION.PLANNING_BOARD',\n requiredPermission: Permission.TEXFAB_PLANNINGBOARD_NEW\n },\n import('./planning-prototype/planning-prototype.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {route: 'production-order', requiredPermission: Permission.TEXFAB_SCHEDULE, id: NavigationId.PRODUCTION_SCHEDULE_MODULE, parentId: NavigationId.TEXFAB, navigationKey: 'PRODUCTION_ORDER.CARPET'},\n import('./production-schedule/production-schedule.module'),\n [],\n [canActivateProductionScheduleGuard]\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {route: 'customer', requiredPermission: Permission.TEXFAB_CUSTOMER_VIEW, id: NavigationId.CUSTOMER_MODULE, parentId: NavigationId.TEXFAB, navigationKey: 'CUSTOMERS.CUSTOMER'},\n import('./customer/customer.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {route: 'article', requiredPermission: Permission.TEXFAB_ARTICLE_VIEW, id: NavigationId.ARTICLE_MODULE, parentId: NavigationId.TEXFAB, navigationKey: 'ARTICLES.ARTICLE'},\n import('./article/article.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {route: 'sales-order', requiredPermission: Permission.TEXFAB_SALES_ORDER_VIEW, id: NavigationId.SALES_ORDER_MODULE, parentId: NavigationId.TEXFAB, navigationKey: 'GENERAL.NAVIGATION.ORDERS'},\n import('./sales-order/sales-order.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {route: 'orderbook', requiredPermission: Permission.TEXFAB_ORDERBOOK, id: NavigationId.ORDERBOOK_MODULE, parentId: NavigationId.TEXFAB, navigationKey: 'ORDERBOOK.ORDERBOOK'},\n import('./orderbook/orderbook.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'weaving/production-order',\n requiredPermission: Permission.TEXFAB_WEAVE_ORDER_VIEW,\n id: NavigationId.WEAVING_PRODUCTION_ORDER_MODULE,\n parentId: NavigationId.TEXFAB,\n navigationKey: 'PRODUCTION_ORDER.WEAVING'\n },\n import('./production-order-lite/production-order-weaving.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'tufting/production-order',\n requiredPermission: Permission.TEXFAB_TUFT_ORDER_VIEW,\n id: NavigationId.TUFT_PRODUCTION_ORDER_MODULE,\n parentId: NavigationId.TEXFAB,\n navigationKey: 'PRODUCTION_ORDER.TUFTING'\n },\n import('./tuft-production-order/tuft-production-order.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'plastic/production-order',\n requiredPermission: Permission.TEXFAB_PLASTIC_ORDER_VIEW,\n id: NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE,\n parentId: NavigationId.TEXFAB,\n navigationKey: 'PRODUCTION_ORDER.PLASTIC'\n },\n import('./plastic-production-order/plastic-production-order.module')\n ),\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'path-layout-template',\n requiredPermission: Permission.TEXFAB_PATH_LAYOUT_TEMPLATE_VIEW,\n id: NavigationId.PATH_LAYOUT_TEMPLATE_MODULE,\n parentId: NavigationId.TEXFAB,\n navigationKey: 'PATH_LAYOUT_TEMPLATE.CARD_TITLE'\n },\n import('./path-layout-template/path-layout-template.module')\n )\n];\n\nexport const texfabRouting: ModuleWithProviders = RouterModule.forChild(texfabRoutes);\n","import {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Gauge} from '@domain/machine/gauge';\nimport {HttpTuftProductsService} from '@infrastructure/http/tuft-product/http-tuft-products.service';\nimport {GetAllTuftProductsParameters} from '@infrastructure/http/tuft-product/tuft-products.interface';\nimport {NavigationMachineOverviewData} from '@presentation/pages/machine-overview/navigation-machine-overview-data.interface';\nimport {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\nimport {\n AgGridUtils,\n AssertionUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n DialogComponentData,\n GridOptionsBuilderFactoryService,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n SelectGridDialog,\n StringUtils,\n Unit\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, ICellRendererParams, ITooltipParams, RowNode} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n templateUrl: './select-tuft-product.component.html'\n})\nexport class SelectTuftProductComponent extends BaseComponent implements OnInit, AfterViewInit, SelectGridDialog {\n @ViewChild('tuftProductsGrid') public tuftProductsGrid: AgGridAngular;\n public listOfTuftProducts: OverviewListTuftProduct[];\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n\n private readonly machineId: number;\n\n public constructor(\n private readonly dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) data: any,\n private readonly tuftProducts: HttpTuftProductsService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly navigationHelperService: NavigationHelperService>\n ) {\n super();\n\n this.machineId = data?.machineId;\n }\n\n public get gridOptionsForListOfTuftProducts(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.getTuftProducts();\n this.initializeGridOptionsForListOfTuftProducts();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.tuftProductsGrid?.api];\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState>({dialogComponent: SelectTuftProductComponent});\n }\n\n public selectTuftProduct(): void {\n this.dialogRef.close(this.tuftProductsGrid.api.getSelectedRows()[0]);\n }\n\n public canSelectTuftProduct(): boolean {\n return !!this.tuftProductsGrid?.api && this.tuftProductsGrid.api.getSelectedRows()?.length > 0;\n }\n\n public showOnlyLatestVersionChanged(): void {\n this.getTuftProducts();\n }\n\n public navigateToAddTuftProduct(): void {\n this.navigationHelperService.navigateToNextRouteWithPartialState(\n {equipmentId: this.machineId ?? null},\n RouteUtils.paths.texStyle.tuftProduct.addTuftProduct.absolutePath\n );\n }\n\n private initializeGridOptionsForListOfTuftProducts(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfTuftProducts(), GridIdentifier.SELECT_TUFT_PRODUCT)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT',\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withOnCellDoubleClicked(() => this.selectTuftProduct())\n .build()\n ];\n }\n\n private getTuftProducts(showOnlyLatestVersion: boolean = true): void {\n const parameters: Partial = {showOnlyLatestVersion};\n const request = AssertionUtils.isNullOrUndefined(this.machineId) ? this.tuftProducts.getAll(parameters) : this.tuftProducts.getAllForMachineId(this.machineId, parameters);\n\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((listOfTuftProducts: OverviewListTuftProduct[]) => {\n this.listOfTuftProducts = listOfTuftProducts;\n });\n }\n\n private getColumnDefsForListOfTuftProducts(): ColDef[] {\n return [\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('version', true)\n .withHeaderName('GENERAL.VERSION')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('widthInCm')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value, Unit.CENTIMETER, this.l10nIntlService))\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('blend', true)\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.BLEND')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('left')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('color', true)\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.COLOR')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('left')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('gauge')\n .withHeaderName('GENERAL.DIMENSIONS.GAUGE')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue().fractionalValueAsString, Unit.INCH))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value.fractionalValueAsString, Unit.INCH, this.l10nIntlService))\n .withCellClass('right')\n .withComparator(this.gaugeComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('stitchRateInStitchesPerCm')\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.STITCH_RATE')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.PER_CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value, Unit.PER_CENTIMETER, this.l10nIntlService))\n .withCellClass('right')\n .build()\n ];\n }\n\n private buildAgGridCellTextWithUnit(value: number, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n\n private gaugeComparator(valueA: Gauge, valueB: Gauge, _nodeA: RowNode, _nodeB: RowNode, _isInverted: boolean): number {\n const comparison = valueA.fractionalValue > valueB.fractionalValue ? 1 : -1;\n return valueA.fractionalValue === valueB.fractionalValue ? 0 : comparison;\n }\n}\n","
\n \n
\n \n \n
\n \n
\n","import {Component, OnInit, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {HttpTuftProductionOrdersService} from '@infrastructure/http/tuft-production-order/http-tuft-production-orders.service';\nimport {ProductionScheduleOverviewStatusComponent} from '@presentation/pages/texfab/production-schedule/overview/status/production-schedule-overview-status.component';\nimport {TextileDataOverviewComponent} from '@presentation/pages/textile-data/textile-data-overview/textile-data-overview.component';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {AgGridUtils, BaseComponent, ColDefBuilderFactoryService, LinkIconRendererComponent, TranslateService, Unit} from '@vdw/angular-component-library';\nimport {ColDef, GridApi, ICellRendererParams, ITooltipParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {takeUntil} from 'rxjs';\nimport {OverviewListTuftProductionOrder} from './overview-list-tuft-production-order';\n\n@Component({\n templateUrl: './tuft-production-order-overview-page.component.html'\n})\nexport class TuftProductionOrderOverviewPageComponent extends BaseComponent implements OnInit {\n @ViewChild('textileDataOverview') public textileDataOverview: TextileDataOverviewComponent;\n\n public listOfTuftProductionOrders: OverviewListTuftProductionOrder[];\n\n public readonly textileDataType = TextileDataType;\n public readonly GRID_IDENTIFIER = GridIdentifier.TUFT_PRODUCTION_ORDER_OVERVIEW;\n\n private pageUrls: PageUrls;\n\n public constructor(\n public readonly tuftProductionOrders: HttpTuftProductionOrdersService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.pageUrls = LastModifiedCardUtils.getPageUrls('tuftProductionOrder');\n\n this.tuftProductionOrders\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfTuftProductionOrders: OverviewListTuftProductionOrder[]) => {\n this.listOfTuftProductionOrders = listOfTuftProductionOrders;\n });\n }\n\n public getColumnDefsForListOfTuftProductionOrders(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('status')\n .withField('status')\n .withHeaderName('GENERAL.STATUS')\n .withCellRenderer(ProductionScheduleOverviewStatusComponent)\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`PRODUCTION_ORDER.STATUS.${params.value}`))\n .withCellClass('center')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit\n };\n })\n .withLockVisible(true)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColId('tuftProduct').withField('tuftProduct.name', true).withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT').build(),\n this.colDefBuilderFactoryService.getBuilder().withColId('machineName').withField('machine.name', true).withHeaderName('MACHINE.MACHINE').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('plannedLength')\n .withField('plannedQuantityInMeters')\n .withHeaderName('TUFT_PRODUCTION_ORDER.PLANNED_LENGTH')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.METER))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.METER))\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('dueDate').withHeaderName('GENERAL.DATETIME.DUE_DATE').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('dateCreated').withHeaderName('GENERAL.DATETIME.DATE_CREATED').withDate().withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('actualStartDate').withHeaderName('GENERAL.DATETIME.START_DATE').withDate(true).withDateMultiFilter().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('actualEndDate').withHeaderName('GENERAL.DATETIME.END_DATE').withDate(true).withDateMultiFilter().build()\n ];\n }\n\n public exportGridForTuftProductionOrders(gridApi: GridApi): void {\n gridApi.exportDataAsCsv({\n processCellCallback: (params: any) => {\n if (params.column.colId === 'tuftProduct' || params.column.colId === 'machineName') {\n return params.value?.name;\n } else {\n return params.value;\n }\n }\n });\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(this.pageUrls.settings);\n }\n\n private buildAgGridCellTextWithUnit(value: number | string, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n\n private buildAgGridCellTooltipWithUnit(value: number | string, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTooltipWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n}\n","\n\n","import {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\n\nexport class OverviewListTuftingMachine extends IdName {\n private readonly _machineType: MachineType;\n\n public constructor(machineType: MachineType, id: number, name: string) {\n super(id, name);\n this._machineType = machineType;\n }\n\n public get machineType(): MachineType {\n return this._machineType;\n }\n\n public static fromJSON(overviewListTuftingMachine: any): OverviewListTuftingMachine {\n return new OverviewListTuftingMachine(overviewListTuftingMachine.machineType, overviewListTuftingMachine.id, overviewListTuftingMachine.name);\n }\n\n public static fromMachineSummary(machine: MachineSummary): OverviewListTuftingMachine {\n return new OverviewListTuftingMachine(machine.type, machine.id, machine.name);\n }\n}\n","
\n \n \n \n
\n
\n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n
\n
\n \n {{ 'MACHINE.MACHINE' | bmsTranslate: {count: 1} }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n
\n
\n\n
\n
\n \n {{ 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT' | bmsTranslate: {count: 1} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n\n
\n
\n \n {{ 'TUFT_PRODUCTION_ORDER.PLANNED_LENGTH' | bmsTranslate }}\n \n \n {{ 'GENERAL.UNIT.METER' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\n \n \n
\n
\n \n
\n
\n\n \n {{ 'TUFT_PRODUCTION_ORDER.NOTES' | bmsTranslate }}({{ 'GENERAL.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {BackendErrorCodeEnum} from '@application/helper/backend-error-code.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {IdName} from '@domain/id-name';\nimport {IdNameVersion} from '@domain/id-name-version';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {MachineSummary} from '@domain/production-schedule/machine-summary';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {TuftProductionOrder} from '@domain/texfab/tuft-production-order/tuft-production-order';\nimport {TuftProduct} from '@domain/textile-data/tuft-product/tuft-product';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {MACHINES, Machines} from '@infrastructure/http/machine/machines.interface';\nimport {PRODUCTION_SCHEDULES, ProductionSchedules} from '@infrastructure/http/production-schedule/production-schedules';\nimport {HttpTuftProductsService} from '@infrastructure/http/tuft-product/http-tuft-products.service';\nimport {GetAllTuftProductsParameters} from '@infrastructure/http/tuft-product/tuft-products.interface';\nimport {HttpTuftProductionOrdersService} from '@infrastructure/http/tuft-production-order/http-tuft-production-orders.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n canShowErrorForErrorCodeAndButtonForFormGroup,\n DialogBuilderFactoryService,\n DialogOptions,\n DialogType,\n FormValidationHelper,\n ObjectUtils,\n SaveType,\n skeletonViewAnimation,\n ToastService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {DateTime} from 'luxon';\nimport {forkJoin} from 'rxjs';\nimport {finalize, takeUntil} from 'rxjs/operators';\nimport {SelectMachineComponent} from '../../production-schedule/add/initial-preparations-new/select-machine/select-machine.component';\nimport {OverviewListTuftingMachine} from './../overview/overview-list-tufting-machine';\nimport {NavigationTuftProductionOrderData} from './navigation-tuft-production-order-data.interface';\nimport {SelectTuftProductComponent} from './select-tuft-product/select-tuft-product.component';\n\n@Component({\n templateUrl: './add-tuft-production-order-page.component.html',\n styleUrls: ['./add-tuft-production-order-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .button-skeleton-wrapper, .mat-expansion-panel, .checkbox-skeleton, .text-skeleton-wrapper, .thread-item header')]\n})\nexport class AddTuftProductionOrderPageComponent extends BaseComponent implements OnInit {\n public addTuftProductionOrderForm: FormGroup<{\n name: FormControl;\n tuftProduct: FormControl;\n machine: FormControl;\n plannedQuantityInMeters: FormControl;\n dueDate: FormControl;\n tuftingNotes: FormControl;\n }>;\n\n public translationKeyForProductionOrder = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n public suggestedTuftProductionOrderName: string;\n\n public readonly MACHINE_BASE_ROUTER_LINK = RouteUtils.paths.texState.editMachine.absolutePath;\n public readonly TUFT_PRODUCT_BASE_ROUTER_LINK = RouteUtils.paths.texStyle.tuftProduct.editTuftProduct.absolutePath;\n\n private saveButtonTouched = false;\n private selectedMachineId: number;\n private selectedTuftProductId: number;\n private tuftProductionOrderToSave: TuftProductionOrder;\n private status: ProductionScheduleStatus;\n private runId: number;\n private currentSubscription: Subscription;\n private hasTuftProductionOrderState = false;\n\n private readonly URL_PRODUCTION_ORDER_OVERVIEW = NavigationUtils.getAbsolutePath(NavigationId.TUFT_ORDER);\n private readonly URL_EDIT_TUFT_PRODUCTION_ORDER = NavigationUtils.getRoute(NavigationId.EDIT_TUFT_ORDER);\n private readonly URL_DUPLICATE_TUFT_PRODUCTION_ORDER = NavigationUtils.getRoute(NavigationId.DUPLICATE_TUFT_ORDER);\n private readonly QUEUE_PERMISSION = Permission.TEXFAB_TUFT_QUEUE;\n private readonly EDIT_PERMISSION = Permission.TEXFAB_TUFT_ORDER_EDIT;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_TUFT_PRODUCTION_ORDER;\n public readonly SAVE = SaveType.SAVE;\n public readonly SAVE_AND_CLOSE = SaveType.SAVE_AND_CLOSE;\n public readonly SAVE_AND_CREATE_NEW = SaveType.SAVE_AND_CREATE_NEW;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(PRODUCTION_SCHEDULES) private readonly productionSchedules: ProductionSchedules,\n private readonly navigationHistory: NavigationHistoryService,\n @Inject(MACHINES) private readonly machines: Machines,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly tuftProductionOrders: HttpTuftProductionOrdersService,\n private readonly formBuilder: FormBuilder,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly toast: ToastService,\n private readonly router: Router,\n private readonly translate: TranslateService,\n private readonly activatedRoute: ActivatedRoute,\n private readonly tuftProducts: HttpTuftProductsService,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly textileService: TextileService,\n private readonly unsavedChangesNotifierService: UnsavedChangesNotifierService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.getUnsavedChangesNotifierEmitValue();\n this.tuftProductionOrderToSave = TuftProductionOrder.createEmptyTuftProductionOrder();\n this.setTuftProductionOrderForm();\n\n const emptyTuftProductionOrderState = {tuftProductionOrder: null, runId: null} as NavigationTuftProductionOrderData;\n const tuftProductionOrderState = this.navigationHelperService.getPartialState(Object.keys(emptyTuftProductionOrderState));\n\n if (!AssertionUtils.isNullOrUndefined(tuftProductionOrderState) && !ObjectUtils.isDeepEqual(tuftProductionOrderState, emptyTuftProductionOrderState)) {\n this.hasTuftProductionOrderState = true;\n this.runId = tuftProductionOrderState.runId;\n this.setTuftProductionOrder(tuftProductionOrderState.tuftProductionOrder);\n } else if (this.isEditingTuftProductionOrder() || this.isDuplicatingTuftProductionOrder()) {\n this.tuftProductionOrders\n .getById(Number(this.activatedRoute.snapshot.params.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (tuftProductionOrder: TuftProductionOrder) => {\n this.setTuftProductionOrder(tuftProductionOrder);\n },\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, this.URL_PRODUCTION_ORDER_OVERVIEW)\n });\n }\n\n if (this.isAddingProductionOrderForRun()) {\n const {runId, tuftProductId, machineId} = this.navigationHistory.getState() as {\n runId: number;\n tuftProductId: number;\n machineId: number;\n };\n this.initializeForRun(runId, tuftProductId, machineId);\n } else if (this.isAddingProductionOrderForMachine()) {\n this.initializeForMachine(Number(this.activatedRoute.snapshot.params.id));\n }\n\n this.navigationHelperService.setNewItemOrReopenDialogIfPresent(\n ({newItemId}: NavigationNewItemData) => this.setTuftProduct(newItemId),\n () => this.selectTuftProduct()\n );\n\n this.unsavedChangesNotifierService.getPartialStateOfUnsavedChangesNotifier();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.savePartialState({tuftProductionOrder: this.getCurrentTuftProductionOrder(), runId: this.runId});\n this.unsavedChangesNotifierService.savePartialStateOfUnsavedChangesNotifier();\n }\n\n public selectMachine(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectMachineComponent, {\n allowedMachineTypes: [MachineType.TUFT],\n tuftProductId: this.selectedTuftProductId\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((selectedMachine: OverviewListTuftingMachine) => {\n if (!AssertionUtils.isNullOrUndefined(selectedMachine)) {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addTuftProductionOrderForm.controls.machine.setValue(selectedMachine);\n }\n });\n }\n\n public selectTuftProduct(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openSelectGridDialog(SelectTuftProductComponent, {machineId: this.selectedMachineId})\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((selectedTuftProduct: OverviewListTuftProduct) => {\n if (!!selectedTuftProduct) {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addTuftProductionOrderForm.controls.tuftProduct.setValue(new IdNameVersion(selectedTuftProduct.id, selectedTuftProduct.name, selectedTuftProduct.version));\n }\n });\n }\n\n public getEarliestPossibleDueDate(): DateTime {\n return DateTime.now();\n }\n\n public canShowErrorForButton(errorCode: string, formControlName: string): boolean {\n return canShowErrorForErrorCodeAndButtonForFormGroup(errorCode, formControlName, this.addTuftProductionOrderForm);\n }\n\n public cancel(): void {\n this.navigationHelperService.navigateToPreviousRoute(this.URL_PRODUCTION_ORDER_OVERVIEW);\n }\n\n public saveTuftProductionOrder(saveType: SaveType, navigateToSelectedRoute?: string): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForms([this.addTuftProductionOrderForm], this.document);\n\n if (isValid) {\n this.tuftProductionOrderToSave = this.getCurrentTuftProductionOrder();\n this.saving = true;\n this.isEditingTuftProductionOrder() ? this.editTuftProductionOrder(saveType, navigateToSelectedRoute) : this.addTuftProductionOrder(saveType, navigateToSelectedRoute);\n }\n }\n\n public duplicateTuftProductionOrder(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.DUPLICATE_TUFT_ORDER).replace(':id', this.activatedRoute.snapshot.params.id));\n }\n\n public deleteTuftProductionOrder(): void {\n this.textileService.removeConfirmation(this.getCurrentTuftProductionOrder(), TextileDataType.TUFT_PRODUCTION_ORDER, false, null, this.tuftProductionOrders);\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = Object.values(this.addTuftProductionOrderForm.controls).some((control: FormControl) => control.invalid && control.touched);\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public getTitle(): string {\n return this.addTuftProductionOrderForm.value.name;\n }\n\n public getActionText(): string {\n return this.translate.instant(this.isEditingTuftProductionOrder() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', {\n object: this.translate.instant(this.translationKeyForProductionOrder, {count: 1}).toLowerCase()\n });\n }\n\n public hasPermissionToEditTuftProductionOrder(): boolean {\n return this.currentSubscription?.hasPermission(this.EDIT_PERMISSION);\n }\n\n public isEditingTuftProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.URL_EDIT_TUFT_PRODUCTION_ORDER;\n }\n\n public canDisableForm(): boolean {\n return this.isEditingTuftProductionOrder() && (!this.currentSubscription?.hasPermission(this.EDIT_PERMISSION) || this.status !== ProductionScheduleStatus.TO_PLAN);\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.TUFT_ORDER_SETTINGS));\n }\n\n public canShowSuggestionForTuftProductionOrderName(): boolean {\n return this.suggestedTuftProductionOrderName?.length > 0 && this.addTuftProductionOrderForm.getRawValue().name !== this.suggestedTuftProductionOrderName;\n }\n\n public applySuggestionForTuftProductionOrderName(): void {\n this.unsavedChangesNotifierService.notifyChangesToForm(true);\n this.addTuftProductionOrderForm.controls.name.setValue(this.suggestedTuftProductionOrderName);\n }\n\n private getUnsavedChangesNotifierEmitValue(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (!AssertionUtils.isNullOrUndefined(res)) {\n this.saveTuftProductionOrder(SaveType.SAVE_AND_CLOSE, res.navigateToSelectedRoute);\n }\n });\n }\n\n private setTuftProductionOrder(tuftProductionOrder: TuftProductionOrder): void {\n this.status = tuftProductionOrder.status;\n this.tuftProductionOrderToSave = tuftProductionOrder;\n this.tuftProductionOrderToSave.name = this.isDuplicatingTuftProductionOrder() ? null : this.tuftProductionOrderToSave.name;\n this.tuftProductionOrderToSave.machine = tuftProductionOrder.machine\n ? new OverviewListTuftingMachine(MachineType.TUFT, this.tuftProductionOrderToSave.machine.id, this.tuftProductionOrderToSave.machine.name)\n : null;\n\n this.setFormValues();\n }\n\n private setFormValues(): void {\n let dueDate = this.tuftProductionOrderToSave.dueDate;\n if (this.canDisableForm()) {\n this.addTuftProductionOrderForm.disable();\n } else if (!AssertionUtils.isNullOrUndefined(dueDate) && dueDate <= this.getEarliestPossibleDueDate().toJSDate()) {\n dueDate = null;\n }\n\n this.addTuftProductionOrderForm.reset({\n name: this.tuftProductionOrderToSave.name,\n tuftProduct: this.tuftProductionOrderToSave.tuftProduct,\n machine: this.hasQueuePermission() ? this.tuftProductionOrderToSave.machine : null,\n plannedQuantityInMeters: this.tuftProductionOrderToSave.plannedQuantityInMeters,\n dueDate: dueDate ? DateTime.fromJSDate(dueDate) : null,\n tuftingNotes: this.tuftProductionOrderToSave.tuftingNotes\n });\n\n this.addTuftProductionOrderForm.controls.name.setAsyncValidators(AsyncUniqueValidator.createValidator(this.productionSchedules, this.tuftProductionOrderToSave.name));\n this.addTuftProductionOrderForm.controls.name.updateValueAndValidity();\n }\n\n private initializeForRun(runId: number, tuftProductId: number, machineId: number): void {\n if (this.hasTuftProductionOrderState) {\n this.addTuftProductionOrderForm.controls.tuftProduct.disable();\n this.addTuftProductionOrderForm.controls.machine.disable();\n this.selectedTuftProductId = this.addTuftProductionOrderForm.getRawValue().tuftProduct.id;\n } else if (AssertionUtils.isNullOrUndefined(runId) || AssertionUtils.isNullOrUndefined(tuftProductId) || AssertionUtils.isNullOrUndefined(machineId)) {\n this.navigateToPlanning();\n } else {\n this.runId = runId;\n forkJoin([this.tuftProducts.getById(tuftProductId), this.machines.getSummaryForMachine(machineId)])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([tuftProductDetails, machineSummary]: [TuftProduct, MachineSummary]) => {\n const tuftProduct = new IdNameVersion(tuftProductDetails.id, tuftProductDetails.name, tuftProductDetails.version);\n const machine = OverviewListTuftingMachine.fromMachineSummary(machineSummary);\n const tuftProductControl = this.addTuftProductionOrderForm.controls.tuftProduct;\n const machineControl = this.addTuftProductionOrderForm.controls.machine;\n tuftProductControl.setValue(tuftProduct);\n tuftProductControl.disable({emitEvent: true});\n machineControl.setValue(machine);\n machineControl.disable({emitEvent: true});\n\n this.selectedTuftProductId = tuftProductId;\n });\n }\n }\n\n private initializeForMachine(machineId: number): void {\n if (isNaN(machineId)) {\n return;\n }\n\n if (this.hasTuftProductionOrderState) {\n this.addTuftProductionOrderForm.controls.machine.disable();\n } else {\n this.machines\n .getSummaryForMachine(machineId)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineSummary: MachineSummary) => {\n const machine = OverviewListTuftingMachine.fromMachineSummary(machineSummary);\n const machineControl = this.addTuftProductionOrderForm.controls.machine;\n machineControl.setValue(machine);\n machineControl.disable({emitEvent: true});\n });\n }\n }\n\n private addTuftProductionOrder(saveType: SaveType, navigateToSelectedRoute?: string): void {\n const action = this.canQueue() ? this.tuftProductionOrders.saveAndPlan(this.tuftProductionOrderToSave, this.runId) : this.tuftProductionOrders.save(this.tuftProductionOrderToSave);\n\n action.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.TUFT_PRODUCTION_ORDER,\n this.translationKeyForProductionOrder,\n false,\n this.tuftProductionOrderToSave.name,\n id,\n navigateToSelectedRoute\n );\n },\n error: (backendError: BackendError) => this.showErrorDialogForBackendError('GENERAL.ACTIONS.CREATE_OBJECT', backendError)\n });\n }\n\n private editTuftProductionOrder(saveType: SaveType, navigateToSelectedRoute?: string): void {\n const action = this.canQueue() ? this.tuftProductionOrders.updateAndPlan(this.tuftProductionOrderToSave, this.runId) : this.tuftProductionOrders.update(this.tuftProductionOrderToSave);\n\n action.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: () => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.TUFT_PRODUCTION_ORDER,\n this.translationKeyForProductionOrder,\n true,\n this.tuftProductionOrderToSave.name,\n null,\n navigateToSelectedRoute\n );\n },\n error: (backendError: BackendError) => this.showErrorDialogForBackendError('GENERAL.ACTIONS.EDIT_OBJECT', backendError)\n });\n }\n\n private showErrorDialogForBackendError(action: string, error: BackendError): void {\n if (Number(BackendErrorCodeEnum[error.errorContext?.errorCode]) === BackendErrorCodeEnum.LINKED_ENTITIES) {\n this.showProductionOrderIncompatibleWithMachineAlert(error);\n } else {\n const messageText = error.message;\n const titleText = this.translate.instant(action, {\n object: this.translate.instant(this.translationKeyForProductionOrder, {count: 1})\n });\n\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText,\n messageText,\n type: DialogType.INFORMATION\n } as DialogOptions);\n }\n }\n\n private showProductionOrderIncompatibleWithMachineAlert(error: BackendError): void {\n const productionOrderName = this.getPropertyValue('name');\n const machineName = this.getPropertyValue('machine').name;\n const INCOMPATIBLE_MESSAGE_KEY = 'PLANNING.ERRORS.INCOMPATIBLE_PRODUCTION_ORDER';\n const translationParams = {\n productionOrderName,\n machineName,\n amountOfCompatibleMachines: error.errorContext.linkedEntityNames?.length ?? 0\n };\n\n if (translationParams.amountOfCompatibleMachines > 0) {\n translationParams['compatibleMachinesList'] = error.errorContext.linkedEntityNames.join(', ');\n }\n\n const dialogResult = this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('PLANNING.ERRORS.INCOMPATIBLE_ENTITY', {entity: (this.translate.instant('PRODUCTION_ORDER.PRODUCTION_ORDER', {count: 1}) as string).toLowerCase()}),\n messageText: this.translate.instant(INCOMPATIBLE_MESSAGE_KEY, translationParams),\n type: DialogType.INFORMATION\n });\n\n if (!this.isEditingTuftProductionOrder() && !AssertionUtils.isNullOrUndefined(error.errorContext.entityId)) {\n dialogResult.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.router.navigate([NavigationUtils.getAbsolutePath(NavigationId.EDIT_TUFT_ORDER).replace(':id', error.errorContext.entityId)]);\n this.showToast(productionOrderName);\n });\n }\n }\n\n private showToast(tuftProductionOrderName: string): void {\n this.toast.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant(this.isEditingTuftProductionOrder() ? 'GENERAL.ACTIONS.EDITED_OBJECT' : 'GENERAL.ACTIONS.CREATED_OBJECT', {\n object: this.translate.instant(this.translationKeyForProductionOrder, {count: 1}),\n name: tuftProductionOrderName,\n count: 1\n })\n });\n }\n\n private getCurrentTuftProductionOrder(): TuftProductionOrder {\n const name: string = this.getPropertyValue('name');\n const tuftProduct: IdNameVersion = this.getPropertyValue('tuftProduct');\n const overviewListTuftingMachine: OverviewListTuftingMachine = this.getPropertyValue('machine');\n const plannedQuantityInMeters: number = this.getPropertyValue('plannedQuantityInMeters');\n const tuftingNotes: string = this.getPropertyValue('tuftingNotes');\n const dueDate: Date = AssertionUtils.isNullOrUndefined(this.getPropertyValue('dueDate')) ? null : this.getPropertyValue('dueDate').toJSDate();\n\n const machine = overviewListTuftingMachine ? new IdName(overviewListTuftingMachine.id, overviewListTuftingMachine.name) : null;\n\n return new TuftProductionOrder(\n this.isEditingTuftProductionOrder() ? Number(this.activatedRoute.snapshot.params.id) : null,\n name,\n tuftProduct,\n machine,\n plannedQuantityInMeters,\n tuftingNotes,\n this.isDuplicatingTuftProductionOrder() ? null : this.tuftProductionOrderToSave?.dateCreated,\n dueDate,\n this.status\n );\n }\n\n private setTuftProductionOrderForm(): void {\n this.addTuftProductionOrderForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.productionSchedules, null)),\n tuftProduct: this.formBuilder.control(null, Validators.required),\n machine: this.formBuilder.control({value: null, disabled: !this.hasQueuePermission()}),\n plannedQuantityInMeters: this.formBuilder.control(null, [Validators.required, Validators.min(1)]),\n dueDate: this.formBuilder.control(null),\n tuftingNotes: this.formBuilder.control(null)\n });\n\n this.addTuftProductionOrderForm.controls.machine.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.selectedMachineId = this.addTuftProductionOrderForm.controls.machine.value?.id;\n if (this.addTuftProductionOrderForm.controls.machine.valid) {\n this.getSuggestionForTuftProductionOrderName();\n }\n });\n\n this.addTuftProductionOrderForm.controls.tuftProduct.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.selectedTuftProductId = this.addTuftProductionOrderForm.controls.tuftProduct.value?.id;\n if (this.addTuftProductionOrderForm.controls.tuftProduct.valid) {\n this.getSuggestionForTuftProductionOrderName();\n }\n });\n\n this.unsavedChangesNotifierService.notifyChanges(this.addTuftProductionOrderForm, this.unSubscribeOnViewDestroy);\n }\n\n private navigateToPlanning(): void {\n this.router.navigateByUrl(NavigationUtils.getAbsolutePath(NavigationId.PLANNING));\n }\n\n private getPropertyValue(propertyName: string): any {\n return this.addTuftProductionOrderForm.get(propertyName).value;\n }\n\n private isDuplicatingTuftProductionOrder(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path === this.URL_DUPLICATE_TUFT_PRODUCTION_ORDER;\n }\n\n private hasChosenProperty(propertyName: string): boolean {\n return !AssertionUtils.isNullOrUndefined(this.getPropertyValue(propertyName));\n }\n\n private isAddingProductionOrderForRun(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path.endsWith(NavigationUtils.getRoute(NavigationId.ADD_TUFT_ORDER_RUN));\n }\n\n private canQueue(): boolean {\n return this.hasQueuePermission() && this.hasChosenProperty('machine');\n }\n\n private hasQueuePermission(): boolean {\n return this.currentSubscription?.hasPermission(this.QUEUE_PERMISSION);\n }\n\n private isAddingProductionOrderForMachine(): boolean {\n return this.activatedRoute.snapshot.routeConfig.path.endsWith(NavigationUtils.getRoute(NavigationId.ADD_TUFT_ORDER_MACHINE));\n }\n\n private setTuftProduct(id: number): void {\n const parameters: Partial = {showOnlyLatestVersion: true};\n const request = AssertionUtils.isNullOrUndefined(this.selectedMachineId) ? this.tuftProducts.getAll(parameters) : this.tuftProducts.getAllForMachineId(this.selectedMachineId, parameters);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((tuftProducts: OverviewListTuftProduct[]) => {\n const newTuftProduct = tuftProducts.find((tuftProduct: OverviewListTuftProduct) => tuftProduct.id === id);\n this.addTuftProductionOrderForm.controls.tuftProduct.setValue(new IdNameVersion(newTuftProduct.id, newTuftProduct.name, newTuftProduct.version));\n });\n }\n\n private getSuggestionForTuftProductionOrderName(): void {\n if (this.addTuftProductionOrderForm.controls.machine.value && this.addTuftProductionOrderForm.controls.tuftProduct.value && this.currentSubscription?.hasPermission(this.EDIT_PERMISSION)) {\n this.tuftProductionOrders\n .generateName(this.getCurrentTuftProductionOrder())\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((name: string) => (this.suggestedTuftProductionOrderName = name));\n }\n }\n}\n","
\n \n \n \n
\n
\n \n \n {{ 'GENERAL.PLACEHOLDER.NAME_PLACEHOLDER_SEPARATOR' | bmsTranslate }}\n \n \n {{ 'GENERAL.PLACEHOLDER.SEPARATOR.' + nameGeneratorSeparator | bmsTranslate }}\n \n \n \n \n
\n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {Router} from '@angular/router';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {NameGeneratorSeparator} from '@domain/name-generator/enums/name-generator-separator.enum';\nimport {NameGenerator} from '@domain/name-generator/name-generator';\nimport {getProperty, getPropertyValue, PropertyValue} from '@domain/property-value';\nimport {HttpTuftProductionOrdersService} from '@infrastructure/http/tuft-production-order/http-tuft-production-orders.service';\nimport {AssertionUtils, BaseComponent, EnumUtils, ObjectActionType, ToastHelperService, TranslateService} from '@vdw/angular-component-library';\nimport {finalize, forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './tuft-production-order-settings.component.html'\n})\nexport class TuftProductionOrderSettingsComponent extends BaseComponent implements OnInit {\n public nameGenerationProperties: string[];\n public generateNameConfiguration: NameGenerator;\n public tuftProductionOrderCustomSettingsForm: FormGroup<{namePlaceholderSeparator: FormControl}>;\n public saving = false;\n\n private listOfCustomSettings: PropertyValue[] = [];\n\n public constructor(\n private readonly tuftProductionOrders: HttpTuftProductionOrdersService,\n private readonly formBuilder: FormBuilder,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly toastHelperService: ToastHelperService,\n private readonly translate: TranslateService,\n public readonly unsavedChangesNotifierService: UnsavedChangesNotifierService,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.tuftProductionOrderCustomSettingsForm = this.formBuilder.group({namePlaceholderSeparator: this.formBuilder.control(NameGeneratorSeparator.NO_SEPARATOR)});\n this.unsavedChangesNotifierService.notifyChanges(this.tuftProductionOrderCustomSettingsForm, this.unSubscribeOnViewDestroy);\n this.getCustomSettingsAndNameGenerationProperties();\n this.getUnsavedChangesNotifierEmitValue();\n }\n\n public onNavigationHelperDestroy(): void {\n this.navigationHelperService.onDestroy();\n }\n\n public navigateBack(navigateToSelectedRoute?: string): void {\n if (!AssertionUtils.isNullOrUndefined(navigateToSelectedRoute)) {\n this.router.navigateByUrl(navigateToSelectedRoute);\n }\n this.navigationHelperService.navigateToPreviousRoute(RouteUtils.paths.texFab.tufting.productionOrder.absolutePath);\n }\n\n public saveCustomSettings(navigateToSelectedRoute?: string): void {\n this.saving = true;\n this.generateNameConfiguration.version = this.generateNameConfiguration.version ?? 1;\n this.generateNameConfiguration.separator = this.tuftProductionOrderCustomSettingsForm.value.namePlaceholderSeparator;\n getProperty(this.listOfCustomSettings, 'generateNameConfiguration').propertyValue = JSON.stringify(this.generateNameConfiguration);\n\n this.tuftProductionOrders\n .saveCustomSettings(this.listOfCustomSettings)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving()))\n .subscribe(() => {\n this.toastHelperService.showToastForObjectAction(ObjectActionType.SAVE, this.translate.instant('GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS').toLowerCase(), null);\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.navigateBack(navigateToSelectedRoute);\n });\n }\n\n public getKeysOfNameGeneratorSeparator(): string[] {\n return EnumUtils.getEnumNames(NameGeneratorSeparator);\n }\n\n private getUnsavedChangesNotifierEmitValue(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (!AssertionUtils.isNullOrUndefined(res)) {\n this.saveCustomSettings(res.navigateToSelectedRoute);\n }\n });\n }\n\n private getCustomSettingsAndNameGenerationProperties(): void {\n forkJoin([this.tuftProductionOrders.getListOfCustomSettings(), this.tuftProductionOrders.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([listOfCustomSettings, nameGenerationProperties]: [PropertyValue[], string[]]) => {\n this.listOfCustomSettings = listOfCustomSettings;\n this.nameGenerationProperties = nameGenerationProperties;\n this.generateNameConfiguration = JSON.parse(getPropertyValue(this.listOfCustomSettings, 'generateNameConfiguration'));\n this.tuftProductionOrderCustomSettingsForm.controls.namePlaceholderSeparator.patchValue(this.generateNameConfiguration.separator ?? NameGeneratorSeparator.NO_SEPARATOR);\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {canDeactivateRouteWithUnsavedChanges} from '@application/security/can-deactivate-unsaved-changes-notifier.guard';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddTuftProductionOrderPageComponent} from './add/add-tuft-production-order-page.component';\nimport {TuftProductionOrderOverviewPageComponent} from './overview/tuft-production-order-overview-page.component';\nimport {TuftProductionOrderSettingsComponent} from './settings/tuft-production-order-settings.component';\n\nconst shared = {parentId: NavigationId.TUFT_PRODUCTION_ORDER_MODULE};\n\nexport const tuftProductionOrderRoutes = [\n Factory.createPrototypeComponentRoute(TuftProductionOrderOverviewPageComponent, {route: '', requiredPermission: Permission.TEXFAB_TUFT_ORDER_VIEW, id: NavigationId.TUFT_ORDER, ...shared}),\n Factory.createPrototypeComponentRoute(\n AddTuftProductionOrderPageComponent,\n {\n route: 'add',\n requiredPermission: Permission.TEXFAB_TUFT_ORDER_EDIT,\n reuse: true,\n id: NavigationId.ADD_TUFT_ORDER,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddTuftProductionOrderPageComponent,\n {route: 'add/run', requiredPermission: Permission.TEXFAB_TUFT_QUEUE, id: NavigationId.ADD_TUFT_ORDER_RUN, ...shared},\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddTuftProductionOrderPageComponent,\n {\n route: 'add/machine/:id',\n requiredPermission: Permission.TEXFAB_TUFT_ORDER_EDIT,\n id: NavigationId.ADD_TUFT_ORDER_MACHINE,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddTuftProductionOrderPageComponent,\n {route: 'edit/:id', requiredPermission: Permission.TEXFAB_TUFT_ORDER_VIEW, id: NavigationId.EDIT_TUFT_ORDER, ...shared},\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n AddTuftProductionOrderPageComponent,\n {\n route: 'add/:id',\n requiredPermission: Permission.TEXFAB_TUFT_ORDER_EDIT,\n id: NavigationId.DUPLICATE_TUFT_ORDER,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n ),\n Factory.createPrototypeComponentRoute(\n TuftProductionOrderSettingsComponent,\n {\n route: 'settings',\n requiredPermission: Permission.TEXFAB_TUFT_ORDER_VIEW,\n id: NavigationId.TUFT_ORDER_SETTINGS,\n ...shared\n },\n [],\n [canDeactivateRouteWithUnsavedChanges]\n )\n];\n\nexport const tuftProductionOrderRouting: ModuleWithProviders = RouterModule.forChild(tuftProductionOrderRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {CustomSettings} from '@domain/custom-settings/custom-settings';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {NameGeneratorPartType} from '@domain/custom-settings/name-generator-part-type.enum';\nimport {HttpBuggyCustomSettingsService} from '@infrastructure/http/buggy/http-buggy-custom-settings.service';\nimport {BaseComponent, NavigationHelperPrototypeService, TabsMenuItem, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './buggy-custom-settings.component.html'\n})\nexport class BuggyCustomSettingsComponent extends BaseComponent implements OnInit {\n protected nameGenerationProperties: NameGeneratorProperty[];\n protected settingsForm = new FormGroup({\n nameGenerator: new FormControl(null)\n });\n\n protected BUGGY_SETTINGS_TRANSLATION_KEY = 'PLANNING.BUGGY.BUGGY';\n\n protected generalTab: TabsMenuItem = {\n value: 'generalTab',\n translationKey: 'GENERAL.GENERAL',\n form: this.settingsForm\n };\n\n public constructor(\n private readonly httpBuggyCustomSettings: HttpBuggyCustomSettingsService,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.getInitialCustomSettings();\n }\n\n protected closeDialog(): void {\n this.navigationHelper.navigateBack();\n }\n\n protected save(): void {\n this.httpBuggyCustomSettings\n .save(new CustomSettings(undefined, this.settingsForm.controls.nameGenerator.value))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.closeDialog();\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.UPDATED_OBJECT_WITHOUT_NAME', {object: 'GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS'})\n });\n });\n }\n\n private getInitialCustomSettings(): void {\n forkJoin([this.httpBuggyCustomSettings.get(), this.httpBuggyCustomSettings.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([customSettings, nameGenerationProperties]: [CustomSettings, NameGeneratorProperty[]]) => {\n this.settingsForm.controls.nameGenerator.patchValue(customSettings.nameGenerator);\n\n // TODO BMSMC-6924: remove filter once name generation input is implemented\n this.nameGenerationProperties = nameGenerationProperties.filter((property: NameGeneratorProperty) => property.type !== NameGeneratorPartType.PROPERTY_VALUE);\n });\n }\n}\n","
\n \n\n
\n \n \n
\n","
\n @if (canShowHeader) {\n
\n \n \n \n \n
\n }\n\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {BuggyForProductionSchedule} from '@domain/production-schedule/buggy-for-production-schedule';\nimport {BuggyNameGenerationView} from '@domain/production-schedule/buggy-name-generation-view-type';\nimport {HttpBuggyCustomSettingsService} from '@infrastructure/http/buggy/http-buggy-custom-settings.service';\nimport {HttpBuggyService} from '@infrastructure/http/buggy/http-buggy.service';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ContentSwitcherNavigationInput,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n NavigationHelperPrototypeService,\n SaveType,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {finalize, Observable, Subject, takeUntil} from 'rxjs';\nimport {TextileService} from '../../textile-data-overview/textile.service';\nimport {TextileDataType} from '../../textile-data-type.enum';\nimport {BuggyCustomSettingsComponent} from '../custom-settings/buggy-custom-settings.component';\n\n@Component({\n templateUrl: 'add-buggy.component.html',\n styleUrl: 'add-buggy.component.scss'\n})\nexport class AddBuggyComponent extends BaseComponent implements OnInit {\n @Input() public pageType: PageTypeEnum;\n @Input() public itemId: number;\n @Input() public canShowHeader: boolean = false;\n\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_BUGGY;\n public readonly SAVE_TYPE = SaveType;\n public readonly BUGGY_TRANSLATION_KEY = 'PLANNING.BUGGY.BUGGY';\n\n public addBuggyGeneralForm: FormGroup<{name: FormControl}>;\n public selectedMenuItem: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL'};\n\n protected buggyToSave: BuggyForProductionSchedule;\n protected customSettingsUpdated: Subject = new Subject();\n protected buggyNameGenerationView: BuggyNameGenerationView = {\n creelName: null,\n machineName: null,\n machineQualityName: null\n };\n\n public constructor(\n @Inject(DOCUMENT) private document: Document,\n private readonly router: Router,\n private readonly formBuilder: FormBuilder,\n private readonly buggies: HttpBuggyService,\n protected readonly httpBuggyCustomSettings: HttpBuggyCustomSettingsService,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService,\n protected readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly removeConfirmation: RemoveConfirmationService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setGeneralFormFields();\n this.getBuggy();\n\n this.addBuggyGeneralForm.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((_: any) => {\n this.buggyToSave = this.getCurrentBuggy();\n });\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.addBuggyGeneralForm], this.document);\n if (isValid) {\n this.saving = true;\n\n const request: Observable = this.isEditingBuggy() ? this.buggies.update(this.buggyToSave) : this.buggies.save(this.buggyToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n if (saveType === SaveType.SAVE_AND_CLOSE) {\n this.buggyToSave.id = id;\n\n this.navigationHelper.navigateBack(this.isEditingBuggy() ? [] : this.buggyToSave);\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.setGeneralFormFields();\n }\n return;\n }\n\n this.textileService.navigateAndShowToast(saveType, TextileDataType.BUGGY, this.BUGGY_TRANSLATION_KEY, this.isEditingBuggy(), this.buggyToSave.name, id);\n },\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingBuggy() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public get createdObject(): string {\n return !AssertionUtils.isNullOrUndefined(this.addBuggyGeneralForm.controls.name.value) ? this.addBuggyGeneralForm.controls.name.value : '';\n }\n\n public isEditingBuggy(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.EDIT;\n }\n\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texStyle.buggy.editBuggy.path;\n }\n\n public duplicateBuggy(): void {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: AddBuggyComponent,\n componentInputs: {pageType: PageTypeEnum.DUPLICATE, itemId: this.itemId}\n }\n });\n return;\n }\n\n this.router.navigateByUrl(RouteUtils.paths.texStyle.buggy.duplicateBuggy.absolutePath.replace(':id', this.itemId.toString()));\n }\n\n public cancel(): void {\n this.navigationHelper.navigateBack(this.buggyToSave);\n }\n\n public deleteBuggy(): void {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n this.removeConfirmation.open(this.buggyToSave, this.buggies.delete(this.itemId), this.BUGGY_TRANSLATION_KEY, null, null, true);\n return;\n }\n\n this.textileService.removeConfirmation(this.getCurrentBuggy(), TextileDataType.BUGGY, false, null, this.buggies);\n }\n\n public getLoadLink(): string {\n return ErrorHandlers.getLoadLink(RouteUtils.paths.texStyle.buggy.editBuggy.absolutePath, this.addBuggyGeneralForm.controls.name);\n }\n\n public getLoadEntry(): ContentSwitcherNavigationInput {\n return {\n componentInfo: {\n component: AddBuggyComponent,\n componentInputs: {pageType: PageTypeEnum.EDIT, itemId: this.addBuggyGeneralForm?.controls?.name?.errors?.entityId, canShowHeader: true}\n }\n };\n }\n\n protected applyNameSuggestion(suggestion: string): void {\n this.addBuggyGeneralForm.controls.name.patchValue(suggestion);\n }\n\n protected async openCustomSettings(): Promise {\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: BuggyCustomSettingsComponent\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.customSettingsUpdated.next());\n }\n\n private setGeneralFormFields(): void {\n this.addBuggyGeneralForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.buggies, null))\n });\n\n this.selectedMenuItem.form = this.addBuggyGeneralForm;\n }\n\n private setFormValues(buggy: BuggyForProductionSchedule): void {\n this.addBuggyGeneralForm.reset({\n name: this.isDuplicatingBuggy() ? null : buggy.name\n });\n\n if (this.isEditingBuggy()) {\n this.addBuggyGeneralForm.controls.name.setAsyncValidators([AsyncUniqueValidator.createValidator(this.buggies, buggy.name)]);\n this.addBuggyGeneralForm.controls.name.updateValueAndValidity();\n }\n }\n\n private getCurrentBuggy(): BuggyForProductionSchedule {\n return new BuggyForProductionSchedule(this.isEditingBuggy() ? this.itemId : null, this.addBuggyGeneralForm.value.name);\n }\n\n private getBuggy(): void {\n const id = this.activatedRoute.snapshot.params.id ?? this.itemId;\n\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.buggies\n .getById(Number(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((buggy: BuggyForProductionSchedule) => {\n this.itemId = buggy.id;\n this.setFormValues(buggy);\n });\n }\n }\n\n private isDuplicatingBuggy(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.DUPLICATE;\n }\n\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texStyle.buggy.duplicateBuggy.path;\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {object: this.translate.instant(this.BUGGY_TRANSLATION_KEY)}),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddBuggyComponent} from './add/add-buggy.component';\nimport {BuggyOverviewPageComponent} from './overview/buggy-overview-page.component';\n\nconst shared = {parentId: NavigationId.BUGGY_MODULE};\n\nexport const buggyRoutes = [\n AuthorizedRouteFactory.createPrototypeComponentRoute(BuggyOverviewPageComponent, {\n route: '',\n requiredPermission: Permission.VIEW_BUGGIES,\n reuse: true,\n id: NavigationId.BUGGY,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddBuggyComponent, {\n route: 'add',\n requiredPermission: Permission.EDIT_BUGGIES,\n reuse: true,\n id: NavigationId.ADD_BUGGY,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddBuggyComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.VIEW_BUGGIES,\n id: NavigationId.EDIT_BUGGY,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddBuggyComponent, {\n route: 'add/:id',\n requiredPermission: Permission.EDIT_BUGGIES,\n id: NavigationId.DUPLICATE_BUGGY,\n ...shared\n })\n];\n\nexport const buggyRouting: ModuleWithProviders = RouterModule.forChild(buggyRoutes);\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {PrintDocument} from '@application/command/print-document';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {BuggyForProductionSchedule} from '@domain/production-schedule/buggy-for-production-schedule';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {HttpBuggyService} from '@infrastructure/http/buggy/http-buggy.service';\nimport {\n AssertionUtils,\n BaseComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n RouteNavigationInput,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {finalize, forkJoin, takeUntil} from 'rxjs';\nimport {TextileService} from '../../textile-data-overview/textile.service';\nimport {TextileDataType} from '../../textile-data-type.enum';\nimport {BuggyCustomSettingsComponent} from '../custom-settings/buggy-custom-settings.component';\nimport {BuggyOverviewService} from './buggy-overview.service';\n\n@Component({\n templateUrl: './buggy-overview-page.component.html'\n})\nexport class BuggyOverviewPageComponent extends BaseComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls('buggy');\n private readonly printBuggyOverviewPermission: Permission = Permission.PRINT_BUGGY_OVERVIEW;\n private hasPrintBuggyOverviewPermission: boolean;\n private isPrintingBuggyReport: boolean = false;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly crudOverviewDataBuilderFactory: CrudOverviewDataBuilderFactoryService,\n private readonly buggies: HttpBuggyService,\n private readonly router: Router,\n private readonly textileService: TextileService,\n private readonly buggyOverviewService: BuggyOverviewService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly translate: TranslateService,\n private readonly printDocument: PrintDocument,\n private readonly navigationHelperService: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const colDefs = this.buggyOverviewService.getColumnDefs();\n\n this.hasPrintBuggyOverviewPermission = this.authentication.getCurrentSubscription()?.hasPermission(this.printBuggyOverviewPermission) ?? false;\n\n this.config = this.crudOverviewDataBuilderFactory\n .getBuilder()\n .withExtraActions(\n this.hasPrintBuggyOverviewPermission\n ? [\n {\n title: this.translate.instant('PLANNING.BUGGY.PRINT_BUGGY_REPORT'),\n onlySingleSelection: true,\n closeMenuOnClick: true,\n onClick: (grid: AgGridAngular): void => this.printOverviewForSelectedBuggy(grid)\n }\n ]\n : []\n )\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: RouteUtils.paths.texStyle.buggy.editBuggy.requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: false\n } as CrudActions)\n })\n .withCrudGridOptions(colDefs, GridIdentifier.BUGGY, null, (builder: GridOptionsBuilder) => this.buggyOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false).build())\n .withRowData(this.buggies.getAll())\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .withEntityName('PLANNING.BUGGY.BUGGY')\n .withCustomSettingsClicked(() => this.openCustomSettings())\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n const componentInfo = {\n route: this.pageUrls[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id)\n } as RouteNavigationInput;\n\n this.navigationHelperService.navigateWithRoute(componentInfo);\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.textileService.removeConfirmation(AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0] : rowNode.data, TextileDataType.BUGGY, false, null, this.buggies);\n }\n\n public printOverviewForSelectedBuggy(grid: AgGridAngular): void {\n if (!this.isPrintingBuggyReport && this.hasPrintBuggyOverviewPermission) {\n const selectedBuggy = grid?.api?.getSelectedRows()[0];\n\n if (!AssertionUtils.isNullOrUndefined(selectedBuggy) && selectedBuggy instanceof BuggyForProductionSchedule) {\n this.isPrintingBuggyReport = true;\n forkJoin([this.buggies.getBuggyReportXML(Number(selectedBuggy.id)), this.buggies.getBuggyReportXSLT()])\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n finalize(() => (this.isPrintingBuggyReport = false))\n )\n .subscribe(([xml, xslt]: [string, string]) => {\n this.printDocument.execute([xml, xslt]);\n });\n }\n }\n }\n\n private openCustomSettings(): void {\n this.navigationHelperService.navigateWithContentSwitcher({\n componentInfo: {\n component: BuggyCustomSettingsComponent\n }\n });\n }\n}\n","\n","import {Injectable} from '@angular/core';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {BuggyForProductionSchedule} from '@domain/production-schedule/buggy-for-production-schedule';\nimport {\n AgGridUtils,\n ColDefBuilderFactoryService,\n ContentSwitcherNavigationInput,\n CrudColdef,\n GridOptionsBuilder,\n LinkIconRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams, ValueGetterParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {Subject} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class BuggyOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly l10nIntlService: L10nIntlService\n ) {}\n\n public getColumnDefs(withLinkIcon: boolean = true, rowActionsComplete?: Subject): CrudColdef {\n let nameColDef = this.colDefBuilderFactoryService.getBuilder().withColIdAndField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator);\n\n if (withLinkIcon) {\n const editRoute = NavigationUtils.getNavigationRoute(NavigationId.EDIT_BUGGY);\n\n nameColDef = nameColDef.withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: NavigationUtils.getAbsolutePath(editRoute.data.id),\n rowActionsComplete,\n contentSwitcherEntry: {componentInfo: {component: editRoute.component}, data: editRoute.data} as ContentSwitcherNavigationInput\n };\n });\n }\n\n return {\n colDefs: [\n nameColDef.build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('amountPlannedInPicks')\n .withNumericMultiFilter()\n .withHeaderName('ORDERBOOK.PLANNED_PICKS')\n .withValueGetter((params: ValueGetterParams) => +params.data.amountPlannedInPicks.toFixed(2))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => AgGridUtils.buildAgGridCellTextWithUnit(params.value, Unit.PICKS, this.l10nIntlService))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('amountPlannedInMeter')\n .withNumericMultiFilter()\n .withHeaderName('ORDERBOOK.PLANNED_METERS')\n .withValueGetter((params: ValueGetterParams) => +params.data.amountPlannedInMeter.toFixed(2))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => AgGridUtils.buildAgGridCellTextWithUnit(params.value, Unit.METER, this.l10nIntlService))\n .build()\n ],\n rowActionsComplete\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('PLANNING.BUGGY.BUGGY'),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {ColorSets, COLOR_SETS} from '@infrastructure/http/color-set/color-sets';\nimport {AssertionUtils, BaseComponent, ObjectUtils} from '@vdw/angular-component-library';\nimport {isEqual, isNil, isUndefined} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {NavigationAddMaterialSetPageData} from '../../material-set/add/navigation-add-material-set-page-data.type';\nimport {NavigationMaterialSetData} from '../../material-set/add/navigation-material-set-data.interface';\n\n@Component({\n templateUrl: './add-color-set-page.component.html'\n})\nexport class AddColorSetPageComponent extends BaseComponent implements OnInit {\n public static urlToColorSetOverview = RouteUtils.paths.texStyle.colorSet.absolutePath;\n public static urlToEditColorSet = RouteUtils.paths.texStyle.colorSet.editColorSet.path;\n public static urlToDuplicateColorSet = RouteUtils.paths.texStyle.colorSet.duplicateColorSet.path;\n\n public colorSetToSave: ColorSet;\n public hasColorSetState = false;\n\n private urlParams: Params;\n\n public constructor(\n @Inject(COLOR_SETS) public readonly colorSets: ColorSets,\n private readonly activatedRoute: ActivatedRoute,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.urlParams = this.activatedRoute.snapshot.params;\n this.initialiseAddColorSetPage();\n }\n\n private initialiseAddColorSetPage(): void {\n const emptyColorSetState = {materialSet: null} as NavigationMaterialSetData;\n const colorSetState = this.navigationHelperService.getPartialState(Object.keys(emptyColorSetState));\n\n if (!AssertionUtils.isNullOrUndefined(colorSetState) && !ObjectUtils.isDeepEqual(colorSetState, emptyColorSetState)) {\n this.colorSetToSave = colorSetState.materialSet as ColorSet;\n this.hasColorSetState = true;\n } else if (this.isDuplicatingColorSet() || this.isEditingColorSet()) {\n this.colorSets\n .getById(Number(this.urlParams.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (colorSet: ColorSet) => (this.colorSetToSave = colorSet),\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, AddColorSetPageComponent.urlToColorSetOverview)\n });\n } else {\n this.colorSetToSave = ColorSet.createEmptyColorSet();\n }\n }\n\n private isEditingColorSet(): boolean {\n return !isNil(this.activatedRoute.snapshot.routeConfig) && isEqual(this.activatedRoute.snapshot.routeConfig.path, AddColorSetPageComponent.urlToEditColorSet) && !isUndefined(this.urlParams.id);\n }\n\n private isDuplicatingColorSet(): boolean {\n return (\n !isNil(this.activatedRoute.snapshot.routeConfig) && isEqual(this.activatedRoute.snapshot.routeConfig.path, AddColorSetPageComponent.urlToDuplicateColorSet) && !isUndefined(this.urlParams.id)\n );\n }\n}\n","\n","import {Component, Inject} from '@angular/core';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\n\n@Component({\n templateUrl: './grid-color-set-preview.component.html',\n styleUrls: ['./grid-color-set-preview.component.scss']\n})\nexport class GridColorSetPreviewComponent {\n public colorSet: OverviewListColorSet;\n public showDetailColor: boolean;\n\n public constructor(@Inject(RESPONSIVENESS_VIEW_MODE) private responsivenessViewMode: ResponsivenessViewMode) {}\n\n public agInit(params: {data: OverviewListColorSet}): void {\n this.colorSet = params.data;\n this.showDetailColor = !this.isMobile();\n }\n\n private isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n}\n"," \n","import {IdName} from '@domain/id-name';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {MaterialTypeOverviewList, OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {Color} from '@vdw/angular-component-library';\nimport {flatMap, map, uniqBy} from 'lodash-es';\n\nexport class OverviewListColorSet {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _creelPositions: OverviewListCreelPosition[];\n private readonly _alternatives: IdName[];\n private readonly _technicalCode: string;\n\n public constructor(id: number, name: string, creelPositions: OverviewListCreelPosition[], alternatives?: IdName[], technicalCode?: string) {\n this._id = id;\n this._name = name;\n this._creelPositions = creelPositions;\n this._alternatives = alternatives;\n this._technicalCode = technicalCode;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get creelPositions(): OverviewListCreelPosition[] {\n return this._creelPositions;\n }\n\n public get alternatives(): IdName[] {\n return this._alternatives;\n }\n\n public get technicalCode(): string {\n return this._technicalCode;\n }\n\n public static fromJSON(colorSetOverviewListJSON: any): OverviewListColorSet {\n return new OverviewListColorSet(\n colorSetOverviewListJSON.id,\n colorSetOverviewListJSON.name,\n map(colorSetOverviewListJSON.creelPositions, (creelPositionJSON: any) => {\n return new OverviewListCreelPosition(\n map(creelPositionJSON.creel, (itemJSON: any) => {\n return Color.fromJSON(itemJSON);\n }),\n creelPositionJSON.creelPosition,\n creelPositionJSON.percentageOfColorsInDrawingImage,\n creelPositionJSON.needsToBeFromSameBath\n );\n }),\n colorSetOverviewListJSON.alternativeColorSets?.map((alternativeColorSetJSON: any) => IdName.fromJSON(alternativeColorSetJSON)),\n colorSetOverviewListJSON.technicalCode\n );\n }\n\n public static fromColorSet(colorSet: ColorSet): OverviewListColorSet {\n return new OverviewListColorSet(\n colorSet.id,\n colorSet.name,\n map(colorSet.creelPositions, (creelPosition: CreelPosition, index: number) => {\n return OverviewListCreelPosition.fromCreelPosition(creelPosition, index + 1);\n })\n );\n }\n\n public getUniqueColors(): Color[] {\n return uniqBy(\n flatMap(this.creelPositions, (creelPosition: OverviewListCreelPosition) => {\n return creelPosition.items;\n }) as Color[],\n 'id'\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n creelPositions: map(this.creelPositions, (creelPosition: OverviewListCreelPosition) => {\n return {\n creelPosition: creelPosition.position,\n creel: map(creelPosition.items, (materialType: MaterialTypeOverviewList) => materialType.toJSON()),\n needsToBeFromSameBath: creelPosition.needsToBeFromSameBath,\n percentageOfColorsInDrawingImage: creelPosition.percentageOfColorsInDrawingImage\n } as any as JSON;\n })\n } as any as JSON;\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {COLORS, Colors} from '@infrastructure/http/color/colors';\nimport {\n Color,\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridOptionsBuilder,\n NavigationHelperPrototypeService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {ColorOverviewService} from './overview/color-overview.service';\n\n@Injectable()\nexport class ColorSelectionService {\n private config: CrudOverviewDataConfig;\n\n public constructor(\n @Inject(COLORS) private readonly colors: Colors,\n private readonly overview: ColorOverviewService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n this.init();\n }\n\n public init(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName('TEXTILE_DATA.COLOR.COLOR')\n .withRowData(this.colors.getAll())\n .withCrudGridOptions(this.overview.getColumnDefs(false), GridIdentifier.COLOR_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: Color): Observable {\n this.config.rowData = null;\n this.config.selectedObjects = [inputValue];\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {Colors, COLORS} from '@infrastructure/http/color/colors';\nimport {AssertionUtils, ColDefBuilderFactoryService, CrudColdef, GridOptionsBuilder, NoDataOverlayComponentParams, OverlayComponentParams, TranslateService} from '@vdw/angular-component-library';\nimport {ColDef, ValueGetterParams} from 'ag-grid-community';\nimport {Observable, Subject, takeUntil} from 'rxjs';\nimport {GridColorPreviewComponent} from './grid-color-preview/grid-color-preview.component';\n\n@Injectable()\nexport class ColorOverviewService {\n public constructor(\n @Inject(COLORS) private readonly colors: Colors,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(withLinkIcon: boolean = true, unSubscribeOnViewDestroy?: Subject): CrudColdef {\n let nameColDef = this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('name')\n .withHeaderNameAndClass('GENERAL.NAME', 'cursor-default')\n .withCellRenderer(GridColorPreviewComponent, {showRGBValue: false, enableClickableName: withLinkIcon, editPageUrl: LastModifiedCardUtils.getPageUrls('color').edit})\n .withTooltipField('name')\n .withFilterValueGetter((params: ValueGetterParams) => (params.data?.name ? params.data.name : ''));\n\n let descriptionColDef = this.colDefBuilderFactoryService.getBuilder().withColIdAndField('description', true).withHeaderName('TEXTILE_DATA.COLOR.DESCRIPTION').withSortable(false);\n\n if (!AssertionUtils.isNullOrUndefined(unSubscribeOnViewDestroy)) {\n nameColDef = nameColDef.withTextMultiFilter(unSubscribeOnViewDestroy ? this.getPossibleColumnsValues('name', unSubscribeOnViewDestroy) : null);\n descriptionColDef = descriptionColDef.withTextMultiFilter(this.getPossibleColumnsValues('description', unSubscribeOnViewDestroy), undefined, true);\n }\n\n return {\n colDefs: [\n nameColDef.build(),\n this.getColorColDef('red', unSubscribeOnViewDestroy),\n this.getColorColDef('green', unSubscribeOnViewDestroy),\n this.getColorColDef('blue', unSubscribeOnViewDestroy),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('shade').withHeaderName('TEXTILE_DATA.COLOR.SHADE').withoutFilter().build(),\n descriptionColDef.build()\n ],\n rowActionsComplete: null\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('TEXTILE_DATA.COLOR.COLOR', {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n\n private getPossibleColumnsValues(columnIdentifier: string, unSubscribeOnViewDestroy: Subject): Observable {\n return this.colors.getPossibleValues(columnIdentifier).pipe(takeUntil(unSubscribeOnViewDestroy));\n }\n\n private getColorColDef(color: string, unSubscribeOnViewDestroy?: Subject): ColDef {\n let colorColDef = this.colDefBuilderFactoryService.getBuilder().withColId(color).withField(`rgb.${color}`).withHeaderName(`TEXTILE_DATA.COLOR.${color.toUpperCase()}`);\n\n if (!AssertionUtils.isNullOrUndefined(unSubscribeOnViewDestroy)) {\n colorColDef = colorColDef.withNumericMultiFilter(this.getPossibleColumnsValues(color, unSubscribeOnViewDestroy));\n }\n\n return colorColDef.build();\n }\n}\n","@if (canShowColorPreview()) {\n \n}\n","import {Component} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridColorPreviewCellRendererParams} from '@presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview-cell-renderer-params';\nimport {AssertionUtils, Color} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {IRowNode} from 'ag-grid-community';\n\n@Component({\n selector: 'app-grid-color-preview',\n templateUrl: './grid-color-preview.component.html',\n styleUrls: ['./grid-color-preview.component.scss']\n})\nexport class GridColorPreviewComponent implements ICellRendererAngularComp {\n public showRGBValue = false;\n public color: Color;\n public node: IRowNode;\n public hasMultipleSelection = false;\n public isRuleCondition = false;\n public enableClickableName = false;\n public editPageUrl: string;\n\n public constructor(private readonly router: Router) {}\n\n public agInit(params: GridColorPreviewCellRendererParams): void {\n this.node = params.node;\n this.color = params.color ?? this.getColorFromParams(params);\n this.showRGBValue = params.showRGBValue;\n this.hasMultipleSelection = params?.hasMultipleSelection;\n this.isRuleCondition = params?.isRuleCondition;\n this.enableClickableName = params?.enableClickableName;\n this.editPageUrl = params?.editPageUrl?.replace(':id', params.id ?? params.data.id.toString());\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public getReadableLabelForRGB(): string {\n if (!AssertionUtils.isNullOrUndefined(this.color.rgb)) {\n return Object.values(this.color.rgb).join(', ');\n }\n return '';\n }\n\n public canShowColorPreview(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.color);\n }\n\n private getColorFromParams(params: GridColorPreviewCellRendererParams): Color {\n if (params.data instanceof Color) {\n return params.data;\n }\n return params.value;\n }\n}\n","
\n
\n
\n
\n \n \n {{ color?.getRgbAsCommaSeparatedValue() }}\n
\n
\n
\n","import {AfterViewChecked, ChangeDetectorRef, Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {Color} from '@vdw/angular-component-library';\nimport {isUndefined} from 'lodash-es';\n\n@Component({\n selector: 'app-color-grid-preview',\n templateUrl: './color-grid-preview.component.html',\n styleUrls: ['./color-grid-preview.component.scss']\n})\nexport class ColorGridPreviewComponent implements AfterViewChecked {\n @Input() public colors: Color[];\n @Input() public showRgbValues = true;\n @Input() public showLabel = true;\n @Input() public tooltipDisabled = false;\n @ViewChild('name') public name: ElementRef;\n public showTooltip = false;\n private readonly changeDetectorRef: ChangeDetectorRef;\n\n public constructor(changeDetectorRef: ChangeDetectorRef) {\n this.changeDetectorRef = changeDetectorRef;\n }\n\n public trackByColorId = (index: number, color: Color): number => color?.id;\n\n public ngAfterViewChecked(): void {\n this.showTooltip = this.canShowTooltip();\n this.changeDetectorRef.detectChanges();\n }\n\n public getTooltipForColor(color: Color): string {\n return this.showRgbValues ? color?.name : color?.getRgbAsCommaSeparatedValue();\n }\n\n private canShowTooltip(): boolean {\n return !isUndefined(this.name) && this.name?.nativeElement.offsetWidth < this.name?.nativeElement.scrollWidth;\n }\n}\n","import {Component} from '@angular/core';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {Color} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\n\n@Component({\n templateUrl: './grid-colors-of-creel-position.component.html',\n styleUrls: ['./grid-colors-of-creel-position.component.scss']\n})\nexport class GridColorsOfCreelPositionComponent implements ICellRendererAngularComp {\n public colors: Color[];\n public showRgbValues: boolean;\n\n public agInit(params: any): void {\n const creelPositionForColors: CreelPosition | OverviewListCreelPosition = params.data.creelPositionForColors ?? params.data.creelPositionWithColorsAndYarnTypes.creelPositionForColors;\n\n this.showRgbValues = (creelPositionForColors as any).showRgbValues ?? true;\n this.colors = creelPositionForColors instanceof CreelPosition ? (creelPositionForColors.getSortedItems() as Color[]) : (creelPositionForColors.items as Color[]);\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","\n","
\n \n ({{ position }})\n
\n","import {Component} from '@angular/core';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\n\n@Component({\n templateUrl: './grid-yarn-types-of-creel-position.component.html',\n styleUrls: ['./grid-yarn-types-of-creel-position.component.scss']\n})\nexport class GridYarnTypesOfCreelPositionComponent implements ICellRendererAngularComp {\n public yarnTypes: OverviewListYarnType[];\n public position: number;\n public isCreelPositionDifferentFromTheoreticalCreel = false;\n\n public agInit(params: any): void {\n const creelPositionForYarnTypes: CreelPosition | OverviewListCreelPosition = params.data.creelPositionForYarnTypes ?? params.data.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes;\n this.yarnTypes =\n creelPositionForYarnTypes instanceof CreelPosition ? (creelPositionForYarnTypes.getSortedItems() as OverviewListYarnType[]) : (creelPositionForYarnTypes.items as OverviewListYarnType[]);\n\n if (params.isCreelPositionDifferentFromTheoreticalCreel) {\n this.isCreelPositionDifferentFromTheoreticalCreel = params.isCreelPositionDifferentFromTheoreticalCreel;\n this.position = (creelPositionForYarnTypes as OverviewListCreelPosition).position;\n }\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","
\n
\n {{ yarnType.name }}\n {{ yarnType.getFirstRawMaterial() }}\n
\n
\n","import {AfterViewChecked, ChangeDetectorRef, Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {isUndefined} from 'lodash-es';\n\n@Component({\n selector: 'app-yarn-type-grid-preview',\n templateUrl: './yarn-type-grid-preview.component.html',\n styleUrls: ['./yarn-type-grid-preview.component.scss']\n})\nexport class YarnTypeGridPreviewComponent implements AfterViewChecked {\n @Input() public yarnTypes: YarnType[];\n @Input() public showFirstRawMaterial = true;\n @Input() public tooltipDisabled = false;\n @ViewChild('name') public name: ElementRef;\n public showTooltip = false;\n private readonly changeDetectorRef: ChangeDetectorRef;\n\n public constructor(changeDetectorRef: ChangeDetectorRef) {\n this.changeDetectorRef = changeDetectorRef;\n }\n\n public ngAfterViewChecked(): void {\n this.showTooltip = this.canShowTooltip();\n this.changeDetectorRef.detectChanges();\n }\n\n private canShowTooltip(): boolean {\n return !isUndefined(this.name) && this.name.nativeElement.offsetWidth < this.name.nativeElement.scrollWidth && !this.tooltipDisabled;\n }\n}\n"," \n","import {Component, Inject} from '@angular/core';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './grid-colored-yarn-set-preview.component.html',\n styleUrls: ['./grid-colored-yarn-set-preview.component.scss']\n})\nexport class GridColoredYarnSetPreviewComponent implements ICellRendererAngularComp {\n public coloredYarnSet: OverviewListColoredYarnSet;\n public canShowDetailColor: boolean;\n\n public constructor(@Inject(RESPONSIVENESS_VIEW_MODE) private responsivenessViewMode: ResponsivenessViewMode) {}\n\n public agInit(params: ICellRendererParams): void {\n this.coloredYarnSet = params.value;\n this.canShowDetailColor = !this.isMobile();\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n private isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n}\n","import {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {isNil} from 'lodash-es';\n\nexport class OverviewListColoredYarnSet {\n private _id: number;\n private readonly _name: string;\n private _overviewListColorSet: OverviewListColorSet;\n private _overviewListYarnSet: OverviewListYarnSet;\n private readonly _used: boolean;\n\n public constructor(id: number, name: string, colorSet: OverviewListColorSet, yarnSet: OverviewListYarnSet, used: boolean) {\n this._id = id;\n this._name = name;\n this._overviewListColorSet = colorSet;\n this._overviewListYarnSet = yarnSet;\n this._used = used;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(value: number) {\n this._id = value;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get overviewListColorSet(): OverviewListColorSet {\n return this._overviewListColorSet;\n }\n\n public set overviewListColorSet(overviewListColorSet: OverviewListColorSet) {\n this._overviewListColorSet = overviewListColorSet;\n }\n\n public get overviewListYarnSet(): OverviewListYarnSet {\n return this._overviewListYarnSet;\n }\n\n public set overviewListYarnSet(overviewListYarnSet: OverviewListYarnSet) {\n this._overviewListYarnSet = overviewListYarnSet;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public static fromJSON(coloredYarnSetOverviewListJSON: any): OverviewListColoredYarnSet {\n return new OverviewListColoredYarnSet(\n coloredYarnSetOverviewListJSON.id,\n coloredYarnSetOverviewListJSON.name,\n isNil(coloredYarnSetOverviewListJSON.colorSet) ? null : OverviewListColorSet.fromJSON(coloredYarnSetOverviewListJSON.colorSet),\n isNil(coloredYarnSetOverviewListJSON.yarnSet) ? null : OverviewListYarnSet.fromJSON(coloredYarnSetOverviewListJSON.yarnSet),\n coloredYarnSetOverviewListJSON.used\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n colorSet: this._overviewListColorSet.toJSON(),\n yarnSet: isNil(this._overviewListYarnSet) ? null : this._overviewListYarnSet.toJSON(),\n used: this._used\n } as any as JSON;\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","export enum PreviewType {\n COLOR,\n YARN_TYPE\n}\n","\n","import {ChangeDetectorRef, Component, Inject} from '@angular/core';\nimport {SourceElementUtils} from '@application/helper/source-element-utils';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {RepositionDialogData} from '@presentation/components/reposition-dialog/reposition-dialog-data.interface';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {TextileDataDetailDialogData} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail-dialog-data.interface';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {DialogBuilderFactoryService, ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE, TranslateService} from '@vdw/angular-component-library';\nimport {ICellEditorAngularComp} from 'ag-grid-angular';\nimport {ICellEditorParams} from 'ag-grid-community';\nimport {isNil, map} from 'lodash-es';\n\n@Component({\n templateUrl: './grid-creel-preview.component.html',\n styleUrls: ['./grid-creel-preview.component.scss']\n})\nexport class GridCreelPreviewComponent implements ICellEditorAngularComp {\n public listOfColoredYarnSets: OverviewListColoredYarnSet[];\n public value: OverviewListColoredYarnSetWithStartDent[];\n\n public constructor(\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n @Inject(RESPONSIVENESS_VIEW_MODE) protected responsivenessViewMode: ResponsivenessViewMode,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {}\n\n public agInit(params: ICellEditorParams): void {\n this.value = params.value;\n this.setListOfColoredYarnSets();\n }\n\n public getValue(): OverviewListColoredYarnSetWithStartDent[] {\n return this.value;\n }\n\n public getStartDent(index: number): number {\n return this.listOfColoredYarnSets.length > 1 ? this.value[index].startDent : null;\n }\n\n public showColoredYarnSetDetails(data: {colorList: OverviewListColorSet | OverviewListColoredYarnSet; event: MouseEvent}, index: number): void {\n if (!this.isMobile()) {\n const colorAmountExceedsEight = data.colorList instanceof OverviewListColorSet && data.colorList.creelPositions.length > 8;\n const coloredYarnSetAmountExceedsEight = data.colorList instanceof OverviewListColoredYarnSet && data.colorList.overviewListColorSet.creelPositions.length > 8;\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .withClass(['reposition-dialog', colorAmountExceedsEight || coloredYarnSetAmountExceedsEight ? 'colored-list-dialog' : ''])\n .withWidth('706px')\n .openDialog(RepositionDialogComponent, this.getDialogDataForColoredYarnSetDetailsDialog(data, index));\n }\n }\n\n protected getDialogDataForColoredYarnSetDetailsDialog(\n data: {colorList: OverviewListColorSet | OverviewListColoredYarnSet; event: MouseEvent},\n index: number\n ): RepositionDialogData & TextileDataDetailDialogData {\n const {colorList, event} = data;\n const coloredYarnSet: OverviewListColoredYarnSetWithStartDent = this.getValue()[index];\n\n return {\n textileData: colorList,\n textileDataAmount: this.getTextileDataAmount(coloredYarnSet),\n component: TextileDataDetailComponent,\n sourceElement: SourceElementUtils.findSourceElementForDialog(\n event,\n this.listOfColoredYarnSets.length <= 1 ? 'color-list-preview-container' : 'color-list-multiple-preview-containers',\n PositionOfDialog.LEFT\n ),\n positionOfDialog: PositionOfDialog.LEFT\n };\n }\n\n private isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n\n private setListOfColoredYarnSets(): void {\n this.listOfColoredYarnSets = map(this.getValue(), (coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) => coloredYarnSetWithStartDent.coloredYarnSet);\n this.changeDetectorRef.detectChanges();\n }\n\n private getTextileDataAmount(coloredYarnSet: OverviewListColoredYarnSetWithStartDent): string {\n let widthInDents: number;\n\n if (coloredYarnSet instanceof OverviewListColoredYarnSetWithStartDent) {\n widthInDents = coloredYarnSet.technicalWidthInDents;\n }\n\n const startDentText = `${this.translate.instant('GENERAL.START_DENT')}: ${coloredYarnSet.startDent}`;\n let textileDataAmount: string;\n\n if (!isNil(widthInDents)) {\n const widthInDentsText = `${this.translate.instant('GENERAL.WIDTH_IN_DENTS')}: ${widthInDents}`;\n textileDataAmount = `${startDentText}, ${widthInDentsText}`;\n } else {\n textileDataAmount = startDentText;\n }\n\n return textileDataAmount;\n }\n}\n","import {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListColoredYarnSetWithStartDent} from '@domain/textile-data/creel/overview-list-colored-yarn-set-with-start-dent';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {MachineOverviewListHelper} from '@presentation/pages/machine-overview/machine-overview-list-helper';\nimport {ArrayUtils, AssertionUtils} from '@vdw/angular-component-library';\n\nexport class OverviewListCreel {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _coloredYarnSetsWithStartDent: OverviewListColoredYarnSetWithStartDent[];\n private readonly _used: boolean;\n private readonly _usedInPo: boolean;\n private readonly _isColoredYarnSplitPositionedCorrectly: boolean;\n private _mappingForCurrentPositionOnMachine: CreelMap[];\n private _machines: MachineOverviewList[];\n\n public constructor(\n id: number,\n name: string,\n used: boolean,\n usedInPo: boolean,\n isColoredYarnSplitPositionedCorrectly: boolean,\n coloredYarnSetsWithStartDent: OverviewListColoredYarnSetWithStartDent[] = null,\n mappingForCurrentPositionOnMachine: CreelMap[] = null,\n machines: MachineOverviewList[] = []\n ) {\n this._id = id;\n this._name = name;\n this._coloredYarnSetsWithStartDent = coloredYarnSetsWithStartDent;\n this._mappingForCurrentPositionOnMachine = mappingForCurrentPositionOnMachine;\n this._used = used;\n this._usedInPo = usedInPo;\n this._isColoredYarnSplitPositionedCorrectly = isColoredYarnSplitPositionedCorrectly;\n this._machines = machines;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get mappingForCurrentPositionOnMachine(): CreelMap[] {\n return this._mappingForCurrentPositionOnMachine;\n }\n\n public set mappingForCurrentPositionOnMachine(mappingForCurrentPositionOnMachine: CreelMap[]) {\n this._mappingForCurrentPositionOnMachine = mappingForCurrentPositionOnMachine;\n }\n\n public get coloredYarnSetsWithStartDent(): OverviewListColoredYarnSetWithStartDent[] {\n return this._coloredYarnSetsWithStartDent;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public get usedInPo(): boolean {\n return this._usedInPo;\n }\n\n public get isColoredYarnSplitPositionedCorrectly(): boolean {\n return this._isColoredYarnSplitPositionedCorrectly;\n }\n\n public get machines(): MachineOverviewList[] {\n return this._machines;\n }\n\n public set machines(machines: MachineOverviewList[]) {\n this._machines = machines;\n }\n\n public static fromJSON(creelJSON: any): OverviewListCreel {\n if (AssertionUtils.isNullOrUndefined(creelJSON)) {\n return null;\n }\n return new OverviewListCreel(\n creelJSON.id,\n creelJSON.name,\n creelJSON.used,\n creelJSON.usedInPo,\n creelJSON.isColoredYarnSplitPositionedCorrectly,\n ArrayUtils.toSortedBy(creelJSON.coloredYarnSetsWithStartDents.map(OverviewListColoredYarnSetWithStartDent.fromJSON), (yarnSet: OverviewListColoredYarnSetWithStartDent) => yarnSet.startDent),\n creelJSON.mappingForCurrentPositionOnMachine,\n creelJSON.machines?.map(MachineOverviewListHelper.fromJSON)\n );\n }\n\n public static createEmptyCreel(): OverviewListCreel {\n return new OverviewListCreel(null, '', null, false, null, [], null);\n }\n\n public getColoredYarnSetsName(): string {\n return this._coloredYarnSetsWithStartDent.map((coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) => coloredYarnSetWithStartDent.coloredYarnSet.name).join(', ');\n }\n\n public toJSON(): JSON {\n return {\n name: this._name,\n coloredYarnSetsWithStartDents: this.coloredYarnSetsWithStartDent.map((coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) => {\n return {\n id: coloredYarnSetWithStartDent.coloredYarnSet.id,\n startDent: coloredYarnSetWithStartDent.startDent ?? 0\n };\n }),\n mappingForCurrentPositionOnMachine: this._mappingForCurrentPositionOnMachine,\n machines: this.machines.map((machine: MachineOverviewList) => machine.id)\n } as any as JSON;\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n\n public getOriginalMappingForCurrentPositionOnMachine(): CreelMap[] {\n return this._coloredYarnSetsWithStartDent.map((coloredYarnSetWithStartDent: OverviewListColoredYarnSetWithStartDent) =>\n coloredYarnSetWithStartDent.getOriginalMappingForCurrentPositionOnMachine()\n );\n }\n}\n","import {FinishingLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label';\nimport {FinishingLabelType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label-type.enum';\n\nexport class FinishingAndFinishingTemplateLabelOverviewList {\n private _finishingLabelType: FinishingLabelType;\n\n public constructor(finishingLabelType: FinishingLabelType) {\n this._finishingLabelType = finishingLabelType;\n }\n\n public get finishingLabelType(): FinishingLabelType {\n return this._finishingLabelType;\n }\n\n public static fromJSON(finishingTemplateLabelJSON: any): FinishingAndFinishingTemplateLabelOverviewList {\n return new FinishingAndFinishingTemplateLabelOverviewList(finishingTemplateLabelJSON.finishingLabelType);\n }\n\n public toJSON(): JSON {\n return {\n finishingLabelType: this._finishingLabelType\n } as any as JSON;\n }\n\n public static fromLabel(label: FinishingLabel): FinishingAndFinishingTemplateLabelOverviewList {\n return label ? new FinishingAndFinishingTemplateLabelOverviewList(label.finishingLabelType) : null;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\nimport {IdNameVersion} from '@domain/id-name-version';\nimport {Finishing} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing';\nimport {FinishingCutbarsInformation} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-cutbars-information';\nimport {FinishingLabel} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-label';\nimport {FinishingType} from '@domain/textile-data/finishing-and-finishing-template/finishing/finishing-type.enum';\nimport {FinishingAndFinishingTemplateLabelOverviewList} from '@presentation/pages/textile-data/finishing-template/overview/finishing-and-finishing-template-label-overview-list';\nimport {isNil, map} from 'lodash-es';\n\nexport class OverviewListFinishing {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _version: number;\n private readonly _finishingType: FinishingType;\n private readonly _machineQuality: IdNameVersion;\n private readonly _cutbarsInformation: FinishingCutbarsInformation;\n private readonly _labels: FinishingAndFinishingTemplateLabelOverviewList[];\n\n public constructor(\n id: number,\n name: string,\n version: number,\n finishingType: FinishingType,\n machineQuality: IdNameVersion,\n cutbarsInformation: FinishingCutbarsInformation,\n labels: FinishingAndFinishingTemplateLabelOverviewList[]\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._finishingType = finishingType;\n this._machineQuality = machineQuality;\n this._cutbarsInformation = cutbarsInformation;\n this._labels = labels;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._name, this._version);\n }\n\n public get finishingType(): FinishingType {\n return this._finishingType;\n }\n\n public get machineQuality(): IdNameVersion {\n return this._machineQuality;\n }\n\n public get machineQualityNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._machineQuality.name, this._machineQuality.version);\n }\n\n public get cutbarsInformation(): FinishingCutbarsInformation {\n return this._cutbarsInformation;\n }\n\n public get labels(): FinishingAndFinishingTemplateLabelOverviewList[] {\n return this._labels;\n }\n\n public static fromJSON(finishingJSON: any): OverviewListFinishing {\n return !isNil(finishingJSON)\n ? new OverviewListFinishing(\n finishingJSON.id,\n finishingJSON.name,\n finishingJSON.version,\n finishingJSON.finishingType,\n IdNameVersion.fromJSON(finishingJSON.machineQuality),\n FinishingCutbarsInformation.fromJSON(finishingJSON.cutbarsInformation),\n map(finishingJSON.labels, (finishingTemplateLabelJSON: any) => FinishingAndFinishingTemplateLabelOverviewList.fromJSON(finishingTemplateLabelJSON))\n )\n : null;\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n version: this._version,\n finishingType: this._finishingType,\n machineQuality: {name: this._machineQuality.name, version: this._machineQuality.version},\n cutbarsInformation: !isNil(this._cutbarsInformation) ? this._cutbarsInformation.toJSON() : null,\n labels: map(this._labels, (label: FinishingAndFinishingTemplateLabelOverviewList) => label.toJSON())\n } as any as JSON;\n }\n\n public static fromFinishing(finishing: Finishing): OverviewListFinishing {\n return finishing\n ? new OverviewListFinishing(\n this.getFinishingId(finishing),\n finishing.name,\n finishing.version,\n finishing.finishingType,\n new IdNameVersion(finishing.machineQuality?.id, finishing.machineQuality?.name, finishing.machineQuality?.version),\n finishing.cutbarsInformation,\n this.convertLabels(finishing.labels)\n )\n : null;\n }\n\n private static getFinishingId(finishing: Finishing): number {\n return typeof finishing.id === 'number' ? finishing.id : null;\n }\n\n private static convertLabels(labels: FinishingLabel[]): FinishingAndFinishingTemplateLabelOverviewList[] {\n return labels ? map(labels, (label: FinishingLabel) => FinishingAndFinishingTemplateLabelOverviewList.fromLabel(label)) : [];\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","export enum WeaveStructureWidth {\n SINGLE_WIDTH = 'SINGLE_WIDTH',\n DOUBLE_WIDTH = 'DOUBLE_WIDTH'\n}\n","export enum LabelType {\n IMAGE = 'IMAGE',\n TEXT = 'TEXT',\n PLACEHOLDER = 'PLACEHOLDER'\n}\n","import {Component} from '@angular/core';\nimport {TranslateService} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {isUndefined, toLower} from 'lodash-es';\nimport {WeaveQualityType} from '../overview/weave-quality-type.enum';\n\n@Component({\n templateUrl: './overview-weave-quality-type.component.html',\n styleUrl: './overview-weave-quality-type.component.scss'\n})\nexport class OverviewWeaveQualityTypeComponent implements ICellRendererAngularComp {\n private weaveQualityType: WeaveQualityType;\n private readonly translate: TranslateService;\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public agInit(params: any): void {\n if (isUndefined(params.data.qualityType)) {\n this.weaveQualityType = params.data.type;\n } else {\n this.weaveQualityType = params.data.qualityType;\n }\n }\n\n public getIconNameForWeaveQualityType(): string {\n return `${toLower(String(this.weaveQualityType))}-quality`;\n }\n\n public getWeaveQualityTypeLabelForTranslate(): string {\n return this.translate.instant(`TEXTILE_DATA.MACHINE_QUALITY.TYPES.${this.weaveQualityType}`);\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","
\n \n {{ getWeaveQualityTypeLabelForTranslate() }}\n
\n","import {StringUtils} from '@application/helper/string-utils';\nimport {IdName} from '@domain/id-name';\nimport {CarpetWeaveQuality} from '@domain/textile-data/machine-quality/carpet-weave-quality';\nimport {OverviewListDoubleWidthWeaveStructure} from '@domain/textile-data/weave-structure/overview-list-double-width-weave-structure';\nimport {OverviewListSingleWidthWeaveStructure} from '@domain/textile-data/weave-structure/overview-list-single-width-weave-structure';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {WeaveStructureWidth} from '../add/machine-quality-general/weave-structure-width.enum';\nimport {WeaveQualityType} from './weave-quality-type.enum';\n\nexport class OverviewListMachineQuality {\n private readonly _id: number;\n private readonly _technicalName: string;\n private readonly _version: number;\n private readonly _type: WeaveQualityType;\n private readonly _weaveStructureWidth: WeaveStructureWidth;\n private readonly _singleWidth: OverviewListSingleWidthWeaveStructure;\n private readonly _doubleWidth: OverviewListDoubleWidthWeaveStructure;\n private readonly _reedDensityInDentsPerMM: number;\n private readonly _pickDensityInPicksPerMM: number;\n private readonly _weftDensityInDentsPerMM: number;\n private readonly _applicableMachines: MachineOverviewList[];\n private readonly _practicalPickDensityInPicksPerMM: number;\n private readonly _pileHeightInMM: number;\n private readonly _alternativeMachineQualityIds: number[];\n private readonly _used: boolean;\n private readonly _canAddJute: boolean;\n private readonly _technicalCode: string;\n private readonly _pileRowDensityInPileRowsPerMeter: number;\n private readonly _dateModified: Date;\n private readonly _alternativeQualities: IdName[];\n private readonly _juteConditionIds: number[];\n private readonly _finishings: IdName[];\n private readonly _yarnSet: IdName;\n\n public constructor(\n id: number,\n technicalName: string,\n version: number,\n type: WeaveQualityType,\n weaveStructureWidth: WeaveStructureWidth,\n singleWidth: OverviewListSingleWidthWeaveStructure,\n doubleWidth: OverviewListDoubleWidthWeaveStructure,\n reedDensity: number,\n pickDensityInPicksPerMM: number,\n weftDensityInDentsPerMM: number,\n practicalPickDensityInPicksPerMM: number,\n pileHeightInMM: number,\n applicableMachines: MachineOverviewList[],\n alternativeMachineQualityIds: number[],\n used: boolean,\n canAddJute?: boolean,\n dateModified?: Date,\n yarnSet?: IdName,\n technicalCode?: string,\n pileRowDensityInPileRowsPerMeter?: number,\n alternativeQualities?: IdName[],\n juteConditionIds?: number[],\n finishings?: IdName[]\n ) {\n this._id = id;\n this._technicalName = technicalName;\n this._version = version;\n this._type = type;\n this._weaveStructureWidth = weaveStructureWidth;\n this._singleWidth = singleWidth;\n this._doubleWidth = doubleWidth;\n this._reedDensityInDentsPerMM = reedDensity;\n this._pickDensityInPicksPerMM = pickDensityInPicksPerMM;\n this._weftDensityInDentsPerMM = weftDensityInDentsPerMM;\n this._practicalPickDensityInPicksPerMM = practicalPickDensityInPicksPerMM;\n this._pileHeightInMM = pileHeightInMM;\n this._applicableMachines = applicableMachines;\n this._alternativeMachineQualityIds = alternativeMachineQualityIds;\n this._used = used;\n this._canAddJute = canAddJute;\n this._technicalCode = technicalCode;\n this._pileRowDensityInPileRowsPerMeter = pileRowDensityInPileRowsPerMeter;\n this._dateModified = dateModified;\n this._alternativeQualities = alternativeQualities;\n this._juteConditionIds = juteConditionIds;\n this._finishings = finishings;\n this._yarnSet = yarnSet;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get technicalName(): string {\n return this._technicalName;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get technicalNameWithVersion(): string {\n return StringUtils.createNameWithVersion(this.technicalName, this.version);\n }\n\n public get type(): WeaveQualityType {\n return this._type;\n }\n\n public get weaveStructureWidth(): WeaveStructureWidth {\n return this._weaveStructureWidth;\n }\n\n public get singleWidth(): OverviewListSingleWidthWeaveStructure {\n return this._singleWidth;\n }\n\n public get doubleWidth(): OverviewListDoubleWidthWeaveStructure {\n return this._doubleWidth;\n }\n\n public get reedDensityInDentsPerMM(): number {\n return this._reedDensityInDentsPerMM;\n }\n\n public get pickDensityInPicksPerMM(): number {\n return this._pickDensityInPicksPerMM;\n }\n\n public get weftDensityInDentsPerMM(): number {\n return this._weftDensityInDentsPerMM;\n }\n\n public get practicalPickDensityInPicksPerMM(): number {\n return this._practicalPickDensityInPicksPerMM;\n }\n\n public get pileHeightInMM(): number {\n return this._pileHeightInMM;\n }\n\n public get applicableMachines(): MachineOverviewList[] {\n return this._applicableMachines;\n }\n\n public get alternativeMachineQualityIds(): number[] {\n return this._alternativeMachineQualityIds;\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public get canAddJute(): boolean {\n return this._canAddJute;\n }\n\n public get technicalCode(): string {\n return this._technicalCode;\n }\n\n public get pileRowDensityInPileRowsPerMeter(): number {\n return this._pileRowDensityInPileRowsPerMeter;\n }\n\n public get dateModified(): Date {\n return this._dateModified;\n }\n\n public get alternativeQualities(): IdName[] {\n return this._alternativeQualities;\n }\n\n public get juteConditionIds(): number[] {\n return this._juteConditionIds;\n }\n\n public get finishings(): IdName[] {\n return this._finishings;\n }\n\n public get yarnSet(): IdName {\n return this._yarnSet;\n }\n\n public static fromJSON(machineQualityJSON: any): OverviewListMachineQuality {\n return new OverviewListMachineQuality(\n machineQualityJSON.id,\n machineQualityJSON.technicalName,\n machineQualityJSON.version,\n machineQualityJSON.type,\n machineQualityJSON.weaveStructureWidthType ? machineQualityJSON.weaveStructureWidthType : null,\n this.getBackwardsSingleWidthWeaveStructure(machineQualityJSON),\n machineQualityJSON.doubleWidth ? OverviewListDoubleWidthWeaveStructure.fromJSON(machineQualityJSON) : null,\n machineQualityJSON.reedDensityInDentsPerMM,\n machineQualityJSON.theoreticalPickDensityInPicksPerMM,\n machineQualityJSON.weftDensityInDentsPerMM,\n machineQualityJSON.practicalPickDensityInPicksPerMM,\n machineQualityJSON.pileHeightInMM,\n machineQualityJSON.applicableMachines,\n machineQualityJSON.alternativeMachineQualityIds,\n machineQualityJSON.used,\n machineQualityJSON.canAddJute ?? false,\n machineQualityJSON.dateModified ? new Date(machineQualityJSON.dateModified) : null,\n machineQualityJSON.yarnSet ? IdName.fromJSON(machineQualityJSON.yarnSet) : null,\n machineQualityJSON.technicalCode,\n machineQualityJSON.pileRowDensityInPileRowsPerMeter,\n machineQualityJSON.alternativeQualities?.map((alternativeQualityJSON: any) => IdName.fromJSON(alternativeQualityJSON)),\n machineQualityJSON.juteConditions?.map((juteConditionJSON: any) => juteConditionJSON.id),\n machineQualityJSON.finishings?.map((finishingJSON: any) => IdName.fromJSON(finishingJSON))\n );\n }\n\n public static fromCarpetWeaveQuality(carpetWeaveQuality: CarpetWeaveQuality): OverviewListMachineQuality {\n return new OverviewListMachineQuality(\n carpetWeaveQuality.id,\n carpetWeaveQuality.technicalName,\n carpetWeaveQuality.version,\n WeaveQualityType.CARPET,\n carpetWeaveQuality.weaveStructureWidth,\n carpetWeaveQuality.singleWidth ? OverviewListSingleWidthWeaveStructure.fromJSON(carpetWeaveQuality) : null,\n carpetWeaveQuality.doubleWidth ? OverviewListDoubleWidthWeaveStructure.fromJSON(carpetWeaveQuality) : null,\n carpetWeaveQuality.reedDensityInDentsPerMM,\n carpetWeaveQuality.pickDensityInPicksPerMM,\n carpetWeaveQuality.weftDensityInDentsPerMM,\n carpetWeaveQuality.practicalPickDensityInPicksPerMM,\n carpetWeaveQuality.pileHeightInMM,\n carpetWeaveQuality.applicableMachines,\n carpetWeaveQuality.alternativeMachineQualityIds,\n carpetWeaveQuality.used,\n carpetWeaveQuality.canAddJute ?? false\n );\n }\n\n public static getBackwardsSingleWidthWeaveStructure(weaveQualityJSON: any): OverviewListSingleWidthWeaveStructure {\n if (!weaveQualityJSON.singleWidth && !weaveQualityJSON.doubleWidth) {\n return weaveQualityJSON.weaveStructure ? OverviewListSingleWidthWeaveStructure.fromOldJSON(weaveQualityJSON) : null;\n } else if (!weaveQualityJSON.singleWidth && weaveQualityJSON.doubleWidth) {\n return null;\n } else {\n return OverviewListSingleWidthWeaveStructure.fromJSON(weaveQualityJSON);\n }\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","export enum WeaveQualityType {\n CARPET = 'CARPET',\n VELVET = 'VELVET'\n}\n","export enum AddColorSetViewMode {\n GENERAL = 'GENERAL',\n OPTIONAL_SETTINGS = 'OPTIONAL_SETTINGS',\n ALTERNATIVE_SETS = 'ALTERNATIVE_SETTINGS'\n}\n","
\n \n \n\n \n @if (!showAlternativeSetsTab()) {\n \n @if (!showOptionalSettingsTab() && !showAlternativeSetsTab()) {\n \n @if (canShowGeneralForm()) {\n
\n

{{ 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION' | bmsTranslate: {count: 1, position: ''} }}

\n
\n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n @if (canShowSuggestionForMaterialSetName()) {\n \n \n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\n \n }\n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n {{ 'GENERAL.ACTIONS.LOAD' | bmsTranslate }}\n \n \n
\n\n @if (canSelectCreelPosition()) {\n
\n
\n \n {{ 'TEXTILE_DATA.MATERIAL_SET.SELECT_ALL_POSITIONS' | bmsTranslate }}\n \n
\n
\n }\n
\n @if (canShowCreelPositionsInput()) {\n
\n \n {{ 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION' | bmsTranslate: {count: 2, position: ''} }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.MIN_VALUE' | bmsTranslate: {min: '1'} }}\n \n \n {{ 'GENERAL.ERRORS.MAX_VALUE' | bmsTranslate: {max: '32'} }}\n \n \n\n \n {{ 'GENERAL.ACTIONS.ADD_OBJECT' | bmsTranslate: {object: 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION' | bmsTranslate: {count: 2, position: ''} | lowercase} }}\n \n
\n }\n \n \n
\n
\n }\n
\n }\n\n @if (showOptionalSettingsTab()) {\n \n
\n
\n
\n \n {{ 'GENERAL.TECHNICAL_CODE' | bmsTranslate }}\n \n \n
\n
\n
\n
\n }\n \n }\n\n @if (showAlternativeSetsTab()) {\n \n \n \n
\n

{{ 'TEXTILE_DATA.COLOR_SET.SELECT_ALTERNATIVE_COLOR_SET' | bmsTranslate }}

\n
\n
\n
\n {{ 'GENERAL.SELECTED' | bmsTranslate }}\n
\n
\n \n @if (canShowListOfColorSets()) {\n \n }\n \n
\n }\n\n @if (showSelectionCard()) {\n @if (canShowSelectColor()) {\n \n }\n @if (canShowSelectYarnType()) {\n \n }\n }\n\n @if (!showOptionalSettingsTab() && !showAlternativeSetsTab() && canShowCreelPositionDetails()) {\n
\n \n
\n }\n \n
\n","import {DOCUMENT} from '@angular/common';\nimport {ChangeDetectorRef, Component, Inject, Input, OnChanges, OnInit, SimpleChanges, ViewChild} from '@angular/core';\nimport {FormBuilder, FormControl, Validators} from '@angular/forms';\nimport {MatCheckboxChange} from '@angular/material/checkbox';\nimport {MatSlideToggleChange} from '@angular/material/slide-toggle';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNumberOfCreelPositionsData} from '@application/helper/navigation-helper/navigation-number-of-creel-positions-data.interface';\nimport {NavigationSelectedMenuItemData} from '@application/helper/navigation-helper/navigation-selected-menu-item-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {UnsavedChangesNotifierService} from '@application/helper/unsaved-changes-notifier/unsaved-changes-notifier.service';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {MaterialSet} from '@domain/textile-data/textile-data';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {COLOR_SETS, ColorSets} from '@infrastructure/http/color-set/color-sets';\nimport {AddColorSetPageComponent} from '@presentation/pages/textile-data/color-set/add/add-color-set-page.component';\nimport {SelectColorComponent} from '@presentation/pages/textile-data/material-set/add/select-color/select-color.component';\nimport {SelectYarnTypeComponent} from '@presentation/pages/textile-data/material-set/add/select-yarn-type/select-yarn-type.component';\nimport {AddYarnSetPageComponent} from '@presentation/pages/textile-data/yarn-set/add/add-yarn-set-page.component';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ColDefBuilderFactoryService,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n GridOptionsBuilderFactoryService,\n MobileColDef,\n NoDataOverlayComponentParams,\n ObjectUtils,\n SaveType,\n skeletonViewAnimation,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {GridApi, GridOptions, GridReadyEvent, ICellRendererParams, ITooltipParams, RowNode, RowSelectedEvent, ValueGetterParams} from 'ag-grid-community';\nimport {clone, cloneDeep, filter, find, findIndex, forEach, indexOf, isEmpty, isEqual, isNil, isUndefined, remove, size, some, times} from 'lodash-es';\nimport {map, ReplaySubject} from 'rxjs';\nimport {finalize, switchMap, takeUntil} from 'rxjs/operators';\nimport {AddColorSetViewMode} from '../../color-set/add/add-color-set-view-mode';\nimport {OverviewListColorSet} from '../../color-set/overview/overview-list-color-set';\nimport {GridColoredYarnSetPreviewComponent} from '../../colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component';\nimport {TextileService} from '../../textile-data-overview/textile.service';\nimport {TextileDataType} from '../../textile-data-type.enum';\nimport {AdditionalOptionsForAddColorSetForm, GeneralForm, MaterialSetForm} from './material-set-form';\nimport {NavigationAddMaterialSetPageData} from './navigation-add-material-set-page-data.type';\nimport {NavigationMaterialSetData} from './navigation-material-set-data.interface';\n\n@Component({\n selector: 'app-add-material-set-page',\n templateUrl: './add-material-set-page.component.html',\n styleUrls: ['./add-material-set-page.component.scss'],\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .button-skeleton-wrapper, .title-skeleton-wrapper, .list-skeleton-wrapper')]\n})\nexport class AddMaterialSetPageComponent extends BaseComponent implements OnInit, OnChanges {\n @Input() public materialSet: MaterialSet;\n @Input() public hasMaterialSetState = false;\n @Input() public textileDataService;\n @ViewChild('selectColorComponent') public selectColorComponent: SelectColorComponent;\n @ViewChild('selectYarnTypeComponent') public selectYarnTypeComponent: SelectYarnTypeComponent;\n\n public addMaterialSetForm: MaterialSetForm;\n public permissionToEditMaterialSet: Permission;\n public selectedMenuItem: TabsMenuItem;\n public gridOptionsForColorSets: GridOptions;\n public gridModelForListOfColorSets: GridApi;\n public listOfColorSets: OverviewListColorSet[];\n public suggestedMaterialSetName: string;\n\n public generalMenuItem: TabsMenuItem = {\n value: AddColorSetViewMode.GENERAL,\n translationKey: 'GENERAL.GENERAL'\n };\n\n public optionalSettingsMenuItem: TabsMenuItem = {\n value: AddColorSetViewMode.OPTIONAL_SETTINGS,\n translationKey: 'GENERAL.OPTIONAL_SETTINGS'\n };\n\n public alternativeSetsMenuItem: TabsMenuItem = {\n value: AddColorSetViewMode.ALTERNATIVE_SETS,\n translationKey: 'TEXTILE_DATA.COLOR_SET.ALTERNATIVE_SETS'\n };\n\n public menuItems: TabsMenuItem[] = [];\n public headerIdentifier = HeaderIdentifier.ADD_YARN_SET;\n public readonly SAVE_TYPE = SaveType;\n\n private urlParams: Params;\n private modifiedCreelPositions: number[] = [];\n private readonly formValidationHelper: FormValidationHelper = new FormValidationHelper();\n private readonly possibleCreelPositionsSubject = new ReplaySubject();\n private saveButtonTouched = false;\n private currentSubscription: Subscription;\n private slideToggleChecked = false;\n private selectedColorSets: number[];\n private initialListOfColorSets: OverviewListColorSet[];\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(COLOR_SETS) public readonly colorSets: ColorSets,\n private readonly formBuilder: FormBuilder,\n private readonly router: Router,\n private readonly activatedRoute: ActivatedRoute,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly textileService: TextileService,\n private unsavedChangesNotifierService: UnsavedChangesNotifierService\n ) {\n super();\n }\n\n public get generalForm(): GeneralForm {\n return this.addMaterialSetForm?.controls?.generalForm;\n }\n\n public get additionalOptionsForAddColorSetForm(): AdditionalOptionsForAddColorSetForm {\n return this.addMaterialSetForm.controls.additionalOptionsForAddColorSetForm;\n }\n\n public ngOnInit(): void {\n this.getEmitValue();\n this.urlParams = this.activatedRoute.snapshot.params;\n this.permissionToEditMaterialSet = LastModifiedCardUtils.getPermissionToModifyItems(this.isMaterialSetOfTypeColorSet() ? 'colorSet' : 'yarnSet');\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.initializeSelectedMenuItem();\n this.initializeGridOptionsForColorSets();\n this.setForm();\n this.setFormFields();\n this.unsavedChangesNotifierService.getPartialStateOfUnsavedChangesNotifier();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('materialSet' in changes && !changes.materialSet.isFirstChange()) {\n this.addMaterialSetForm.get('name')?.setAsyncValidators(AsyncUniqueValidator.createValidator(this.textileDataService, this.hasEditedMaterialSet() ? this.materialSet.name : null));\n this.setFormFields();\n }\n }\n\n public onNavigationHelperDestroy(): void {\n this.updateMaterialSet();\n this.navigationHelperService.savePartialState({materialSet: this.materialSet});\n this.navigationHelperService.savePartialState({menuItem: this.selectedMenuItem});\n this.unsavedChangesNotifierService.savePartialStateOfUnsavedChangesNotifier();\n }\n\n public canShowSkeletonView(): boolean {\n return AssertionUtils.isNullOrUndefined(this.materialSet);\n }\n\n public canShowGeneralForm(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.generalForm);\n }\n\n public canShowIllegalMaterialSetReason(): boolean {\n return this.hasCreelPositions() && (this.hasEmptyCreelPosition() || this.containsGroupsWithNoOrOneMaterial());\n }\n\n public navigateBack(): void {\n this.navigationHelperService.navigateToPreviousRoute(LastModifiedCardUtils.getPageUrls(this.getMaterialType()).overview);\n }\n\n public canSaveMaterialSet(): boolean {\n return !this.canShowSkeletonView() && this.canShowGeneralForm() && this.generalForm.valid && this.hasCreelPositions() && !this.hasEmptyCreelPosition() && !this.containsGroupsWithNoOrOneMaterial();\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid =\n (!isNil(this.generalForm) ? some(this.generalForm.controls, (control: FormControl) => control.invalid && control.touched) : false) ||\n !this.hasCreelPositions() ||\n this.canShowIllegalMaterialSetReason();\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public saveMaterialSet(saveType: SaveType, navigateToSelectedRoute?: string): void {\n this.saveButtonTouched = true;\n this.formValidationHelper.checkForm(this.generalForm, this.document);\n this.modifiedCreelPositions = times(this.materialSet.getSizeOfCreelPositions(), (index: number) => index);\n this.saveButtonTouched = true;\n if (this.canSaveMaterialSet()) {\n this.updateMaterialSet();\n this.saving = true;\n\n const request = this.isEditingMaterialSet() ? this.textileDataService.update(this.materialSet) : this.textileDataService.save(this.materialSet);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n this.textileService.navigateAndShowToast(\n saveType,\n this.getTextileDataType(),\n this.getTranslationKeyForMaterialSet(),\n this.isEditingMaterialSet(),\n this.materialSet.name,\n id,\n navigateToSelectedRoute\n );\n },\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingMaterialSet() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public deleteMeterialSet(): void {\n this.textileService.removeConfirmation(this.materialSet, this.getTextileDataType(), false, null, this.textileDataService);\n }\n\n public duplicateMeterialSet(): void {\n const duplicateUrl = this.isMaterialSetOfTypeColorSet() ? RouteUtils.paths.texStyle.colorSet.duplicateColorSet.absolutePath : RouteUtils.paths.texStyle.yarnSet.duplicateYarnSet.absolutePath;\n this.router.navigateByUrl(duplicateUrl.replace(':id', this.materialSet.id.toString()));\n }\n\n public hasCreelPositions(): boolean {\n return isNil(this.materialSet) ? false : !isEqual(this.materialSet.getSizeOfCreelPositions(), 0);\n }\n\n public canAddCreelPositions(): boolean {\n return this.canShowGeneralForm() && this.generalForm.controls.creelPositions.valid;\n }\n\n public addCreelPositions(): void {\n const numberOfCreelPositions = this.generalForm.value.creelPositions;\n this.materialSet.creelPositions = times(numberOfCreelPositions, () => new CreelPosition([], false));\n this.materialSet.creelPositions.reverse();\n\n if (this.isMaterialSetOfTypeColorSet()) {\n this.getSuggestionForMaterialSetName();\n }\n }\n\n public getSelectedCreelPositions(): CreelPosition[] {\n return filter(this.materialSet?.creelPositions, 'isSelected');\n }\n\n public canShowCreelPositionDetailsAndMaterialTypeSelection(): boolean {\n return this.canShowGeneralForm() && this.hasCreelPositions() && this.hasSelectedCreelPosition();\n }\n\n public hasSelectedCreelPosition(): boolean {\n return !isEmpty(this.getSelectedCreelPositions());\n }\n\n public canShowCreelPositionDetails(): boolean {\n return isEqual(size(this.getSelectedCreelPositions()), 1);\n }\n\n public getSelectedCreelPosition(): CreelPosition {\n return find(this.materialSet.creelPositions, 'isSelected');\n }\n\n public selectAllCreelPositions(event: MatCheckboxChange): void {\n for (const creelPosition of this.materialSet.creelPositions) {\n creelPosition.isSelected = event.checked;\n }\n }\n\n public creelPositionHasBeenChanged(): void {\n this.materialSet = clone(this.materialSet);\n const creelPositionIndex = this.getSelectedCreelPositionIndex();\n\n if (!this.canShowErrorForCreelPositionIndex(creelPositionIndex)) {\n setTimeout(() => {\n this.modifiedCreelPositions.push(creelPositionIndex);\n });\n }\n\n if (this.isMaterialSetOfTypeYarnSet()) {\n this.getSuggestionForMaterialSetName();\n }\n this.unsavedChangesNotifierService.notifyChangesToOthers();\n }\n\n public isMaterialSetOfTypeColorSet(): boolean {\n return this.materialSet && this.materialSet instanceof ColorSet;\n }\n\n public isMaterialSetOfTypeYarnSet(): boolean {\n return this.materialSet && this.materialSet instanceof YarnSet;\n }\n\n public canShowSelectColor(): boolean {\n return this.isMaterialSetOfTypeColorSet() && !this.isMaterialSetBeingUsed();\n }\n\n public canShowSelectYarnType(): boolean {\n return this.isMaterialSetOfTypeYarnSet() && !this.isMaterialSetBeingUsed();\n }\n\n public isEditingMaterialSet(): boolean {\n const path = this.activatedRoute.routeConfig.path;\n\n return (\n !isNil(this.activatedRoute.snapshot.routeConfig) &&\n (isEqual(path, AddColorSetPageComponent.urlToEditColorSet) || isEqual(path, AddYarnSetPageComponent.urlToEditYarnSet)) &&\n !isUndefined(this.urlParams.id)\n );\n }\n\n public isMaterialSetSelected(): boolean {\n return !this.canShowSkeletonView() && this.hasCreelPositions() && this.areAllCreelPositionsSelected();\n }\n\n public canSelectCreelPosition(): boolean {\n return this.canShowSkeletonView() || (this.hasCreelPositions() && this.canEditMaterialSet());\n }\n\n public canShowListOfColorSets(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.listOfColorSets);\n }\n\n public canShowCreelPositionsInput(): boolean {\n return !this.canShowSkeletonView() && !this.hasCreelPositions();\n }\n\n public canShowErrorForCreelPositionIndex(creelPositionIndex: number): boolean {\n return indexOf(this.modifiedCreelPositions, creelPositionIndex) >= 0;\n }\n\n public selectedCreelPositionChanged(): void {\n if (this.canShowCreelPositionDetails() && this.canEditMaterialSet()) {\n if (this.isMaterialSetOfTypeColorSet()) {\n this.selectColorComponent.filterForListOfColors.focus();\n } else if (this.isMaterialSetOfTypeYarnSet()) {\n this.selectYarnTypeComponent.filterComponent.focus();\n }\n }\n }\n\n public canShowErrorForSelectedCreelPosition(): boolean {\n return this.canShowErrorForCreelPositionIndex(this.getSelectedCreelPositionIndex());\n }\n\n public showInUseUnableToSave(): boolean {\n return this.isMaterialSetOfTypeColorSet() ? false : this.isMaterialSetBeingUsed();\n }\n\n public isMaterialSetBeingUsed(): boolean {\n return !isUndefined(this.materialSet) && !!this.materialSet.used && !this.isDuplicatingMaterialSet();\n }\n\n public canEditMaterialSet(): boolean {\n return this.hasPermissionToEditMaterialSet() && !this.isMaterialSetBeingUsed();\n }\n\n public hasPermissionToEditMaterialSet(): boolean {\n return this.currentSubscription?.hasPermission(this.permissionToEditMaterialSet);\n }\n\n public openConflictsDialog(): void {\n this.textileDataService\n .getConflicts(this.materialSet.id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createInUseData(this.getTranslationKeyForMaterialSet(), this.materialSet.name, conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n public showSelected(slideToggleChange: MatSlideToggleChange): void {\n this.slideToggleChecked = slideToggleChange.checked;\n\n if (slideToggleChange.checked) {\n this.selectedColorSets = this.gridModelForListOfColorSets.getSelectedNodes().map((selectedNode: RowNode) => selectedNode.data.id);\n this.listOfColorSets = this.gridModelForListOfColorSets.getSelectedNodes().map((node: RowNode) => node.data);\n } else {\n this.listOfColorSets = cloneDeep(this.initialListOfColorSets);\n }\n }\n\n public onMaterialSetNameChange(): void {\n this.materialSet.name = this.generalForm.value.name;\n }\n\n public getTabAction(): string {\n return this.isEditingMaterialSet()\n ? this.translate.instant('GENERAL.ACTIONS.EDIT_OBJECT', {object: this.translate.instant(this.getTranslationKeyForMaterialSet(), {count: 1}).toLowerCase()})\n : this.translate.instant('GENERAL.ACTIONS.CREATE_OBJECT', {object: this.translate.instant(this.getTranslationKeyForMaterialSet(), {count: 1}).toLowerCase()});\n }\n\n public onSelectedMenuItemChange(menuItem: TabsMenuItem): void {\n this.selectedMenuItem = menuItem;\n }\n\n public showOptionalSettingsTab(): boolean {\n return this.isMaterialSetOfTypeColorSet() && isEqual(this.selectedMenuItem.value, AddColorSetViewMode.OPTIONAL_SETTINGS);\n }\n\n public showAlternativeSetsTab(): boolean {\n return this.selectedMenuItem.value === AddColorSetViewMode.ALTERNATIVE_SETS;\n }\n\n public showSelectionCard(): boolean {\n return !this.showOptionalSettingsTab() && !this.showAlternativeSetsTab() && this.hasPermissionToEditMaterialSet();\n }\n\n public getLoadLink(): string {\n this.unsavedChangesNotifierService.notifyChangesToForm(false);\n return ErrorHandlers.getLoadLink(LastModifiedCardUtils.getPageUrls(this.getMaterialType()).edit, this.generalForm.controls['name']);\n }\n\n public canShowSuggestionForMaterialSetName(): boolean {\n return this.suggestedMaterialSetName?.length > 0 && this.generalForm.value.name !== this.suggestedMaterialSetName;\n }\n\n public applySuggestionForMaterialSetName(): void {\n this.generalForm.controls.name.setValue(this.suggestedMaterialSetName);\n }\n\n public navigateToCustomSettings(): void {\n this.router.navigateByUrl(this.isMaterialSetOfTypeColorSet() ? RouteUtils.paths.texStyle.colorSet.colorSetSettings.absolutePath : RouteUtils.paths.texStyle.yarnSet.yarnSetSettings.absolutePath);\n }\n\n private getEmitValue(): void {\n this.unsavedChangesNotifierService\n .getSaveEventEmitter()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((res: {action: boolean; navigateToSelectedRoute: string}) => {\n if (res) {\n this.saveMaterialSet(SaveType.SAVE_AND_CLOSE, res.navigateToSelectedRoute);\n }\n });\n }\n\n private initializeSelectedMenuItem(): void {\n this.selectedMenuItem = this.generalMenuItem;\n\n const emptySelectedMenuItemState = {menuItem: null} as NavigationSelectedMenuItemData;\n const selectedMenuItemState = this.navigationHelperService.getPartialState(Object.keys(emptySelectedMenuItemState));\n\n if (!AssertionUtils.isNullOrUndefined(selectedMenuItemState) && !ObjectUtils.isDeepEqual(selectedMenuItemState, emptySelectedMenuItemState)) {\n this.selectedMenuItem = selectedMenuItemState.menuItem;\n }\n }\n\n private getSelectedCreelPositionIndex(): number {\n return findIndex(this.materialSet.creelPositions, this.getSelectedCreelPosition());\n }\n\n private getTextileDataType(): TextileDataType {\n return this.isMaterialSetOfTypeColorSet() ? TextileDataType.COLOR_SET : TextileDataType.YARN_SET;\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant(this.getTranslationKeyForMaterialSet(), {\n count: 1\n })\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private setForm(): void {\n const generalForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.textileDataService, this.hasEditedMaterialSet() ? this.materialSet.name : null)),\n creelPositions: this.formBuilder.control(null, [Validators.required, Validators.min(1), Validators.max(32)])\n });\n\n this.addMaterialSetForm = this.formBuilder.group({\n generalForm\n });\n\n this.generalMenuItem.form = this.generalForm;\n this.unsavedChangesNotifierService.notifyChanges(this.generalForm, this.unSubscribeOnViewDestroy);\n }\n\n private setFormFields(): void {\n this.generalForm.setValue({\n name: this.hasEditedMaterialSet() ? this.materialSet.name : null,\n creelPositions: !AssertionUtils.isNullOrUndefined(this.materialSet?.creelPositions) ? this.materialSet.getSizeOfCreelPositions() : null\n });\n\n if (this.isMaterialSetOfTypeColorSet()) {\n this.headerIdentifier = HeaderIdentifier.ADD_COLOR_SET;\n this.menuItems = [this.generalMenuItem, this.optionalSettingsMenuItem, this.alternativeSetsMenuItem];\n\n this.addMaterialSetForm.controls.additionalOptionsForAddColorSetForm = this.formBuilder.group({\n technicalCode: this.formBuilder.control(this.hasEditedMaterialSet() ? this.materialSet.technicalCode : null)\n });\n this.unsavedChangesNotifierService.notifyChanges(this.additionalOptionsForAddColorSetForm, this.unSubscribeOnViewDestroy);\n this.selectedColorSets = this.materialSet.alternativeColorSetIds;\n this.getColorSets();\n }\n\n const emptyNumberOfCreelPositionsState = {numberOfCreelPositions: null} as NavigationNumberOfCreelPositionsData;\n const numberOfCreelPositionsState = this.navigationHelperService.getPartialState(Object.keys(emptyNumberOfCreelPositionsState), true);\n\n if (!AssertionUtils.isNullOrUndefined(numberOfCreelPositionsState) && !ObjectUtils.isDeepEqual(numberOfCreelPositionsState, emptyNumberOfCreelPositionsState)) {\n this.generalForm.controls.creelPositions.setValue(numberOfCreelPositionsState.numberOfCreelPositions);\n this.addCreelPositions();\n }\n\n this.getSuggestionForMaterialSetName();\n }\n\n private hasEditedMaterialSet(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.materialSet) && (this.isEditingMaterialSet() || this.hasMaterialSetState);\n }\n\n private initializeGridOptionsForColorSets(): void {\n this.gridOptionsForColorSets = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfColoredYarnSets(), GridIdentifier.ALTERNATIVE_COLORED_YARN_SETS)\n .withRowSelection(true)\n .withOnRowSelected((params: RowSelectedEvent) => this.rowSelected(params))\n .withOnGridReady((params: GridReadyEvent) => this.onGridReadyEventForListOfColoredYarnSets(params))\n .withOnRowDataUpdated(() => this.selectColorSets())\n .withNoRowsOverlay({\n isAnyFilterPresent: () => true\n } as NoDataOverlayComponentParams)\n .withRememberStateForNavigationHelper()\n .build();\n }\n\n private getColumnDefsForListOfColoredYarnSets(): MobileColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS')\n .withCellRenderer((params: ICellRendererParams) => `${size((params.data as OverviewListColorSet).creelPositions)}`)\n .withTooltipValueGetter((params: ITooltipParams) => `${size((params.data as OverviewListColorSet).creelPositions)}`)\n .withNumericMultiFilter(\n this.possibleCreelPositionsSubject.asObservable().pipe(\n map((listOfColorSet: OverviewListColorSet[]) => this.getPossibleCreelPositions(listOfColorSet)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n )\n .withFilterValueGetter((params: ValueGetterParams) => params.data.creelPositions.length)\n .withSortable(false)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColId('color')\n .withHeaderName('TEXTILE_DATA.COLOR.COLOR')\n .withTooltipValueGetter((params: ITooltipParams) => StringUtils.createStringFromColorsOrYarnTypes(params.data.getUniqueColors()))\n .withCellRenderer((params: ICellRendererParams) => StringUtils.createStringFromColorsOrYarnTypes(params.data.getUniqueColors()))\n .withComparator((valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode) => {\n const firstColorSetOverviewList: OverviewListColorSet = nodeA.data;\n const colorNamesOfFirstColorSet: string = StringUtils.createStringFromColorsOrYarnTypes(firstColorSetOverviewList.getUniqueColors());\n\n const secondColorSetOverviewList: OverviewListColorSet = nodeB.data;\n const colorNamesOfSecondColorSet: string = StringUtils.createStringFromColorsOrYarnTypes(secondColorSetOverviewList.getUniqueColors());\n\n return StringUtils.stringComparator(colorNamesOfFirstColorSet, colorNamesOfSecondColorSet);\n })\n .withoutFilter()\n .withSortable()\n .build(),\n this.colDefBuilderFactory.getBuilder().withValueGetter('data').withHeaderName('GENERAL.PREVIEW').withCellRenderer(GridColoredYarnSetPreviewComponent).withoutFilter().build()\n ];\n }\n\n private isDuplicatingMaterialSet(): boolean {\n const path = this.activatedRoute.routeConfig.path;\n\n return (\n !isNil(this.activatedRoute.snapshot.routeConfig) &&\n (isEqual(path, AddColorSetPageComponent.urlToDuplicateColorSet) || isEqual(path, AddYarnSetPageComponent.urlToDuplicateYarnSet)) &&\n !isUndefined(this.urlParams.id)\n );\n }\n\n private hasEmptyCreelPosition(): boolean {\n let result = false;\n\n forEach(this.materialSet.creelPositions, (creelPosition: CreelPosition, index: number) => {\n if (this.canShowErrorForCreelPositionIndex(index) && isEmpty(creelPosition.horizontalPositionsOfCreelPosition)) {\n result = true;\n return false;\n }\n });\n\n return result;\n }\n\n private containsGroupsWithNoOrOneMaterial(): boolean {\n let result = false;\n\n forEach(this.materialSet.creelPositions, (creelPosition: CreelPosition, index: number) => {\n if (this.canShowErrorForCreelPositionIndex(index) && this.containsGroupWithNoOrOneMaterial(creelPosition.horizontalPositionsOfCreelPosition)) {\n result = true;\n return false;\n }\n });\n\n return result;\n }\n\n private selectColorSets(): void {\n if (!AssertionUtils.isNullOrUndefined(this.gridModelForListOfColorSets)) {\n this.selectedColorSets?.forEach((selectedColoredYarnSet: number) => {\n const node = this.gridModelForListOfColorSets.getRowNode(`${selectedColoredYarnSet}`);\n\n if (!AssertionUtils.isNullOrUndefined(node)) {\n node.setSelected(true);\n }\n });\n }\n }\n\n private getColorSets(): void {\n this.colorSets\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfColorSets: OverviewListColorSet[]) => {\n remove(listOfColorSets, (colorSet: OverviewListColorSet) => this.materialSet.id === colorSet.id);\n this.initialListOfColorSets = cloneDeep(listOfColorSets);\n this.listOfColorSets = listOfColorSets;\n this.possibleCreelPositionsSubject.next(listOfColorSets);\n });\n }\n\n private rowSelected(params: RowSelectedEvent): void {\n if (!params.node.isSelected() && this.slideToggleChecked) {\n remove(this.listOfColorSets, (coloredYarnSet: OverviewListColorSet) => isEqual(coloredYarnSet.id, params.data.id));\n this.listOfColorSets = cloneDeep(this.listOfColorSets);\n this.changeDetectorRef.detectChanges();\n }\n this.selectedColorSets = this.gridModelForListOfColorSets.getSelectedNodes().map((selectedNode: RowNode) => selectedNode.data.id);\n this.unsavedChangesNotifierService.notifyChangesToOthers();\n }\n\n private onGridReadyEventForListOfColoredYarnSets(params: GridReadyEvent): void {\n this.gridModelForListOfColorSets = params.api;\n\n this.selectColorSets();\n }\n\n private containsGroupWithNoOrOneMaterial(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): boolean {\n let result = false;\n\n for (const horizontalPositionOfCreelPosition of horizontalPositionsOfCreelPosition) {\n if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionsOfGroupCreelPosition: HorizontalPositionOfCreelPosition[] = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).group;\n\n if (size(horizontalPositionsOfGroupCreelPosition) <= 1 || this.containsGroupWithNoOrOneMaterial(horizontalPositionsOfGroupCreelPosition)) {\n result = true;\n break;\n }\n }\n }\n\n return result;\n }\n\n private getMaterialType(): string {\n let result: string;\n\n if (this.isMaterialSetOfTypeYarnSet()) {\n result = 'yarnSet';\n } else if (this.isMaterialSetOfTypeColorSet()) {\n result = 'colorSet';\n }\n\n return result;\n }\n\n private areAllCreelPositionsSelected(): boolean {\n return isEqual(size(this.materialSet.creelPositions), size(this.getSelectedCreelPositions()));\n }\n\n private getTranslationKeyForMaterialSet(): string {\n return this.isMaterialSetOfTypeColorSet() ? 'TEXTILE_DATA.COLOR_SET.COLOR_SET' : 'TEXTILE_DATA.YARN_SET.YARN_SET';\n }\n\n private getPossibleCreelPositions(listOfColorSet: OverviewListColorSet[]): string[] {\n return listOfColorSet.map((colorSet: OverviewListColorSet) => colorSet.creelPositions.length.toString());\n }\n\n private updateMaterialSet(): void {\n if (!AssertionUtils.isNullOrUndefined(this.materialSet)) {\n this.materialSet.name = this.generalForm.value.name;\n if (this.isMaterialSetOfTypeColorSet()) {\n this.materialSet.alternativeColorSetIds = !this.showAlternativeSetsTab()\n ? this.selectedColorSets\n : this.gridModelForListOfColorSets.getSelectedNodes()?.map((selectedNode: RowNode) => selectedNode.data.id);\n this.materialSet.technicalCode = this.additionalOptionsForAddColorSetForm.value.technicalCode;\n }\n }\n }\n\n private getSuggestionForMaterialSetName(): void {\n if (this.canEditMaterialSet() && this.hasCreelPositions()) {\n this.textileDataService\n .generateName(this.materialSet)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((name: string) => (this.suggestedMaterialSetName = name));\n }\n }\n}\n","export enum PlasticProductViewMode {\n GENERAL,\n SETUP,\n MATCHING_CRITERIA\n}\n","
\n @if (canShowHeader) {\n
\n \n \n \n \n
\n }\n\n \n
\n @if (canShowForm(VIEW_MODE.GENERAL)) {\n
\n \n \n \n \n \n \n \n \n \n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT_GROUP' | bmsTranslate: {count: 1} }}\n \n \n
\n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.UNIT_OF_MEASUREMENT' | bmsTranslate }}\n \n @for (unit of unitOfMeasurement; track $index) {\n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.' + unit | bmsTranslate }} \n }\n \n \n \n {{ 'UTILITIES.TOOL.WEIGHT' | bmsTranslate }}\n \n @if (generalForm.controls?.weight.value !== null && !generalForm.controls?.weight.disabled) {\n \n }\n \n {{ getWeightSuffixTranslationKey() | bmsTranslate }}\n \n \n \n \n \n
\n
\n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL' | bmsTranslate }}\n \n \n \n {{ 'TEXTILE_DATA.COLOR.COLOR' | bmsTranslate: {count: 1} }}\n \n \n
\n \n {{ 'CUSTOMERS.CUSTOMER' | bmsTranslate: {count: 1} }}\n \n \n
\n \n {{ 'MACHINE.DETAILS.STANDARD_EFFICIENCY' | bmsTranslate }}\n \n @if (generalForm.controls?.standardEfficiency.value !== null && !generalForm.controls?.standardEfficiency.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.PERCENTAGE' | bmsTranslate }}\n \n \n \n \n \n \n \n \n \n {{ 'UTILITIES.TOOL.SPEED' | bmsTranslate }}\n \n @if (generalForm.controls?.standardCycleTime.value !== null && !generalForm.controls?.standardCycleTime.disabled) {\n \n }\n \n \n \n \n \n {{ 'UTILITIES.TOOL.SPEED_UNIT.SPEED_UNIT' | bmsTranslate }}\n \n @for (speedUnit of speedUnits; track $index) {\n {{ 'UTILITIES.TOOL.SPEED_UNIT.' + speedUnit | bmsTranslate }} \n }\n \n \n
\n \n \n \n } @else if (canShowForm(VIEW_MODE.SETUP)) {\n \n } @else if (canShowForm(VIEW_MODE.MATCHING_CRITERIA)) {\n \n }\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, Input, OnInit} from '@angular/core';\nimport {AbstractControl, FormBuilder, FormGroup, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {UnitOfMeasurement} from '@domain/textile-data/plastic-product/unit-of-measurement.enum';\nimport {MatchingCriteria} from '@domain/utilities/tool/matching-criteria';\nimport {HttpMachineTypesService} from '@infrastructure/http/machine-type/http-machine-types.service';\nimport {Machines, MACHINES} from '@infrastructure/http/machine/machines.interface';\nimport {HttpPlasticProductsCustomSettingsService} from '@infrastructure/http/plastic-product/http-plastic-products-custom-settings.service';\nimport {HttpPlasticProductsService} from '@infrastructure/http/plastic-product/http-plastic-products.service';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {PlasticMachineOverviewList} from '@presentation/pages/machine-overview/plastic-machine-overview-list';\nimport {CustomerSelectionService} from '@presentation/pages/texfab/customer/customer-selection.service';\nimport {MatchingCriteriaData} from '@presentation/pages/utilities/tool/add/matching-criteria/matching-criteria-data.interface';\nimport {\n AssertionUtils,\n AsyncGreaterThanValidator,\n BackendError,\n BaseComponent,\n Color,\n ContentSwitcherNavigationInput,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n FormValidationHelper,\n NavigationHelperPrototypeService,\n SaveType,\n TabsMenuItem,\n TimeUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {finalize, forkJoin, map, Observable, Subject, takeUntil} from 'rxjs';\nimport {ColorSelectionService} from '../../color/color-selection.service';\nimport {MaterialSelectionService} from '../../raw-material/material-selection.service';\nimport {TextileService} from '../../textile-data-overview/textile.service';\nimport {TextileDataType} from '../../textile-data-type.enum';\nimport {PlasticProductCustomSettingsComponent} from './../settings/plastic-product-custom-settings.component';\nimport {GeneralForm, PlasticProductForm, SetupForm} from './plastic-product-form';\nimport {PlasticProductGroupSelectionService} from './plastic-product-group-selection.service';\nimport {PlasticProductViewMode} from './plastic-product-view-mode.enum';\n\n@Component({\n templateUrl: 'add-plastic-product-page.component.html',\n styleUrl: 'add-plastic-product-page.component.scss'\n})\nexport class AddPlasticProductPageComponent extends BaseComponent implements OnInit {\n @Input() public pageType: PageTypeEnum;\n @Input() public itemId: number;\n @Input() public canShowHeader: boolean = false;\n\n public plasticProductToSave: PlasticProduct;\n public addPlasticProductForm: PlasticProductForm;\n public unitOfMeasurement = EnumUtils.getEnumValues(UnitOfMeasurement);\n public speedUnits = EnumUtils.getEnumValues(StandardSpeed);\n public menuItems: TabsMenuItem[] = [\n {value: PlasticProductViewMode.GENERAL, translationKey: 'GENERAL.GENERAL'},\n {value: PlasticProductViewMode.MATCHING_CRITERIA, translationKey: 'UTILITIES.TOOL.MATCHING_CRITERIA.MATCHING_CRITERIA'},\n {value: PlasticProductViewMode.SETUP, translationKey: 'TEXTILE_DATA.PLASTIC_PRODUCT.SETUP'}\n ];\n\n public selectedMenuItem = this.menuItems[0];\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_PLASTIC_PRODUCT;\n public readonly SAVE_TYPE = SaveType;\n public readonly VIEW_MODE = PlasticProductViewMode;\n public refreshObjectSelection: boolean = false;\n public matchingCriteriaData: MatchingCriteriaData = {machines: [], machineTypes: []};\n public matchingCriteria: MatchingCriteria[] = [];\n\n protected currentPlasticProduct: PlasticProduct;\n protected customSettingsUpdated = new Subject();\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n @Inject(MACHINES) private readonly machines: Machines,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly formBuilder: FormBuilder,\n private readonly plasticProducts: HttpPlasticProductsService,\n private readonly router: Router,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService,\n public readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly plasticProductGroupSelectionService: PlasticProductGroupSelectionService,\n private readonly materialSelectionService: MaterialSelectionService,\n private readonly colorSelectionService: ColorSelectionService,\n private readonly customerSelectionService: CustomerSelectionService,\n private readonly machineTypes: HttpMachineTypesService,\n protected readonly plasticProductsCustomSettings: HttpPlasticProductsCustomSettingsService\n ) {\n super();\n }\n\n public get generalForm(): GeneralForm {\n return this.addPlasticProductForm.controls.generalForm;\n }\n\n public get matchingCriteriaForm(): FormGroup {\n return this.addPlasticProductForm.controls.matchingCriteriaForm;\n }\n\n public get setupForm(): SetupForm {\n return this.addPlasticProductForm.controls.setupForm;\n }\n\n public get createdObject(): string {\n return !AssertionUtils.isNullOrUndefined(this.addPlasticProductForm.controls.generalForm.controls.name.value) ? this.addPlasticProductForm.controls.generalForm.controls.name.value : '';\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n\n const id = this.activatedRoute.snapshot?.params?.id ?? this.itemId;\n\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.plasticProducts\n .getById(parseInt(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((plasticProduct: PlasticProduct) => {\n this.plasticProductToSave = plasticProduct;\n this.itemId = plasticProduct.id;\n this.matchingCriteria = this.plasticProductToSave.matchingCriteria.toSorted((a: MatchingCriteria, b: MatchingCriteria) => a.orderIndex - b.orderIndex);\n this.setFormValues();\n });\n }\n\n forkJoin([this.machines.getAll(), this.machineTypes.getAll(MachineType.PLASTIC_MACHINE)])\n .pipe(\n map(([machines, machineTypes]: [MachineOverviewList[], PlasticsMachineType[]]) => [\n machines.filter((machine: MachineOverviewList) => machine.machineType === MachineType.PLASTIC_MACHINE),\n machineTypes\n ]),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(([machines, machineTypes]: [PlasticMachineOverviewList[], PlasticsMachineType[]]) => (this.matchingCriteriaData = {machines, machineTypes}));\n\n this.addPlasticProductForm.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.currentPlasticProduct = this.getCurrentPlasticProduct();\n });\n }\n\n public getWeightSuffixTranslationKey(): string {\n return `GENERAL.UNIT.${this.generalForm.value.unitOfMeasurement === UnitOfMeasurement.PIECES ? 'KILOGRAM' : 'KILOGRAM_PER_METER'}`;\n }\n\n public savePlasticProduct(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.generalForm, this.matchingCriteriaForm, this.setupForm], this.document);\n if (isValid) {\n const plasticProductToSave = this.getCurrentPlasticProduct();\n this.saving = true;\n\n const request: Observable = this.isEditingPlasticProduct() ? this.plasticProducts.update(plasticProductToSave) : this.plasticProducts.save(plasticProductToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n if (saveType === SaveType.SAVE_AND_CLOSE) {\n plasticProductToSave.id = id;\n\n this.navigationHelper.navigateBack(this.isEditingPlasticProduct() ? [] : plasticProductToSave);\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.setFormFields();\n this.selectedMenuItem = this.menuItems.find((item: TabsMenuItem) => item.value === PlasticProductViewMode.GENERAL);\n this.refreshObjectSelection = true;\n }\n return;\n }\n\n this.textileService.navigateAndShowToast(\n saveType,\n TextileDataType.PLASTIC_PRODUCT,\n 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT',\n this.isEditingPlasticProduct(),\n plasticProductToSave.name,\n id\n );\n },\n error: (errorMessage: BackendError) =>\n this.showErrorDialogForBackendError(this.isEditingPlasticProduct() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public duplicatePlasticProduct(): void {\n this.router.navigateByUrl(RouteUtils.paths.texStyle.plasticProduct.duplicatePlasticProduct.absolutePath.replace(':id', this.plasticProductToSave.id.toString()));\n }\n\n public deletePlasticProduct(): void {\n this.textileService.removeConfirmation(this.plasticProductToSave, TextileDataType.PLASTIC_PRODUCT, false, null, this.plasticProducts);\n }\n\n public navigateBack(): void {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n this.navigationHelper.navigateBack();\n } else {\n this.router.navigateByUrl(RouteUtils.paths.texStyle.plasticProduct.absolutePath);\n }\n }\n\n public isEditingPlasticProduct(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.EDIT;\n }\n\n return this.activatedRoute.snapshot.routeConfig.path === RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.path;\n }\n\n public canShowForm(viewMode: PlasticProductViewMode): boolean {\n return this.selectedMenuItem.value === viewMode;\n }\n\n public selectProductGroup(): void {\n this.openContentSwitcherDialog(this.generalForm.controls.productGroup, this.plasticProductGroupSelectionService);\n }\n\n public selectMaterial(): void {\n this.openContentSwitcherDialog(this.generalForm.controls.material, this.materialSelectionService);\n }\n\n public selectColor(): void {\n this.openContentSwitcherDialog(this.generalForm.controls.color, this.colorSelectionService);\n }\n\n public selectCustomer(): void {\n this.openContentSwitcherDialog(this.generalForm.controls.customer, this.customerSelectionService);\n }\n\n public getLoadLink(): string {\n return ErrorHandlers.getLoadLink(RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.absolutePath, this.generalForm.controls['name']);\n }\n\n public getLoadEntry(): ContentSwitcherNavigationInput {\n return {\n componentInfo: {\n component: AddPlasticProductPageComponent,\n componentInputs: {pageType: PageTypeEnum.EDIT, itemId: this.addPlasticProductForm?.controls?.generalForm?.controls?.name?.errors?.entityId, canShowHeader: true}\n }\n };\n }\n\n public getPlasticProductPermission(): Permission {\n return RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.requiredPermission;\n }\n\n public isLocked(): boolean {\n return this.isEditingPlasticProduct() && this.plasticProductToSave.used;\n }\n\n protected openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: PlasticProductCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelper\n .navigateWithContentSwitcher(componentInfo)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.customSettingsUpdated.next());\n }\n\n protected applyNameSuggestion(suggestion: string): void {\n this.generalForm.controls.name.patchValue(suggestion);\n }\n\n private setFormFields(): void {\n const generalForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.plasticProducts, null)),\n productGroup: this.formBuilder.control(null),\n unitOfMeasurement: this.formBuilder.control(UnitOfMeasurement.PIECES),\n weight: this.formBuilder.control(null, [], AsyncGreaterThanValidator.createGreaterThanValidator(0)),\n material: this.formBuilder.control(null),\n color: this.formBuilder.control(null),\n customer: this.formBuilder.control(null),\n standardEfficiency: this.formBuilder.control(null, [Validators.min(0), Validators.max(100)]),\n standardCycleTime: this.formBuilder.control(null, Validators.min(0)),\n speedUnit: this.formBuilder.control(StandardSpeed.CYCLE_TIME),\n description: this.formBuilder.control(null)\n });\n\n const setupForm = this.formBuilder.group({\n mountTimeInMinutes: this.formBuilder.control(null, Validators.min(0)),\n dismountTimeInMinutes: this.formBuilder.control(null, Validators.min(0)),\n loadTimeInMinutes: this.formBuilder.control(null, Validators.min(0)),\n unloadTimeInMinutes: this.formBuilder.control(null, Validators.min(0))\n });\n\n this.addPlasticProductForm = this.formBuilder.group({\n generalForm,\n matchingCriteriaForm: this.formBuilder.group({}),\n setupForm\n });\n\n this.menuItems[0].form = this.generalForm;\n this.menuItems[1].form = this.matchingCriteriaForm;\n this.menuItems[2].form = this.setupForm;\n }\n\n private setFormValues(): void {\n this.generalForm.reset({\n name: this.isDuplicatingPlasticProduct() ? null : this.plasticProductToSave.name,\n unitOfMeasurement: this.plasticProductToSave.unitOfMeasurement,\n weight: this.plasticProductToSave.weightInKg,\n standardEfficiency: this.plasticProductToSave.standardEfficiency,\n standardCycleTime:\n this.plasticProductToSave.speedUnit === StandardSpeed.CYCLE_TIME\n ? this.plasticProductToSave.standardCycleTimeInSeconds\n : TimeUtils.SECONDS_IN_A_MINUTE / this.plasticProductToSave.standardCycleTimeInSeconds,\n speedUnit: this.plasticProductToSave.speedUnit,\n description: this.plasticProductToSave.description,\n productGroup: this.plasticProductToSave.productGroup,\n material: this.plasticProductToSave.material,\n color: this.plasticProductToSave.color,\n customer: this.plasticProductToSave.customer\n });\n\n this.setupForm.reset({\n mountTimeInMinutes: this.plasticProductToSave.mountTimeInMinutes,\n dismountTimeInMinutes: this.plasticProductToSave.dismountTimeInMinutes,\n loadTimeInMinutes: this.plasticProductToSave.loadTimeInMinutes,\n unloadTimeInMinutes: this.plasticProductToSave.unloadTimeInMinutes\n });\n\n if (this.isEditingPlasticProduct()) {\n this.generalForm.controls.name.setAsyncValidators([AsyncUniqueValidator.createValidator(this.plasticProducts, this.plasticProductToSave.name)]);\n this.generalForm.controls.name.updateValueAndValidity();\n }\n\n if (this.isLocked()) {\n this.addPlasticProductForm.disable();\n }\n }\n\n private getCurrentPlasticProduct(): PlasticProduct {\n return new PlasticProduct(\n this.isEditingPlasticProduct() ? this.plasticProductToSave.id : null,\n this.generalForm.value.name,\n this.generalForm.value.unitOfMeasurement,\n this.generalForm.value.weight,\n this.generalForm.value.standardEfficiency,\n this.generalForm.value.speedUnit === StandardSpeed.CYCLE_TIME ? this.generalForm.value.standardCycleTime : TimeUtils.SECONDS_IN_A_MINUTE / this.generalForm.value.standardCycleTime,\n this.generalForm.value.speedUnit,\n this.generalForm.value.description,\n this.setupForm.value.mountTimeInMinutes,\n this.setupForm.value.dismountTimeInMinutes,\n this.setupForm.value.loadTimeInMinutes,\n this.setupForm.value.unloadTimeInMinutes,\n this.plasticProductToSave?.used,\n this.generalForm.value.productGroup,\n this.generalForm.value.material,\n this.generalForm.value.color,\n this.generalForm.value.customer,\n this.matchingCriteria\n );\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {\n object: this.translate.instant('TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT', {count: 1})\n }),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private openContentSwitcherDialog(field: AbstractControl, selectionService: any): void {\n selectionService\n .openContentSwitcherDialog(field.value, {plasticProduct: this.getCurrentPlasticProduct()})\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((object: T[]) => {\n if (!AssertionUtils.isNullOrUndefined(object)) {\n field.setValue(!AssertionUtils.isNullOrUndefined(object) ? object[0] : null);\n }\n });\n }\n\n private isDuplicatingPlasticProduct(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.DUPLICATE;\n }\n\n return this.activatedRoute.snapshot.routeConfig?.path === RouteUtils.paths.texStyle.plasticProduct.duplicatePlasticProduct.path;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ColDefBuilderFactoryService, CrudColdef, GridOptionsBuilder, NoDataOverlayComponentParams, OverlayComponentParams, StringUtils, TranslateService} from '@vdw/angular-component-library';\n\n@Injectable()\nexport class PlasticProductGroupOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(): CrudColdef {\n return {\n colDefs: [\n this.colDefBuilderFactoryService.getBuilder().withField('id').withHide().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService.getBuilder().withField('description', true).withHeaderName('GENERAL.DESCRIPTION').withComparator(StringUtils.stringComparator).build()\n ],\n rowActionsComplete: null\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT_GROUP'),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {IdNameDescription} from '@domain/id-name-description';\nimport {GridModel} from '@vdw/angular-component-library';\nimport {map, Observable} from 'rxjs';\nimport {Repository} from '../repository';\n\n@Injectable({providedIn: 'root'})\nexport class HttpPlasticProductGroupsService implements Repository {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public getAll(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}plastic-product-groups`)\n .pipe(map((plasticProductGroupsJSON: any) => plasticProductGroupsJSON.map((plasticProductGroupJSON: any) => IdNameDescription.fromJSON(plasticProductGroupJSON))));\n }\n\n public delete(id: string | number): Observable {\n throw new Error('Method not implemented.');\n }\n\n public getById(id: number): Observable {\n throw new Error('Method not implemented.');\n }\n\n public save(item: IdNameDescription): Observable {\n throw new Error('Method not implemented.');\n }\n\n public update(item: IdNameDescription): Observable {\n throw new Error('Method not implemented.');\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}plastic-product-groups/${columnIdentifier}/possible-values`).pipe(map((response: string[]) => response));\n }\n\n public getSlice(gridModel: GridModel): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}plastic-product-groups/get`, gridModel)\n .pipe(map((plasticProductGroupsJSON: any) => plasticProductGroupsJSON.map((plasticProductGroupJSON: any) => IdNameDescription.fromJSON(plasticProductGroupJSON))));\n }\n}\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {IdNameDescription} from '@domain/id-name-description';\nimport {HttpPlasticProductGroupsService} from '@infrastructure/http/plastic-product-group/http-plastic-product-groups.service';\nimport {\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridOptionsBuilder,\n NavigationHelperPrototypeService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {PlasticProductGroupOverviewService} from './plastic-product-group-overview.service';\n\n@Injectable({providedIn: 'root'})\nexport class PlasticProductGroupSelectionService {\n private config: CrudOverviewDataConfig;\n\n public constructor(\n private readonly plasticProductGroups: HttpPlasticProductGroupsService,\n private readonly overview: PlasticProductGroupOverviewService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService\n ) {\n this.init();\n }\n\n public init(): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName('TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT_GROUP')\n .withRowData(this.plasticProductGroups.getAll())\n .withCrudGridOptions(this.overview.getColumnDefs(), GridIdentifier.PLASTIC_PRODUCT_GROUP_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: IdNameDescription): Observable {\n this.config.rowData = null;\n this.config.selectedObjects = [inputValue];\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {config: this.config} as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","export enum PlasticProductGridType {\n OVERVIEW,\n INLINE\n}\n","import {Injectable, Type} from '@angular/core';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {\n ColDefBuilderFactoryService,\n ContentSwitcherNavigationInput,\n CrudColdef,\n GridOptionsBuilder,\n LinkIconRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams, RowNode, ValueGetterParams} from 'ag-grid-community';\nimport {Subject} from 'rxjs';\nimport {GridColorPreviewComponent} from '../../color/overview/grid-color-preview/grid-color-preview.component';\nimport {PlasticProductGridType} from './plastic-product-grid-type.enum';\n\n@Injectable({providedIn: 'root'})\nexport class PlasticProductOverviewService {\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls('plasticProduct');\n\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(withLinkIcon: boolean = true, gridType: PlasticProductGridType = PlasticProductGridType.OVERVIEW, componentModule?: Type, rowActionsComplete?: Subject): CrudColdef {\n let nameColDef = this.colDefBuilderFactoryService.getBuilder().withHeaderName('GENERAL.NAME').withColIdAndField('name', true).withComparator(StringUtils.stringComparator);\n\n if (withLinkIcon) {\n const editRoute = NavigationUtils.getNavigationRoute(NavigationId.EDIT_PLASTIC_PRODUCT);\n\n nameColDef = nameColDef.withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: this.pageUrls.edit,\n rowActionsComplete,\n contentSwitcherEntry: {componentInfo: {component: editRoute.component, module: componentModule}, data: editRoute.data} as ContentSwitcherNavigationInput\n };\n });\n }\n\n return {\n colDefs: [\n nameColDef.build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('color')\n .withField('color.name', true)\n .withHeaderName('TEXTILE_DATA.COLOR.COLOR')\n .withValueGetter('data.color')\n .withCellRenderer(GridColorPreviewComponent)\n .withFilterValueGetter((params: ValueGetterParams) => params.data.color?.name)\n .withComparator((valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode) => StringUtils.stringComparator(valueA?.name, valueB?.name))\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT_GROUP')\n .withColId('productGroup')\n .withField('productGroup.name', true)\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('unitOfMeasurementId')\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.UNIT_OF_MEASUREMENT')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`TEXTILE_DATA.PLASTIC_PRODUCT.UNIT_OF_MEASUREMENT.${params.data.unitOfMeasurement}`), true)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.WEIGHT')\n .withColIdAndField('weightInKg', true)\n .withCellClass('right')\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL')\n .withColId('material')\n .withField('material.name', true)\n .withComparator(StringUtils.stringComparator)\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('CUSTOMERS.CUSTOMER')\n .withColId('customer')\n .withField('customer.name', true)\n .withComparator(StringUtils.stringComparator)\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('MACHINE.DETAILS.STANDARD_EFFICIENCY')\n .withColIdAndField('standardEfficiency', true)\n .withCellClass('right')\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('UTILITIES.TOOL.SPEED')\n .withColIdAndField('standardCycleTimeInSeconds', true)\n .withCellClass('right')\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('UTILITIES.TOOL.SPEED_UNIT.SPEED_UNIT')\n .withColId('speedUnitId')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`UTILITIES.TOOL.SPEED_UNIT.${params.data.speedUnit}`), true)\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('GENERAL.DESCRIPTION')\n .withColIdAndField('description', true)\n .withComparator(StringUtils.stringComparator)\n .withInitialHide(gridType === PlasticProductGridType.INLINE)\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.MOUNT_TIME', 1, false, 'GENERAL.UNIT.MINUTE')\n .withColIdAndField('mountTimeInMinutes', true)\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.DISMOUNT_TIME', 1, false, 'GENERAL.UNIT.MINUTE')\n .withColIdAndField('dismountTimeInMinutes', true)\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.LOAD_TIME', 1, false, 'GENERAL.UNIT.MINUTE')\n .withColIdAndField('loadTimeInMinutes', true)\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.PLASTIC_PRODUCT.UNLOAD_TIME', 1, false, 'GENERAL.UNIT.MINUTE')\n .withColIdAndField('unloadTimeInMinutes', true)\n .withCellClass('right')\n .build()\n ],\n rowActionsComplete\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT', {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {COLORS} from '@infrastructure/http/color/colors';\nimport {HttpColorsService} from '@infrastructure/http/color/http-colors.service';\nimport {CUSTOMERS} from '@infrastructure/http/customer/customers';\nimport {HttpCustomersService} from '@infrastructure/http/customer/http-customers.service';\nimport {CustomerSelectionService} from '@presentation/pages/texfab/customer/customer-selection.service';\nimport {CustomerOverviewService} from '@presentation/pages/texfab/customer/overview/customer-overview.service';\nimport {ColorSelectionService} from '../color/color-selection.service';\nimport {ColorOverviewService} from '../color/overview/color-overview.service';\nimport {MaterialOverviewService} from '../raw-material/material-overview.service';\nimport {MaterialSelectionService} from '../raw-material/material-selection.service';\nimport {PlasticProductGroupOverviewService} from './add/plastic-product-group-overview.service';\nimport {PlasticProductGroupSelectionService} from './add/plastic-product-group-selection.service';\n\n@NgModule({\n providers: [\n PlasticProductGroupOverviewService,\n PlasticProductGroupSelectionService,\n MaterialOverviewService,\n MaterialSelectionService,\n ColorOverviewService,\n ColorSelectionService,\n CustomerOverviewService,\n CustomerSelectionService,\n {provide: COLORS, useClass: HttpColorsService},\n {provide: CUSTOMERS, useClass: HttpCustomersService}\n ]\n})\nexport class PlasticProductSelectionModule {}\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {AddComponentInput} from '@application/helper/routing/add-component-input.interface';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {HttpPlasticProductsService} from '@infrastructure/http/plastic-product/http-plastic-products.service';\nimport {\n AssertionUtils,\n ContentSwitcherComponentData,\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {PlasticProductOverviewService} from './overview/plastic-product-overview.service';\nimport {PlasticProductModule} from './plastic-product.module';\n\n@Injectable({providedIn: 'root'})\nexport class PlasticProductSelectionService {\n private config: CrudOverviewDataConfig;\n private readonly TRANSLATION_KEY = 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT';\n\n public constructor(\n private readonly plasticProducts: HttpPlasticProductsService,\n private readonly translate: TranslateService,\n private readonly overview: PlasticProductOverviewService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly removeConfirmation: RemoveConfirmationService,\n private readonly plasticProductService: HttpPlasticProductsService\n ) {}\n\n public init(enableMultiDelete: boolean): void {\n const crudOverviewButtonConfigs = this.gridActionButtonsHelper.getActionButtonsWithNewRouting(\n NavigationUtils.getNavigationRoute(NavigationId.ADD_PLASTIC_PRODUCT).component,\n Permission.TEXSTYLE_PLASTIC_PRODUCT_EDIT,\n ({gridApi, rowNode}: GridButtonClickedEvent) => {\n const data = AssertionUtils.isNullOrUndefined(rowNode) ? (gridApi?.getSelectedRows()[0] as PlasticProduct) : (rowNode.data as PlasticProduct);\n\n if (!AssertionUtils.isEmpty(this.config.selectedObjects) && data.id === this.config.selectedObjects[0]?.id) {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('CONFLICTS.DIALOG.IN_USE', {object: data.name}),\n messageText: this.translate.instant('CONFLICTS.DIALOG.DESELECT'),\n type: DialogType.DELETE\n });\n return;\n }\n\n this.removeConfirmation.open(data, this.plasticProductService.delete(data.id), this.TRANSLATION_KEY, gridApi, this.plasticProductService.getConflicts(data.id));\n },\n PlasticProductModule\n );\n\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName(this.TRANSLATION_KEY)\n .withRowData(this.plasticProducts.getAll())\n .withDefaultButtons(crudOverviewButtonConfigs)\n .withCrudGridOptions(\n this.overview.getColumnDefs(true, undefined, PlasticProductModule, crudOverviewButtonConfigs.rowActionsComplete),\n GridIdentifier.PLASTIC_PRODUCT_OVERVIEW,\n null,\n (builder: GridOptionsBuilder) => this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(enableMultiDelete, true, true).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: PlasticProduct[], data: any, toolId?: number, machineId?: number): Observable {\n this.config.rowData = null;\n this.config.selectedObjects = inputValue;\n\n this.config.dataObservable = this.plasticProducts.getCompatible(toolId, machineId);\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config,\n newClickedEntry: {\n componentInfo: {\n component: NavigationUtils.getNavigationRoute(NavigationId.ADD_PLASTIC_PRODUCT).component,\n module: PlasticProductModule,\n componentInputs: {pageType: PageTypeEnum.ADD, canShowHeader: true} as AddComponentInput\n } as ContentSwitcherComponentData\n }\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n\n public setSelected(inputValue: PlasticProduct): void {\n this.config.selectedObjects = Array.isArray(this.config.selectedObjects) ? [inputValue, ...this.config.selectedObjects] : [inputValue];\n }\n}\n","
\n
\n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.MOUNT_TIME' | bmsTranslate }}\n \n @if (addPlasticProductSetupForm.controls?.mountTimeInMinutes.value !== null && !addPlasticProductSetupForm.controls?.mountTimeInMinutes.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.MINUTE' | bmsTranslate }}\n \n \n \n \n \n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.DISMOUNT_TIME' | bmsTranslate }}\n \n @if (addPlasticProductSetupForm.controls?.dismountTimeInMinutes.value !== null && !addPlasticProductSetupForm.controls?.dismountTimeInMinutes.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.MINUTE' | bmsTranslate }}\n \n \n \n \n \n
\n
\n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.LOAD_TIME' | bmsTranslate }}\n \n @if (addPlasticProductSetupForm.controls?.loadTimeInMinutes.value !== null && !addPlasticProductSetupForm.controls?.loadTimeInMinutes.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.MINUTE' | bmsTranslate }}\n \n \n \n \n \n \n {{ 'TEXTILE_DATA.PLASTIC_PRODUCT.UNLOAD_TIME' | bmsTranslate }}\n \n @if (addPlasticProductSetupForm.controls?.unloadTimeInMinutes.value !== null && !addPlasticProductSetupForm.controls?.unloadTimeInMinutes.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.MINUTE' | bmsTranslate }}\n \n \n \n \n \n
\n
\n","import {Component, Input} from '@angular/core';\nimport {SetupForm} from '../plastic-product-form';\n\n@Component({\n selector: 'app-plastic-product-setup',\n templateUrl: './plastic-product-setup.component.html'\n})\nexport class PlasticProductSetupComponent {\n @Input() public addPlasticProductSetupForm: SetupForm;\n}\n","import {NgModule} from '@angular/core';\nimport {CustomSettingsDialogHeaderComponent} from '@presentation/components/custom-settings-dialog/custom-settings-dialog-header.component';\nimport {MatchingCriteriaModule} from '@presentation/pages/utilities/tool/add/matching-criteria/matching-criteria.module';\nimport {CrudOverviewDataModule, EditorHeaderModule, SplitButtonModule} from '@vdw/angular-component-library';\nimport {TextileDataSharedModule} from '../textile-data-shared.module';\nimport {AddPlasticProductPageComponent} from './add/add-plastic-product-page.component';\nimport {PlasticProductSetupComponent} from './add/plastic-product-setup/plastic-product-setup.component';\nimport {PlasticProductOverviewPageComponent} from './overview/plastic-product-overview-page.component';\nimport {PlasticProductSelectionModule} from './plastic-product-selection.module';\nimport {plasticProductRouting} from './plastic-product.routing';\nimport {PlasticProductCustomSettingsComponent} from './settings/plastic-product-custom-settings.component';\n\n@NgModule({\n declarations: [PlasticProductOverviewPageComponent, AddPlasticProductPageComponent, PlasticProductSetupComponent, PlasticProductCustomSettingsComponent],\n imports: [\n plasticProductRouting,\n TextileDataSharedModule,\n EditorHeaderModule,\n CrudOverviewDataModule,\n SplitButtonModule,\n MatchingCriteriaModule,\n PlasticProductSelectionModule,\n CustomSettingsDialogHeaderComponent\n ]\n})\nexport class PlasticProductModule {}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddPlasticProductPageComponent} from './add/add-plastic-product-page.component';\nimport {PlasticProductOverviewPageComponent} from './overview/plastic-product-overview-page.component';\n\nconst shared = {parentId: NavigationId.TOOL_MODULE};\n\nexport const plasticProductRoutes = [\n AuthorizedRouteFactory.createPrototypeComponentRoute(PlasticProductOverviewPageComponent, {\n route: '',\n requiredPermission: Permission.TEXSTYLE_PLASTIC_PRODUCT_VIEW,\n reuse: true,\n id: NavigationId.PLASTIC_PRODUCT,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPlasticProductPageComponent, {\n route: 'add',\n requiredPermission: Permission.TEXSTYLE_PLASTIC_PRODUCT_EDIT,\n reuse: true,\n id: NavigationId.ADD_PLASTIC_PRODUCT,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPlasticProductPageComponent, {\n route: 'edit/:id',\n requiredPermission: Permission.TEXSTYLE_PLASTIC_PRODUCT_VIEW,\n id: NavigationId.EDIT_PLASTIC_PRODUCT,\n ...shared\n }),\n AuthorizedRouteFactory.createPrototypeComponentRoute(AddPlasticProductPageComponent, {\n route: 'add/:id',\n requiredPermission: Permission.TEXSTYLE_PLASTIC_PRODUCT_EDIT,\n id: NavigationId.DUPLICATE_PLASTIC_PRODUCT,\n ...shared\n })\n];\n\nexport const plasticProductRouting: ModuleWithProviders = RouterModule.forChild(plasticProductRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {HttpPlasticProductsService} from '@infrastructure/http/plastic-product/http-plastic-products.service';\nimport {\n AssertionUtils,\n BaseComponent,\n ContentSwitcherNavigationInput,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n RouteNavigationInput\n} from '@vdw/angular-component-library';\nimport {TextileService} from '../../textile-data-overview/textile.service';\nimport {TextileDataType} from '../../textile-data-type.enum';\nimport {PlasticProductCustomSettingsComponent} from './../settings/plastic-product-custom-settings.component';\nimport {PlasticProductOverviewService} from './plastic-product-overview.service';\n\n@Component({\n templateUrl: './plastic-product-overview-page.component.html'\n})\nexport class PlasticProductOverviewPageComponent extends BaseComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls('plasticProduct');\n\n public constructor(\n private readonly crudOverviewDataBuilderFactory: CrudOverviewDataBuilderFactoryService,\n private readonly plasticProducts: HttpPlasticProductsService,\n private readonly router: Router,\n private readonly textileService: TextileService,\n private readonly plasticProductOverviewService: PlasticProductOverviewService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const colDefs = this.plasticProductOverviewService.getColumnDefs();\n\n this.config = this.crudOverviewDataBuilderFactory\n .getBuilder()\n .withRowData(this.plasticProducts.getAll())\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: RouteUtils.paths.texStyle.plasticProduct.editPlasticProduct.requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: false\n } as CrudActions)\n })\n .withCrudGridOptions(colDefs, GridIdentifier.PLASTIC_PRODUCT_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.plasticProductOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false).build()\n )\n .withEntityName(NavigationUtils.getNavigationData(NavigationId.PLASTIC_PRODUCT_MODULE).navigationKey)\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .withCustomSettingsClicked(() => this.openCustomSettings())\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n const componentInfo = {\n route: this.pageUrls[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id)\n } as RouteNavigationInput;\n\n this.navigationHelper.navigateWithRoute(componentInfo);\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.textileService.removeConfirmation(\n AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0] : rowNode.data,\n TextileDataType.PLASTIC_PRODUCT,\n false,\n null,\n this.plasticProducts\n );\n }\n\n private openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: PlasticProductCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelper.navigateWithContentSwitcher(componentInfo);\n }\n}\n","\n","import {Component, OnInit} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {CustomSettings} from '@domain/custom-settings/custom-settings';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {HttpPlasticProductsCustomSettingsService} from '@infrastructure/http/plastic-product/http-plastic-products-custom-settings.service';\nimport {BaseComponent, NavigationHelperPrototypeService, TabsMenuItem, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './plastic-product-custom-settings.component.html'\n})\nexport class PlasticProductCustomSettingsComponent extends BaseComponent implements OnInit {\n protected nameGenerationProperties: NameGeneratorProperty[] = [];\n protected settingsForm = new FormGroup({nameGenerator: new FormControl(null)});\n protected generalTab: TabsMenuItem = {\n value: 'generalTab',\n translationKey: 'GENERAL.GENERAL',\n form: this.settingsForm\n };\n\n protected PLASTIC_PRODUCT_TRANSLATION_KEY = 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT';\n\n public constructor(\n private readonly plasticProductCustomSettings: HttpPlasticProductsCustomSettingsService,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.getCustomSettings();\n }\n\n protected navigateBack(): void {\n this.navigationHelper.navigateBack();\n }\n\n protected save(): void {\n this.plasticProductCustomSettings\n .save(new CustomSettings(undefined, this.settingsForm.value.nameGenerator))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.navigateBack();\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.UPDATED_OBJECT_WITHOUT_NAME', {object: 'GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS'})\n });\n });\n }\n\n private getCustomSettings(): void {\n forkJoin([this.plasticProductCustomSettings.get(), this.plasticProductCustomSettings.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([customSettings, nameGenerationProperties]: [CustomSettings, NameGeneratorProperty[]]) => {\n this.settingsForm.controls.nameGenerator.patchValue(customSettings.nameGenerator);\n this.nameGenerationProperties = nameGenerationProperties;\n });\n }\n}\n","
\n \n
\n \n \n
\n","import {Injectable} from '@angular/core';\nimport {ColDefBuilderFactoryService, CrudColdef, GridOptionsBuilder, NoDataOverlayComponentParams, OverlayComponentParams, StringUtils, TranslateService} from '@vdw/angular-component-library';\n\n@Injectable({providedIn: 'root'})\nexport class MaterialOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(): CrudColdef {\n return {\n colDefs: [\n this.colDefBuilderFactoryService.getBuilder().withField('id').withHide().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build()\n ],\n rowActionsComplete: null\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL'),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","
\n @if (canShowHeader) {\n
\n \n \n \n \n
\n }\n\n \n\n
\n
\n \n \n \n \n \n \n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {IdNameUsed} from '@domain/id-name-used';\nimport {HttpRawMaterialsService} from '@infrastructure/http/raw-materials/http-raw-materials.service';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ContentSwitcherNavigationInput,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n NavigationHelperPrototypeService,\n SaveType,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {finalize, Observable, takeUntil} from 'rxjs';\nimport {AddRawMaterialNavigationData} from './add-raw-material-navigation.data';\nimport {RawMaterialForm} from './add-raw-material.form';\n\n@Component({\n selector: 'app-add-raw-material',\n styleUrl: 'add-raw-material.component.scss',\n templateUrl: './add-raw-material.component.html'\n})\nexport class AddRawMaterialComponent extends BaseComponent implements OnInit {\n @Input() public pageType: PageTypeEnum;\n @Input() public itemId: number;\n @Input() public canShowHeader: boolean = false;\n\n public addRawMaterialForm: RawMaterialForm;\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_RAW_MATERIAL;\n public selectedMenuItem: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL'};\n public readonly RAW_MATERIAL_TRANSLATION_KEY = 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL';\n public isRawMaterialUsed = false;\n\n public constructor(\n private readonly formBuilder: FormBuilder,\n private readonly rawMaterialService: HttpRawMaterialsService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n public readonly navigationHelper: NavigationHelperPrototypeService,\n @Inject(DOCUMENT) private readonly document: Document\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n this.getRawMaterialDetails();\n }\n\n public isEditingRawMaterial(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.EDIT;\n }\n }\n\n public get createdObject(): string {\n return !AssertionUtils.isNullOrUndefined(this.addRawMaterialForm.controls.name.value) ? this.addRawMaterialForm.controls.name.value : '';\n }\n\n public cancel(): void {\n this.navigationHelper.navigateBack();\n }\n\n public getLoadEntry(): ContentSwitcherNavigationInput {\n return {\n componentInfo: {\n component: AddRawMaterialComponent,\n componentInputs: {pageType: PageTypeEnum.EDIT, itemId: this.addRawMaterialForm?.controls?.name?.errors?.entityId, canShowHeader: true}\n }\n };\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForm(this.addRawMaterialForm, this.document);\n if (isValid) {\n this.saving = true;\n const rawMaterialToSave = this.getCurrentRawMaterial();\n\n const request: Observable = this.isEditingRawMaterial() ? this.rawMaterialService.update(rawMaterialToSave) : this.rawMaterialService.save(rawMaterialToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n if (saveType === SaveType.SAVE_AND_CLOSE) {\n rawMaterialToSave.id = id;\n\n this.navigationHelper.navigateBack(this.isEditingRawMaterial() ? [] : rawMaterialToSave);\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.resetFormFields();\n }\n }\n },\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingRawMaterial() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n private getRawMaterialDetails(): void {\n const navigationData: AddRawMaterialNavigationData = this.navigationHelper.getCurrentEntryData();\n\n if (!AssertionUtils.isNullOrUndefined(navigationData?.rawMaterial)) {\n this.selectedMenuItem = navigationData?.activeTab;\n this.itemId = navigationData?.rawMaterial.id;\n this.setFormValues(navigationData?.rawMaterial);\n return;\n }\n\n const id = navigationData?.routeId ?? this.itemId;\n\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.rawMaterialService\n .getById(Number(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((rawMaterial: IdNameUsed) => {\n this.itemId = rawMaterial.id;\n this.isRawMaterialUsed = rawMaterial.used;\n this.setFormValues(rawMaterial);\n if (this.isRawMaterialUsed) {\n this.disableNameValue();\n }\n });\n }\n }\n\n private disableNameValue(): void {\n this.addRawMaterialForm.get('name').disable();\n }\n\n private setFormValues(rawMaterial: IdNameUsed): void {\n this.addRawMaterialForm.reset({\n name: rawMaterial.name\n });\n }\n\n private getCurrentRawMaterial(): IdNameUsed {\n return new IdNameUsed(this.isEditingRawMaterial() ? this.itemId : null, this.addRawMaterialForm.value.name, false);\n }\n\n private setFormFields(): void {\n this.addRawMaterialForm = this.formBuilder.group({\n name: this.formBuilder.control('', Validators.required, AsyncUniqueValidator.createValidator(this.rawMaterialService, null))\n });\n }\n\n private resetFormFields(): void {\n this.addRawMaterialForm.reset();\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {object: this.translate.instant(this.RAW_MATERIAL_TRANSLATION_KEY)}),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {AddRawMaterialComponent} from '@presentation/pages/textile-data/raw-material/add/add-raw-material.component';\nimport {ContentSwitcherEntry} from '@vdw/angular-component-library';\n\nconst shared = {component: AddRawMaterialComponent, entityName: 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL'};\n\nexport const addRawMaterialEntry = {key: 'raw-material/add', data: {}, ...shared} as ContentSwitcherEntry;\nexport const editRawMaterialEntry = {key: 'raw-material/edit/:id', data: {route: 'edit/:id'}, ...shared} as ContentSwitcherEntry;\n","import {AddStockLocationComponent} from '@presentation/pages/utilities/tool/add/tool-status/add-stock-location/add-stock-location.component';\nimport {ContentSwitcherEntry} from '@vdw/angular-component-library';\n\nconst shared = {component: AddStockLocationComponent, entityName: 'UTILITIES.TOOL.STOCK_LOCATION'};\n\nexport const addStockLocationEntry = {key: 'stock-location/add', data: {}, ...shared} as ContentSwitcherEntry;\nexport const editStockLocationEntry = {key: 'stock-location/edit/:id', data: {route: 'edit/:id'}, ...shared} as ContentSwitcherEntry;\n","import {addRawMaterialEntry, editRawMaterialEntry} from '@application/helper/textile-data/raw-material/add-raw-material-entry';\nimport {ContentSwitcherEntry} from '@vdw/angular-component-library';\nimport {addStockLocationEntry, editStockLocationEntry} from '../stock-location/add-stock-location-entry';\n\nexport class ContentSwitcherUtils {\n private static readonly componentEntries = [addStockLocationEntry, editStockLocationEntry, addRawMaterialEntry, editRawMaterialEntry] as ContentSwitcherEntry[];\n\n public static getAddStockLocationEntry(): ContentSwitcherEntry {\n return this.componentEntries.find((entry: ContentSwitcherEntry) => entry.key === 'stock-location/add');\n }\n\n public static getEditStockLocationEntry(): ContentSwitcherEntry {\n return this.componentEntries.find((entry: ContentSwitcherEntry) => entry.key === 'stock-location/edit/:id');\n }\n\n public static getAddRawMaterialEntry(): ContentSwitcherEntry {\n return this.componentEntries.find((entry: ContentSwitcherEntry) => entry.key === 'raw-material/add');\n }\n\n public static getEditRawMaterialEntry(): ContentSwitcherEntry {\n return this.componentEntries.find((entry: ContentSwitcherEntry) => entry.key === 'raw-material/edit/:id');\n }\n}\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {AddComponentInput} from '@application/helper/routing/add-component-input.interface';\nimport {ContentSwitcherUtils} from '@application/helper/utilities/content-switcher/content-switcher-utils';\nimport {IdNameUsed} from '@domain/id-name-used';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {HttpRawMaterialsService} from '@infrastructure/http/raw-materials/http-raw-materials.service';\nimport {\n AssertionUtils,\n ContentSwitcherNavigationInput,\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {AddRawMaterialComponent} from './add/add-raw-material.component';\nimport {MaterialOverviewService} from './material-overview.service';\n\n@Injectable({providedIn: 'root'})\nexport class MaterialSelectionService {\n private config: CrudOverviewDataConfig;\n private previouslySelectedObjects: IdNameUsed[];\n\n public constructor(\n private readonly materials: HttpRawMaterialsService,\n private readonly translate: TranslateService,\n private readonly overview: MaterialOverviewService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly removeConfirmation: RemoveConfirmationService,\n private readonly materialService: HttpRawMaterialsService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n this.init();\n }\n\n public init(): void {\n const crudOverviewButtonConfigs = this.gridActionButtonsHelper.getActionButtonsWithNewRouting(\n ContentSwitcherUtils.getEditRawMaterialEntry().component,\n Permission.TEXSTYLE_RAW_MATERIAL_EDIT,\n ({gridApi, rowNode}: GridButtonClickedEvent) => {\n const data = AssertionUtils.isNullOrUndefined(rowNode) ? (gridApi?.getSelectedRows()[0] as IdNameUsed) : (rowNode.data as IdNameUsed);\n\n if (!AssertionUtils.isEmpty(this.previouslySelectedObjects) && data.id === this.previouslySelectedObjects[0]?.id) {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('CONFLICTS.DIALOG.IN_USE', {object: data.name}),\n messageText: this.translate.instant('CONFLICTS.DIALOG.DESELECT'),\n type: DialogType.DELETE\n });\n return;\n }\n\n this.removeConfirmation.open(data, this.materialService.delete(data.id), 'TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL', gridApi, this.materialService.getConflicts(data.id));\n }\n );\n\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName('TEXTILE_DATA.PLASTIC_PRODUCT.MATERIAL')\n .withRowData(this.materials.getAll())\n .withDefaultButtons(crudOverviewButtonConfigs)\n .withCrudGridOptions(this.overview.getColumnDefs(), GridIdentifier.MATERIAL_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: IdNameUsed): Observable {\n this.config.rowData = null;\n this.config.selectedObjects = [inputValue];\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config,\n newClickedEntry: {\n componentInfo: {component: AddRawMaterialComponent, componentInputs: {pageType: PageTypeEnum.ADD, canShowHeader: true} as AddComponentInput}\n } as ContentSwitcherNavigationInput\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","
\n
\n {{\n getYarnConsumptionCommercialLengthInMeters(yarnType)\n }}\n ({{ yarnType.yarnConsumption.weightInKilogramPerSquareMeter | number }}kg/m²)\n
\n
\n","import {AfterViewChecked, ChangeDetectorRef, Component, ElementRef, ViewChild} from '@angular/core';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {convertCommercialUnit, Unit} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {isUndefined, round, toNumber} from 'lodash-es';\nimport {OverviewListYarnType} from '../../yarn-type/overview/overview-list-yarn-type';\n\n@Component({\n templateUrl: './grid-yarn-consumption.component.html',\n styleUrls: ['./grid-yarn-consumption.component.scss']\n})\nexport class GridYarnConsumptionComponent implements ICellRendererAngularComp, AfterViewChecked {\n @ViewChild('name') public name: ElementRef;\n public creelPositionForYarnTypes: OverviewListCreelPosition;\n public showTooltip = false;\n public yarnTypes: OverviewListYarnType[];\n private readonly changeDetectorRef: ChangeDetectorRef;\n\n public constructor(changeDetectorRef: ChangeDetectorRef) {\n this.changeDetectorRef = changeDetectorRef;\n }\n\n public agInit(params: any): void {\n this.yarnTypes = params.value.items;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public ngAfterViewChecked(): void {\n this.showTooltip = this.canShowTooltip();\n this.changeDetectorRef.detectChanges();\n }\n\n public getYarnConsumptionCommercialLengthInMeters(yarnType: OverviewListYarnType): string {\n return `${round(convertCommercialUnit({from: {unit: Unit.MILLIMETER, value: toNumber(yarnType.yarnConsumption.commercialLengthInMM)}, to: Unit.METER}), 3)}m`;\n }\n\n private canShowTooltip(): boolean {\n return !isUndefined(this.name) && this.name.nativeElement.offsetWidth < this.name.nativeElement.scrollWidth;\n }\n}\n","\n \n
\n \n
\n \n
\n {{ getTextileDataName() }}\n {{ getTextileDataAmount() }}\n
\n
\n
\n \n
\n
\n
\n \n {{ 'MACHINE.DETAILS.THEORETICAL' | bmsTranslate }}\n {{ 'MACHINE.DETAILS.ACTIVE' | bmsTranslate }}\n \n
\n
\n \n
\n
\n
\n
\n
\n","import {Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatButtonToggleChange} from '@angular/material/button-toggle';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {getMappedColoredYarnSet} from '@application/helper/textile-data/colored-yarn-set/get-mapped-colored-yarn-set';\nimport {leastCommonMultiple} from '@application/helper/textile-data/colored-yarn-set/least-common-multiple';\nimport {ColoredYarnSet} from '@domain/textile-data/colored-yarn-set/colored-yarn-set';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {CalculatedYarnConsumptionForProductionOrder} from '@domain/yarn-consumption/calculated-yarn-consumption-for-production-order';\nimport {YarnConsumptionWithColoredYarnSetId} from '@domain/yarn-consumption/yarn-consumption-with-colored-yarn-set-id';\nimport {COLORED_YARN_SETS, ColoredYarnSets} from '@infrastructure/http/colored-yarn-set/colored-yarn-sets';\nimport {REALTIME_YARN_CONSUMPTION, RealtimeYarnConsumption} from '@infrastructure/signalr/yarn-consumption/realtime-yarn-consumption';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {GridYarnTypesOfCreelPositionComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/grid-yarn-types-of-creel-position.component';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {OverviewListCreelPositionWithColorAndYarnTypes} from '@presentation/pages/textile-data/textile-data-detail/overview-list-creel-position-with-color-and-yarn-types';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {BaseComponent, ColDefBuilderFactoryService, Color, GridOptionsBuilderFactoryService, OverlayComponentParams} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {CellClassParams, ColDef, GridOptions, ICellRendererParams, ITooltipParams, RowHeightParams, ValueGetterParams} from 'ag-grid-community';\nimport {cloneDeep, each, find, isEmpty, isEqual, isNil, map, max, size, times} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {GridColorsOfCreelPositionComponent} from '../colored-yarn-set/add/grid-colors-of-creel-position/grid-colors-of-creel-position.component';\nimport {OverviewListYarnType} from '../yarn-type/overview/overview-list-yarn-type';\nimport {GridYarnConsumptionComponent} from './grid-yarn-consumption/grid-yarn-consumption.component';\nimport {TextileDataDetailDialogData} from './textile-data-detail-dialog-data.interface';\n\n@Component({\n templateUrl: './textile-data-detail.component.html',\n styleUrls: ['./textile-data-detail.component.scss']\n})\nexport class TextileDataDetailComponent extends BaseComponent implements OnInit {\n @ViewChild('creelPositionsGrid') public creelPositionsGrid: AgGridAngular;\n\n public textileData: any;\n public textileDataAmount: string;\n public listOfCreelPositions: OverviewListCreelPositionWithColorAndYarnTypes[];\n public gridOptionsForListOfCreelPositions: GridOptions;\n public creelMap: CreelMap;\n public showActiveCreelMap = false;\n private showYarnConsumption = false;\n private mappedColoredYarnSet: OverviewListColoredYarnSet;\n private readonly initialCreelMappingInfoClassName = 'initial-creel-mapping-info';\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: TextileDataDetailDialogData,\n private readonly repositionDialogComponent: RepositionDialogComponent,\n @Inject(COLORED_YARN_SETS) private readonly coloredYarnSets: ColoredYarnSets,\n @Inject(REALTIME_YARN_CONSUMPTION) private readonly realtimeYarnConsumption: RealtimeYarnConsumption,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n this.textileData = data.textileData;\n this.textileDataAmount = data.textileDataAmount;\n this.creelMap = data.creelMap;\n this.showActiveCreelMap = !isNil(this.creelMap);\n this.showYarnConsumption = isNil(data.showYarnConsumption) ? false : data.showYarnConsumption;\n }\n\n private static calculateRowHeight(creelPosition: OverviewListCreelPositionWithColorAndYarnTypes): number {\n let numberOfItemsInRow: number;\n const creelPositionForColors: OverviewListCreelPosition = creelPosition.creelPositionForColors;\n if (!isNil(creelPositionForColors)) {\n numberOfItemsInRow = size(creelPositionForColors.items);\n }\n const creelPositionForYarnTypes: OverviewListCreelPosition = creelPosition.creelPositionForYarnTypes;\n if (!isNil(creelPositionForYarnTypes)) {\n numberOfItemsInRow = max([numberOfItemsInRow, size(creelPositionForYarnTypes.items)]);\n }\n const verticalPadding = 32;\n const labelHeight = 20;\n return verticalPadding + numberOfItemsInRow * labelHeight;\n }\n\n public ngOnInit(): void {\n this.updateListOfCreelPositions();\n this.initializeGridOptionsForCreelPositions();\n\n if (this.showYarnConsumption) {\n this.connectRealtimeYarnConsumption();\n }\n }\n\n public getTextileDataIcon(): string {\n let icon: string;\n if (this.textileData instanceof OverviewListColorSet) {\n icon = 'color-sets-blue';\n } else if (this.textileData instanceof OverviewListColoredYarnSet) {\n icon = 'colored-yarn-sets-blue';\n } else if (this.textileData instanceof OverviewListYarnSet) {\n icon = 'yarn-sets-blue';\n }\n return icon;\n }\n\n public getTextileDataName(): string {\n return isNil(this.textileData) ? '' : this.textileData.name;\n }\n\n public canShowTextileDataAmount(): boolean {\n return !isNil(this.textileDataAmount);\n }\n\n public getTextileDataAmount(): string {\n return `(${this.textileDataAmount})`;\n }\n\n public onCreelMapViewModeChange(matButtonToggleChange: MatButtonToggleChange): void {\n this.showActiveCreelMap = !matButtonToggleChange.value;\n const coloredYarnSet = matButtonToggleChange.value ? this.textileData : this.mappedColoredYarnSet;\n\n this.setListOfCreelPositions(coloredYarnSet.overviewListColorSet.creelPositions.length, coloredYarnSet.overviewListColorSet, coloredYarnSet.overviewListYarnSet);\n this.creelPositionsGrid.api.redrawRows();\n }\n\n private isCreelPositionDifferentFromTheoreticalCreel(index: number): boolean {\n let reversedIndexPosition = null;\n\n if (this.hasCreelMap() && this.showActiveCreelMap) {\n reversedIndexPosition = this.textileData.overviewListColorSet.creelPositions.length - 1 - index;\n }\n\n return (\n this.hasCreelMap() &&\n this.showActiveCreelMap &&\n this.textileData.overviewListColorSet.creelPositions[reversedIndexPosition].position !== this.mappedColoredYarnSet.overviewListColorSet.creelPositions[reversedIndexPosition].position\n );\n }\n\n private connectRealtimeYarnConsumption(): void {\n this.getCalculatedYarnConsumption();\n }\n\n private getCalculatedYarnConsumption(): void {\n this.realtimeYarnConsumption\n .getCalculatedYarnConsumptionForProductionOrder()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((calculatedYarnConsumption: CalculatedYarnConsumptionForProductionOrder) => {\n const labelForTextAlignRightClass = 'align-content-end';\n\n const calculatedYarnConsumptionForColoredYarnSet = find(calculatedYarnConsumption.yarnConsumption, (yarnConsumption: YarnConsumptionWithColoredYarnSetId) =>\n isEqual(yarnConsumption.coloredYarnSetId, (this.textileData as OverviewListColoredYarnSet).id)\n );\n\n if (\n !isNil(calculatedYarnConsumptionForColoredYarnSet) &&\n !isNil(calculatedYarnConsumptionForColoredYarnSet.yarnConsumption) &&\n !isEmpty(calculatedYarnConsumptionForColoredYarnSet.yarnConsumption.creelPositions)\n ) {\n each(this.listOfCreelPositions, (creelPosition: OverviewListCreelPositionWithColorAndYarnTypes, index: number) => {\n const position = size(this.listOfCreelPositions) - index - 1;\n each(creelPosition.creelPositionForYarnTypes.items, (item: OverviewListYarnType) => {\n item.yarnConsumption = calculatedYarnConsumptionForColoredYarnSet.yarnConsumption.creelPositions[position].yarnConsumption;\n });\n });\n\n this.creelPositionsGrid.api.setGridOption('columnDefs', [\n ...this.getColumnDefsForListOfCreelPositions(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withValueGetter('data.creelPositionForYarnTypes')\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_CONSUMPTION')\n .withCellRenderer(GridYarnConsumptionComponent)\n .withMaxWidth(200)\n .withMinWidth(200)\n .withCellClass(labelForTextAlignRightClass)\n .build()\n ]);\n this.creelPositionsGrid.api.sizeColumnsToFit();\n }\n });\n }\n\n private updateListOfCreelPositions(): void {\n let colorSet: OverviewListColorSet;\n let yarnSet: OverviewListYarnSet;\n let numberOfCreelPositions: number;\n\n if (this.textileData instanceof OverviewListColorSet) {\n colorSet = this.textileData;\n numberOfCreelPositions = size(colorSet.creelPositions);\n this.setListOfCreelPositions(numberOfCreelPositions, colorSet, null);\n } else if (this.textileData instanceof OverviewListColoredYarnSet) {\n if (isNil(this.textileData.overviewListYarnSet)) {\n this.coloredYarnSets\n .getById(this.textileData.id)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((coloredYarnSet: ColoredYarnSet) => {\n this.textileData.overviewListYarnSet = coloredYarnSet.overviewListYarnSet;\n this.setMappedColoredYarnSetAndListCreelPositions();\n });\n } else {\n this.setMappedColoredYarnSetAndListCreelPositions();\n }\n } else if (this.textileData instanceof OverviewListYarnSet) {\n yarnSet = this.textileData;\n numberOfCreelPositions = size(yarnSet.creelPositions);\n this.setListOfCreelPositions(numberOfCreelPositions, null, yarnSet);\n }\n }\n\n private setListOfCreelPositions(numberOfCreelPositions: number, colorSet: OverviewListColorSet, yarnSet: OverviewListYarnSet): void {\n const creelPositions = this.getCreelPositions(numberOfCreelPositions, colorSet, yarnSet);\n\n if (!isNil(yarnSet) && !isNil(colorSet)) {\n this.setListOfCreelPositionsWithYarnSetDefined(creelPositions);\n } else {\n this.listOfCreelPositions = cloneDeep(creelPositions);\n }\n }\n\n private getCreelPositions(numberOfCreelPositions: number, colorSet: OverviewListColorSet, yarnSet: OverviewListYarnSet): OverviewListCreelPositionWithColorAndYarnTypes[] {\n return times(numberOfCreelPositions, (index: number) => {\n const position = numberOfCreelPositions - index - 1;\n return {\n creelPositionForColors: isNil(colorSet) ? null : colorSet.creelPositions[position],\n creelPositionForYarnTypes: isNil(yarnSet) ? null : yarnSet.creelPositions[position]\n };\n });\n }\n\n private setListOfCreelPositionsWithYarnSetDefined(creelPositions: OverviewListCreelPositionWithColorAndYarnTypes[]): void {\n this.listOfCreelPositions = map(cloneDeep(creelPositions), (creelPosition: OverviewListCreelPositionWithColorAndYarnTypes) => {\n const commonMultiple = leastCommonMultiple(size(creelPosition.creelPositionForColors.items), size(creelPosition.creelPositionForYarnTypes.items));\n\n this.replicateCreelPositionForColorsUntilLeastCommonMultiple(creelPosition, commonMultiple);\n this.replicateCreelPositioForYarnTypesUntilLeastCommonMultiple(creelPosition, commonMultiple);\n\n return creelPosition;\n });\n }\n\n private replicateCreelPositionForColorsUntilLeastCommonMultiple(creelPosition: OverviewListCreelPositionWithColorAndYarnTypes, leastCommonMultipleNumber: number): void {\n const creelPositionForColorsToRepeat = cloneDeep(creelPosition.creelPositionForColors.items);\n const numberOfRepititionsForCreelPositionForColors = leastCommonMultipleNumber / size(creelPosition.creelPositionForColors.items);\n\n for (let i = 0; i < numberOfRepititionsForCreelPositionForColors - 1; i++) {\n creelPosition.creelPositionForColors.items.push(...creelPositionForColorsToRepeat);\n }\n }\n\n private replicateCreelPositioForYarnTypesUntilLeastCommonMultiple(creelPosition: OverviewListCreelPositionWithColorAndYarnTypes, leastCommonMultipleNumber: number): void {\n const creelPositionForYarnTypesToRepeat = cloneDeep(creelPosition.creelPositionForYarnTypes.items);\n const numberOfRepititionsForCreelPositionForYarnTypes = leastCommonMultipleNumber / size(creelPosition.creelPositionForYarnTypes.items);\n\n for (let i = 0; i < numberOfRepititionsForCreelPositionForYarnTypes - 1; i++) {\n creelPosition.creelPositionForYarnTypes.items.push(...creelPositionForYarnTypesToRepeat);\n }\n }\n\n private initializeGridOptionsForCreelPositions(): void {\n this.gridOptionsForListOfCreelPositions = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfCreelPositions(), GridIdentifier.LIST_OF_CREEL_POSITIONS_FOR_TEXTILE_DATA_DETAIL, undefined, true)\n .withColumnMenu(['generalMenuTab'])\n .withGetRowHeight((params: RowHeightParams) => TextileDataDetailComponent.calculateRowHeight(params.data))\n .withOnGridSizeChanged(() => this.resizeGrid())\n .withNoRowsOverlay({\n titleParam: 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION'\n } as OverlayComponentParams)\n .withLoadingOverlay()\n .withoutGetRowId()\n .withoutSorting()\n .withLockPinnedColumns()\n .withRowClassRules({\n [this.initialCreelMappingInfoClassName]: (params: CellClassParams) => this.isCreelPositionDifferentFromTheoreticalCreel(Number(params.node.id))\n })\n .build();\n }\n\n private resizeGrid(): void {\n this.repositionDialogComponent.repositionDialog();\n }\n\n private getColumnDefsForListOfCreelPositions(): ColDef[] {\n const colDefs: ColDef[] = [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withValueGetter('data.creelPositionForColors.position')\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.POSITION')\n .withCellRenderer(({node}: ICellRendererParams) => this.getPositionForRowIndex(node.rowIndex))\n .withTooltipValueGetter(({rowIndex}: ITooltipParams) => this.getPositionForRowIndex(rowIndex))\n .withWidth(120)\n .withSuppressSizeToFit()\n .withSuppressMovable()\n .build()\n ];\n\n if (this.textileData instanceof OverviewListColorSet || this.textileData instanceof OverviewListColoredYarnSet) {\n colDefs.push(\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLOR_NAMES_HEADER')\n .withValueGetter((params: ValueGetterParams) => params.data.creelPositionForColors.items.map((color: Color) => color.name).join(', '), true)\n .withCellRenderer(GridColorsOfCreelPositionComponent)\n .build()\n );\n }\n if (this.textileData instanceof OverviewListColoredYarnSet || this.textileData instanceof OverviewListYarnSet) {\n colDefs.push(\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_TYPE')\n .withValueGetter((params: ValueGetterParams) => params.data.creelPositionForYarnTypes.items.map((yarnType: YarnType) => yarnType.name).join(', '), true)\n .withCellRenderer(GridYarnTypesOfCreelPositionComponent, (params: CellClassParams) => {\n return {\n isCreelPositionDifferentFromTheoreticalCreel: this.isCreelPositionDifferentFromTheoreticalCreel(Number(params.node.id))\n };\n })\n .build()\n );\n }\n return colDefs;\n }\n\n private hasCreelMap(): boolean {\n return !isNil(this.creelMap);\n }\n\n private setMappedColoredYarnSetAndListCreelPositions(): void {\n if (this.hasCreelMap()) {\n this.mappedColoredYarnSet = getMappedColoredYarnSet(this.textileData, this.creelMap, 'asc');\n this.setListOfCreelPositions(this.mappedColoredYarnSet.overviewListColorSet.creelPositions.length, this.mappedColoredYarnSet.overviewListColorSet, this.mappedColoredYarnSet.overviewListYarnSet);\n } else {\n this.setListOfCreelPositions(this.textileData.overviewListColorSet.creelPositions.length, this.textileData.overviewListColorSet, this.textileData.overviewListYarnSet);\n }\n }\n\n private getPositionForRowIndex(rowIndex: number): string {\n return `${this.listOfCreelPositions.length - rowIndex}`;\n }\n}\n","import {ChangeDetectorRef, EventEmitter, Injectable, SimpleChanges} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {BackendErrorCodeEnum} from '@application/helper/backend-error-code.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {NavigationNewItemData} from '@application/helper/navigation-helper/navigation-new-item-data.interface';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Article} from '@domain/article/article';\nimport {ConflictType} from '@domain/conflicts/conflict-type';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {ProductionScheduleStatus} from '@domain/production-schedule/production-schedule-status.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {PropertyValue} from '@domain/property-value';\nimport {SalesOrder} from '@domain/sales-order/sales-order';\nimport {WeaveQuality} from '@domain/textile-data/machine-quality/weave-quality';\nimport {MultiDeleteResponse} from '@domain/textile-data/multi-delete-reponse';\nimport {PageUrls} from '@domain/textile-data/page-urls';\nimport {DetailTextileData, OverviewListTextileData, TextileDataService, TextileDataWithMultiDeleteService} from '@domain/textile-data/textile-data';\nimport {Translations} from '@domain/textile-data/translations';\nimport {ConflictsRepository} from '@infrastructure/http/conflicts-repository';\nimport {GridModelRepository} from '@infrastructure/http/grid-model-repository';\nimport {WeaveStructures} from '@infrastructure/http/weave-structure/weave-structures';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {AdvancedSearchInput} from '@presentation/components/search-filters/advanced-search/advanced-search-input.enum';\nimport {AdvancedSearchDialogComponent} from '@presentation/components/search-filters/advanced-search/dialog/advanced-search-dialog.component';\nimport {SearchFiltersComponent} from '@presentation/components/search-filters/search-filters.component';\nimport {OverviewListOrderLine} from '@presentation/pages/texfab/orderbook/overview/overview-list-order-line';\nimport {OverviewListProductionOrderWeaving} from '@presentation/pages/texfab/production-order-lite/overview/overview-list-production-order-weaving';\nimport {OverviewListSalesOrder} from '@presentation/pages/texfab/sales-order/overview/overview-list-sales-order';\nimport {\n AgGridRowSelection,\n AlertDialogResult,\n AssertionUtils,\n BackendError,\n BaseComponent,\n Conflict,\n ConflictsDialogComponent,\n ConflictsDialogData,\n Device,\n DialogBuilder,\n DialogBuilderFactoryService,\n DialogType,\n FilterComponent,\n GridModel,\n GridOptionsBuilder,\n GridOptionsBuilderFactoryService,\n LoadingCellOverlayComponent,\n LoadingCellOverlayComponentParams,\n MobileColDef,\n NoDataOverlayComponentParams,\n OverlayComponentParamsAction,\n ResponsivenessViewMode,\n SaveType,\n ToastService,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {\n ColDef,\n FirstDataRenderedEvent,\n GetRowIdParams,\n GridApi,\n GridOptions,\n GridReadyEvent,\n IMultiFilterModel,\n IServerSideDatasource,\n RowClassParams,\n RowClickedEvent,\n RowSelectionOptions,\n SortModelItem\n} from 'ag-grid-community';\nimport {find, isEmpty, isNil, reduce, remove, size, some} from 'lodash-es';\nimport {BehaviorSubject, forkJoin, Observable, Subject} from 'rxjs';\nimport {debounceTime, map, switchMap, takeUntil} from 'rxjs/operators';\nimport {OverviewListMachineQuality} from '../machine-quality/overview/overview-list-machine-quality';\nimport {TextileDataType} from '../textile-data-type.enum';\n\n@Injectable({providedIn: 'root'})\nexport class TextileService extends BaseComponent {\n private gridModelForTextileDataOverviewFromService: GridApi;\n private gridOptions: GridOptions;\n private readonly textileDataTypesToEmitEventForOnAction = new Map([\n ['add', [TextileDataType.COMPANY_WEAVE_STRUCTURE, TextileDataType.EVENT_ALERT, TextileDataType.FINISHING, TextileDataType.WEAVE_PATTERN]],\n ['duplicate', [TextileDataType.EVENT_ALERT, TextileDataType.QUALITY_FINISHING]],\n ['edit', [TextileDataType.EVENT_ALERT, TextileDataType.COMPANY_WEAVE_STRUCTURE, TextileDataType.QUALITY_FINISHING]]\n ]);\n\n private readonly textileDataTypesToSaveNavigationNewItemData = [\n TextileDataType.WEAVE_PRODUCT,\n TextileDataType.COLOR_SET,\n TextileDataType.YARN_TYPE,\n TextileDataType.YARN_SET,\n TextileDataType.TUFT_PRODUCT,\n TextileDataType.MACHINE_QUALITY,\n TextileDataType.PATH_LAYOUT_TEMPLATE,\n TextileDataType.CREEL,\n TextileDataType.WEFT_COLORED_YARN_SET,\n TextileDataType.COLORED_YARN_SET,\n TextileDataType.CUSTOMER,\n TextileDataType.ARTICLE,\n TextileDataType.RESOURCE_TYPE,\n TextileDataType.COLOR,\n TextileDataType.DATA_UNIT_SETUP,\n TextileDataType.BUGGY\n ];\n\n private readonly OVERLAY_NO_DATA_SCALE_IF_ACTIONS_ARE_PRESENT = 0.6;\n\n private gridResizable: boolean;\n private disableActionButton: boolean;\n private dialogBuilder: DialogBuilder;\n private exportData: OverviewListTextileData[] = [];\n\n public constructor(\n private readonly router: Router,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly toastService: ToastService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly navigationHelperService: NavigationHelperService\n ) {\n super();\n }\n\n public getGridApi(): GridApi {\n return this.gridModelForTextileDataOverviewFromService;\n }\n\n public resetGridModelForTextileDataOverviewFromService(): void {\n this.gridModelForTextileDataOverviewFromService = null;\n }\n\n public executeActionForItem(action: keyof PageUrls, itemId: number | string, textileDataType: TextileDataType, eventEmitter: EventEmitter, managedRoute: boolean = false): void {\n if (this.textileDataTypesToEmitEventForOnAction.get(action).includes(textileDataType)) {\n eventEmitter.emit(action === 'add' ? undefined : this.gridModelForTextileDataOverviewFromService.getSelectedRows()[0]);\n } else {\n const pageUrl = LastModifiedCardUtils.getPageUrls(textileDataType)[action];\n if (action === 'add') {\n this.navigateToAddPage(pageUrl, textileDataType, managedRoute);\n } else {\n this.router.navigate([pageUrl.replace(':id', itemId.toString())]);\n }\n }\n }\n\n public canDisableDeleteButton(disableDeleteButton: boolean, textileDataType: TextileDataType, isSingleTextileDataRowSelected: boolean, selectedItem: OverviewListTextileData): boolean {\n let result = disableDeleteButton;\n\n if (textileDataType === TextileDataType.PRODUCTION_ORDER_WEAVING && isSingleTextileDataRowSelected) {\n const selectedProductionOrder = selectedItem as OverviewListProductionOrderWeaving;\n result = selectedProductionOrder.status !== ProductionScheduleStatus.CREATED && selectedProductionOrder.status !== ProductionScheduleStatus.TO_PLAN;\n }\n\n return result;\n }\n\n public removeConfirmation(\n selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[],\n textileDataType: TextileDataType,\n managedRoute: boolean,\n deleteItem: EventEmitter,\n textileDataService: TextileDataService,\n selectedTextileDataItems?: OverviewListTextileData[],\n translations?: Translations,\n reloadData?: EventEmitter,\n advancedSearchFilters?: PropertyValue[],\n infiniteGrid?: boolean,\n rowsSelected?: EventEmitter,\n amountOfTotalCreatedTextileDataItemsSubject?: BehaviorSubject,\n multiDelete: boolean = false,\n gridModelForTextileDataOverviewFromService: GridApi = null,\n isActionButton: boolean = false,\n currentSubscription?: Subscription\n ): void {\n if (AssertionUtils.isNullOrUndefined(translations)) {\n translations = LastModifiedCardUtils.getTranslations(textileDataType);\n }\n\n if (!AssertionUtils.isNullOrUndefined(gridModelForTextileDataOverviewFromService)) {\n this.gridModelForTextileDataOverviewFromService = gridModelForTextileDataOverviewFromService;\n }\n\n let object = this.getConfirmationDeleteMessage(selected, translations);\n let selectedObject: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[];\n if (!Array.isArray(selected)) {\n selectedObject = selected;\n } else if (selected.length === 1) {\n selectedObject = selected[0];\n }\n if (!AssertionUtils.isNullOrUndefined(selectedObject)) {\n if ('name' in selectedObject) {\n object = selectedObject.name;\n } else if ('technicalName' in selectedObject) {\n object = selectedObject.technicalName;\n }\n }\n\n const hasMultipleSelected = Array.isArray(selected) && selected.length > 1;\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object}),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n entities: hasMultipleSelected\n ? selected.map((data: OverviewListTextileData | DetailTextileData) => ({\n name: (data as Article).name,\n route: LastModifiedCardUtils.getPageUrls(textileDataType).edit.replace(':id', data.id.toString())\n }))\n : null,\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((result: AlertDialogResult) => {\n if (result === AlertDialogResult.CONFIRM) {\n let selectedRows = isActionButton ? [] : this.getSelectedRows();\n if (AssertionUtils.isEmpty(selectedRows)) {\n selectedRows = Array.isArray(selected) ? selected : [selected];\n }\n\n this.deleteSelectedTextileDataItem(\n selected,\n textileDataType,\n translations,\n managedRoute,\n deleteItem,\n textileDataService,\n reloadData,\n advancedSearchFilters,\n infiniteGrid,\n selectedRows,\n rowsSelected,\n multiDelete || hasMultipleSelected,\n isActionButton,\n selectedTextileDataItems,\n amountOfTotalCreatedTextileDataItemsSubject,\n currentSubscription\n );\n }\n });\n }\n\n public exportAllData(filterModel: IMultiFilterModel, exportGridApi: GridApi, textileDataService: TextileDataService, columnDefs: MobileColDef[]): Promise {\n return new Promise((resolve: () => void) => {\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n this.dialogBuilder.openAlertDialog({\n titleText: 'AGGRID.EXPORT',\n messageText: 'AGGRID.EXPORTMESSAGE',\n type: DialogType.INFORMATION\n });\n exportGridApi.setGridOption('columnDefs', columnDefs);\n const sortModel: SortModelItem[] = [];\n let startRow: number = 0;\n let endRow: number = 30;\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n\n this.fetchExportData(gridModel, exportGridApi, textileDataService, resolve);\n });\n }\n\n public showAdvancedSearch(\n iconForSearch: string,\n isTextileDataTypeProductionSchedule: boolean,\n advancedSearchFilters: PropertyValue[],\n filterComponent: FilterComponent,\n pickDensityUnit: Unit,\n reedDensityUnit: Unit,\n searchFilters: SearchFiltersComponent\n ): Promise {\n return new Promise((resolve: () => void) => {\n if (iconForSearch !== 'search') {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withWidth('800px')\n .withMaxHeight('100%')\n .withClass(['reposition-dialog', isTextileDataTypeProductionSchedule ? 'production-schedule-overview-advanced-search' : 'orderbook-overview-advanced-search'])\n .openDialog(RepositionDialogComponent, {\n advancedSearchFilters,\n defaultUnit: Unit.CENTIMETER,\n component: AdvancedSearchDialogComponent,\n sourceElement: filterComponent.iconElement.nativeElement,\n positionOfDialog: PositionOfDialog.BOTTOM,\n pickDensityUnit,\n reedDensityUnit\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((advancedSearchFiltersValues: PropertyValue[]) => {\n if (!isEmpty(advancedSearchFilters)) {\n advancedSearchFilters = advancedSearchFiltersValues;\n resolve();\n searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n }\n });\n }\n });\n }\n\n public updateGrid(changes: SimpleChanges, rowsSelected: EventEmitter, hideOverlay: () => void, changeDetectorRef: ChangeDetectorRef, selectedTextileDataItems: OverviewListTextileData[]): void {\n if (!isNil(this.gridModelForTextileDataOverviewFromService) && !isNil(this.gridOptions) && size(changes.columnDefs.currentValue) !== size(changes.columnDefs.previousValue)) {\n this.deselectRows(rowsSelected, selectedTextileDataItems);\n this.gridModelForTextileDataOverviewFromService.clearFocusedCell();\n if (!this.gridResizable) {\n this.gridModelForTextileDataOverviewFromService.sizeColumnsToFit();\n }\n this.gridModelForTextileDataOverviewFromService.resetRowHeights();\n }\n\n if (!isNil(this.gridModelForTextileDataOverviewFromService) && !isNil(changes.listOfTextileData) && changes.listOfTextileData.currentValue !== changes.listOfTextileData.previousValue) {\n if (this.gridModelForTextileDataOverviewFromService.getDisplayedRowCount() < 1) {\n this.showNoRowsOverlay();\n } else {\n hideOverlay();\n }\n\n changeDetectorRef.detectChanges();\n this.gridModelForTextileDataOverviewFromService.redrawRows();\n }\n\n if (changes.disableActionButton !== undefined) {\n this.disableActionButton = changes.disableActionButton.currentValue;\n }\n }\n\n public initialiseGridOptionsForTextileDataOverview(\n infiniteGrid: boolean,\n cacheBlockSize: number,\n rowHeight: (params: any) => number,\n autoSizeAllColumns: boolean,\n selectedTextileDataItems: OverviewListTextileData[],\n rowsSelected: EventEmitter,\n loadData: EventEmitter,\n responsivenessViewMode: ResponsivenessViewMode,\n columnDefs: MobileColDef[],\n textileDataType: TextileDataType,\n advancedSearchFilters: PropertyValue[],\n isTextileDataTypeProductionSchedule: boolean,\n changeDetectorRef: ChangeDetectorRef,\n gridIdentifier: GridIdentifier,\n dataSource: IServerSideDatasource,\n disableActionButton: boolean,\n gridResizable: boolean,\n getRowClass: (params: RowClassParams) => string | string[],\n rememberScrollPosition: boolean\n ): GridOptions {\n this.gridOptions = this.initialGridOptions(\n infiniteGrid,\n cacheBlockSize,\n rowHeight,\n autoSizeAllColumns,\n selectedTextileDataItems,\n rowsSelected,\n loadData,\n responsivenessViewMode,\n columnDefs,\n textileDataType,\n advancedSearchFilters,\n isTextileDataTypeProductionSchedule,\n changeDetectorRef,\n gridIdentifier,\n dataSource,\n disableActionButton,\n gridResizable,\n getRowClass,\n rememberScrollPosition\n ).build();\n\n return this.gridOptions;\n }\n\n public subscribeToFilterChanges(\n filterChangeSubject: Subject,\n iconForSearch: string,\n isTextileDataTypeProductionSchedule: boolean,\n advancedSearchFilters: PropertyValue[],\n searchFilters: SearchFiltersComponent,\n reloadData: EventEmitter,\n hideOverlay: () => void\n ): void {\n filterChangeSubject\n .asObservable()\n .pipe(debounceTime(500), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((filterText: string) => {\n if (iconForSearch !== 'search' || isTextileDataTypeProductionSchedule) {\n find(advancedSearchFilters, ['propertyName', AdvancedSearchInput.NAME]).propertyValue = filterText;\n\n if (iconForSearch !== 'search') {\n searchFilters.emitCheckIfFiltersAreTooBigForContainerEvent();\n }\n\n reloadData.emit(advancedSearchFilters);\n } else {\n this.gridModelForTextileDataOverviewFromService.setGridOption('quickFilterText', filterText);\n\n if (this.gridModelForTextileDataOverviewFromService.getDisplayedRowCount() < 1) {\n this.showNoRowsOverlay();\n } else {\n hideOverlay();\n }\n }\n });\n }\n\n public subscribeToDeviceChanges(responsivenessViewMode: ResponsivenessViewMode, columnDefs: MobileColDef[]): void {\n responsivenessViewMode\n .observeDeviceChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((device: Device) => {\n if (!isNil(this.gridModelForTextileDataOverviewFromService)) {\n this.gridModelForTextileDataOverviewFromService.setGridOption('columnDefs', this.getColumnDefs(device === Device.PHONE, columnDefs));\n }\n });\n }\n\n public setHeaderNameForColumn(columnName: string, headerName: string): void {\n this.gridModelForTextileDataOverviewFromService.getColumnDef(columnName).headerName = headerName;\n }\n\n public refreshHeader(): void {\n this.gridModelForTextileDataOverviewFromService.refreshHeader();\n Array.from(document.getElementsByClassName('ag-input-field-input')).forEach((obj: any) => {\n if (obj.attributes['disabled']) {\n return;\n }\n obj.setAttribute('placeholder', 'Search');\n });\n }\n\n public redrawRows(): void {\n this.gridModelForTextileDataOverviewFromService.redrawRows();\n }\n\n public showNoRowsOverlay(): void {\n this.gridModelForTextileDataOverviewFromService.showNoRowsOverlay();\n }\n\n public refreshServerSide(purge: boolean): void {\n this.gridModelForTextileDataOverviewFromService.refreshServerSide({purge});\n }\n\n public ensureIndexVisible(index: number): void {\n this.gridModelForTextileDataOverviewFromService.ensureIndexVisible(index);\n }\n\n public hideOverlay(): void {\n this.gridModelForTextileDataOverviewFromService.hideOverlay();\n }\n\n public deselectRows(rowsSelected: EventEmitter, selectedTextileDataItems: OverviewListTextileData[]): void {\n this.gridModelForTextileDataOverviewFromService?.deselectAll();\n selectedTextileDataItems?.splice(0, selectedTextileDataItems.length);\n rowsSelected?.emit(selectedTextileDataItems);\n }\n\n public navigateAndShowToast(\n saveType: SaveType,\n textileDataType: TextileDataType,\n translationKey: string,\n isEditing: boolean,\n name: string,\n id: number = null,\n navigateToSelectedRoute?: string\n ): void {\n if (saveType === SaveType.SAVE && !isEditing) {\n this.executeActionForItem('edit', id, textileDataType, null, null);\n } else if (saveType === SaveType.SAVE_AND_CLOSE) {\n if (this.textileDataTypesToSaveNavigationNewItemData.includes(textileDataType)) {\n this.navigationHelperService.savePartialState({newItemId: id});\n }\n if (navigateToSelectedRoute) {\n this.router.navigateByUrl(navigateToSelectedRoute);\n } else {\n this.navigationHelperService.navigateToPreviousRoute(LastModifiedCardUtils.getPageUrls(textileDataType)['overview']);\n }\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.executeActionForItem('add', undefined, textileDataType, null, null);\n }\n\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant(isEditing ? 'GENERAL.ACTIONS.EDITED_OBJECT' : 'GENERAL.ACTIONS.CREATED_OBJECT', {\n object: this.translate.instant(translationKey, {count: 1}),\n name,\n count: 1\n })\n });\n }\n\n public getConflicts(id: string | number, entityName: string, textileDataService: TextileDataService, translations: Translations, currentSubscription?: Subscription): void {\n (textileDataService as ConflictsRepository)\n .getConflicts(id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createCannotDeleteData(translations.entity, entityName, conflicts, ConflictType, currentSubscription));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n public setLoadingCellRendererParams(loadingCellRendererParams: LoadingCellOverlayComponentParams): void {\n if (this.gridModelForTextileDataOverviewFromService) {\n this.gridModelForTextileDataOverviewFromService.setGridOption('loadingCellRendererParams', loadingCellRendererParams);\n } else {\n this.gridOptions.loadingCellRendererParams = loadingCellRendererParams;\n }\n }\n\n private getObjectName(hasMultipleSelected: boolean, selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[], translations: Translations): string {\n if (!Array.isArray(selected)) {\n if (selected instanceof OverviewListMachineQuality || selected instanceof WeaveQuality) {\n return selected.technicalName;\n } else if (selected instanceof OverviewListOrderLine) {\n return selected.salesOrderLineReference;\n } else if (selected instanceof SalesOrder || selected instanceof OverviewListSalesOrder) {\n return selected.orderNumber.toString();\n } else {\n return selected.name;\n }\n } else {\n return this.getObjectNameForList(hasMultipleSelected, selected, translations);\n }\n }\n\n private getObjectNameForList(\n hasMultipleSelected: boolean,\n selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[],\n translations: Translations\n ): string {\n if (hasMultipleSelected) {\n return this.translate.instant(translations.delete, {count: 2}).toLowerCase();\n } else if (selected[0] instanceof OverviewListMachineQuality || selected[0] instanceof WeaveQuality) {\n return selected[0].technicalName;\n } else if (selected[0] instanceof OverviewListOrderLine) {\n return selected[0].salesOrderLineReference;\n } else if (selected[0] instanceof SalesOrder || selected[0] instanceof OverviewListSalesOrder) {\n return selected[0].orderNumber.toString();\n } else {\n return selected[0].name;\n }\n }\n\n private deleteSelectedTextileDataItem(\n selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[],\n textileDataType: TextileDataType,\n translations: Translations,\n managedRoute: boolean,\n deleteItem: EventEmitter,\n textileDataService: TextileDataService,\n reloadData: EventEmitter,\n advancedSearchFilters: PropertyValue[],\n infiniteGrid: boolean,\n selectedRows: any[],\n rowsSelected: EventEmitter,\n multiDelete: boolean,\n isActionButton: boolean,\n selectedTextileDataItems: OverviewListTextileData[] = [],\n amountOfTotalCreatedTextileDataItemsSubject: BehaviorSubject = new BehaviorSubject(0),\n currentSubscription?: Subscription\n ): void {\n const selectedItemId = (Array.isArray(selected) ? selected[0] : selected).id;\n\n if (this.deleteItemEmit(textileDataType)) {\n deleteItem.emit(selectedItemId);\n } else if (textileDataType === TextileDataType.WEAVE_PATTERN || textileDataType === TextileDataType.EVENT_ALERT) {\n deleteItem.emit(selectedItemId);\n this.textileDataItemHasBeenRemoved(\n reloadData,\n advancedSearchFilters,\n infiniteGrid,\n selectedRows,\n translations,\n rowsSelected,\n textileDataType,\n selectedTextileDataItems,\n selected,\n isActionButton\n );\n } else {\n let deleteRequest: Observable;\n\n if (multiDelete && Array.isArray(selected)) {\n deleteRequest = (textileDataService as TextileDataWithMultiDeleteService).deleteMulti(selected.map((value: OverviewListTextileData | DetailTextileData) => value.id) as number[]);\n } else if (textileDataType === TextileDataType.WEAVE_STRUCTURE && managedRoute) {\n deleteRequest = (textileDataService as WeaveStructures).manageDelete(Number(selectedItemId)).pipe(map(() => []));\n } else {\n deleteRequest = textileDataService.delete(selectedItemId).pipe(map(() => []));\n }\n\n deleteRequest.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe({\n next: (multiDeleteResponses: MultiDeleteResponse[]) => {\n this.handleDeletionResponse(\n selectedItemId,\n multiDeleteResponses,\n textileDataType,\n translations,\n deleteItem,\n textileDataService,\n reloadData,\n advancedSearchFilters,\n infiniteGrid,\n selectedRows,\n rowsSelected,\n multiDelete,\n selectedTextileDataItems,\n amountOfTotalCreatedTextileDataItemsSubject,\n selected,\n isActionButton\n );\n },\n error: (errorMessage: BackendError) => {\n this.handleDeletionErrorResponse(errorMessage, selectedItemId, textileDataType, textileDataService, translations, currentSubscription);\n }\n });\n }\n }\n\n private handleDeletionResponse(\n selectedItemId: string | number,\n multiDeleteResponses: MultiDeleteResponse[],\n textileDataType: TextileDataType,\n translations: Translations,\n deleteItem: EventEmitter,\n textileDataService: TextileDataService,\n reloadData: EventEmitter,\n advancedSearchFilters: PropertyValue[],\n infiniteGrid: boolean,\n selectedRows: any[],\n rowsSelected: EventEmitter,\n multiDelete: boolean,\n selectedTextileDataItems: OverviewListTextileData[],\n amountOfTotalCreatedTextileDataItemsSubject: BehaviorSubject,\n selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[],\n isActionButton: boolean\n ): void {\n if (deleteItem && !multiDelete) {\n deleteItem.emit(selectedItemId);\n }\n\n let deletedRows = selectedRows;\n\n if (multiDeleteResponses.length > 0) {\n const succesfullDeletedIds = multiDeleteResponses\n .filter((multiDeleteResponse: MultiDeleteResponse) => multiDeleteResponse.statusCode === 200)\n .map((multiDeleteResponse: MultiDeleteResponse) => multiDeleteResponse.id);\n\n if (succesfullDeletedIds.length !== selectedRows.length) {\n this.handleConflics(multiDeleteResponses, succesfullDeletedIds, textileDataService, selectedRows, rowsSelected, translations, selectedTextileDataItems);\n }\n\n deletedRows = deletedRows.filter((row: any) => succesfullDeletedIds.includes(row.id));\n }\n\n amountOfTotalCreatedTextileDataItemsSubject?.next(amountOfTotalCreatedTextileDataItemsSubject.value - deletedRows.length);\n if ((multiDelete && deletedRows.length > 0) || !multiDelete) {\n this.textileDataItemHasBeenRemoved(\n reloadData,\n advancedSearchFilters,\n infiniteGrid,\n selectedRows,\n translations,\n rowsSelected,\n textileDataType,\n selectedTextileDataItems,\n selected,\n isActionButton\n );\n }\n }\n\n private handleDeletionErrorResponse(\n errorMessage: BackendError,\n selectedItemId: string | number,\n textileDataType: TextileDataType,\n textileDataService: TextileDataService,\n translations: Translations,\n currentSubscription?: Subscription\n ): void {\n if (\n (BackendErrorCodeEnum[errorMessage.errorContext.error?.errorCode as string] === BackendErrorCodeEnum.LINKED_ENTITIES ||\n BackendErrorCodeEnum[errorMessage.errorContext.errorCode as string] === BackendErrorCodeEnum.LINKED_ENTITIES) &&\n LastModifiedCardUtils.canShowConflictsDialog(textileDataType)\n ) {\n this.getConflicts(selectedItemId, errorMessage.errorContext.error?.entityName ?? errorMessage.errorContext.entityName, textileDataService, translations, currentSubscription);\n } else {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: this.translate.instant(translations.entity, {count: 1}).toLowerCase()}),\n messageText: errorMessage.errorContext?.messages?.length > 0 ? errorMessage.errorContext.messages[0] : errorMessage.message,\n type: DialogType.INFORMATION\n });\n }\n }\n\n private handleConflics(\n multiDeleteResponses: MultiDeleteResponse[],\n succesfullDeletedIds: number[],\n textileDataService: TextileDataService,\n selectedRows: any[],\n rowsSelected: EventEmitter,\n translations: Translations,\n selectedTextileDataItems: OverviewListTextileData[]\n ): void {\n const unsuccesfullDeletedIds = multiDeleteResponses.filter((multiDeleteResponse: MultiDeleteResponse) => !succesfullDeletedIds.includes(multiDeleteResponse.id));\n\n forkJoin(unsuccesfullDeletedIds.map((multiDeleteResponse: MultiDeleteResponse) => (textileDataService as ConflictsRepository).getConflicts(multiDeleteResponse.id)))\n .pipe(\n switchMap((conflicts: Conflict[][]) => {\n const entities = selectedRows.filter((row: any) => !succesfullDeletedIds.includes(row.id)).map((row: any) => row.name);\n\n this.deselectRows(rowsSelected, selectedTextileDataItems);\n\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createCannotDeleteData(translations.entity, entities, conflicts, ConflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n private textileDataItemHasBeenRemoved(\n reloadData: EventEmitter,\n advancedSearchFilters: PropertyValue[],\n infiniteGrid: boolean,\n selectedRows: any[],\n translations: Translations,\n rowsSelected: EventEmitter,\n textileDataType: TextileDataType,\n selectedTextileDataItems: OverviewListTextileData[],\n selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[],\n isActionButton: boolean\n ): void {\n const hasMultipleSelected = Array.isArray(selected) && selected.length > 1;\n\n if (reloadData) {\n reloadData.emit(advancedSearchFilters);\n\n if (!infiniteGrid) {\n this.gridModelForTextileDataOverviewFromService.applyTransaction({\n remove: selectedRows\n });\n }\n\n if (!isActionButton || (isActionButton && selectedRows === this.gridModelForTextileDataOverviewFromService.getSelectedRows())) {\n this.deselectRows(rowsSelected, selectedTextileDataItems);\n }\n } else {\n this.navigationHelperService.navigateToPreviousRoute(LastModifiedCardUtils.getPageUrls(textileDataType)['overview']);\n }\n\n if (hasMultipleSelected) {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT_WITH_AMOUNT', {\n object: this.getObjectName(hasMultipleSelected, selected, translations),\n amount: selected.length,\n count: 1\n })\n });\n } else {\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.DELETED_OBJECT', {\n object: `${this.translate.instant(translations.delete, {count: 1})} ${this.getObjectName(hasMultipleSelected, selected, translations)}`,\n count: 1\n })\n });\n }\n }\n\n private resizeGrid(autoSizeAllColumns: boolean, gridResizable: boolean): void {\n if (!isNil(this.gridModelForTextileDataOverviewFromService) && !gridResizable) {\n this.gridModelForTextileDataOverviewFromService.sizeColumnsToFit();\n }\n if (autoSizeAllColumns && !gridResizable) {\n this.gridModelForTextileDataOverviewFromService.autoSizeAllColumns();\n }\n }\n\n private onRowClicked(event: RowClickedEvent, selectedTextileDataItems: OverviewListTextileData[], rowsSelected: EventEmitter, changeDetectorRef: ChangeDetectorRef): void {\n const target = event.event.target as HTMLElement;\n\n if (event?.node?.data && !Object.values(target.classList).includes('color-preview')) {\n const textileDataOfRow = event.node.data;\n\n if (event.node.isSelected() && !some(selectedTextileDataItems, {id: textileDataOfRow.id})) {\n if ((this.getGridApi().getGridOption('rowSelection') as RowSelectionOptions).mode === AgGridRowSelection.MULTIPLE) {\n selectedTextileDataItems.push(textileDataOfRow);\n } else {\n selectedTextileDataItems[0] = textileDataOfRow;\n }\n\n rowsSelected.emit(selectedTextileDataItems);\n } else {\n if (selectedTextileDataItems.length > 1) {\n remove(selectedTextileDataItems, {id: textileDataOfRow.id});\n rowsSelected.emit(selectedTextileDataItems);\n } else {\n this.deselectRows(rowsSelected, selectedTextileDataItems);\n }\n }\n\n changeDetectorRef.markForCheck();\n }\n }\n\n private onGridReadyEvent(params: GridReadyEvent, infiniteGrid: boolean, loadData: EventEmitter, gridResizable: boolean): void {\n this.gridModelForTextileDataOverviewFromService = params.api;\n if (!gridResizable) {\n this.gridModelForTextileDataOverviewFromService.sizeColumnsToFit();\n }\n\n if (infiniteGrid) {\n loadData.emit();\n }\n }\n\n private getColumnDefs(isPhone: boolean, columnDefs: MobileColDef[]): ColDef[] {\n return reduce(\n columnDefs,\n (columnDefsValue: ColDef[], textileDataOverviewColDef: MobileColDef) => {\n if ((isPhone && textileDataOverviewColDef.mobile) || !isPhone) {\n const {mobile, ...columnDef} = textileDataOverviewColDef;\n\n columnDefsValue.push(columnDef);\n }\n\n return columnDefsValue;\n },\n []\n );\n }\n\n private getOverlayNoDataCreateParamKey(textileDataType: TextileDataType): string {\n return {\n [TextileDataType.PRODUCTION_SCHEDULE]: 'PRODUCTION_ORDER.PRODUCTION_ORDER',\n [TextileDataType.COLOR_SET]: 'TEXTILE_DATA.COLOR_SET.COLOR_SET',\n [TextileDataType.COLOR]: 'TEXTILE_DATA.COLOR.COLOR',\n [TextileDataType.COLORED_YARN_SET]: 'TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET',\n [TextileDataType.WEFT_COLORED_YARN_SET]: 'TEXTILE_DATA.WEFT_COLORED_YARN_SET.WEFT_COLORED_YARN_SET',\n [TextileDataType.CREEL]: 'TEXTILE_DATA.CREEL.CREEL',\n [TextileDataType.FINISHING_TEMPLATE]: 'TEXTILE_DATA.FINISHING_TEMPLATE.FINISHING_TEMPLATE',\n [TextileDataType.FINISHING]: 'TEXTILE_DATA.FINISHING.FINISHING',\n [TextileDataType.MACHINE_QUALITY]: 'TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY',\n [TextileDataType.QUALITY_FINISHING]: 'TEXTILE_DATA.FINISHING.FINISHING',\n [TextileDataType.YARN_SET]: 'TEXTILE_DATA.YARN_SET.YARN_SET',\n [TextileDataType.YARN_TYPE]: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE',\n [TextileDataType.ORDERBOOK]: 'SALES_ORDERS.ORDER_LINES.ORDER_LINE',\n [TextileDataType.COMPANY_WEAVE_STRUCTURE]: 'MACHINE.MACHINE',\n [TextileDataType.WEAVE_PRODUCT]: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT',\n [TextileDataType.PRODUCT_CONFIGURATION]: 'PRODUCT_CONFIGURATION.PRODUCT_CONFIGURATION',\n [TextileDataType.WEAVE_STRUCTURE]: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE',\n [TextileDataType.WEAVE_PATTERN]: 'TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_PATTERN',\n [TextileDataType.DATA_UNIT_SETUP_CATALOG]: 'BMSCONFIG.DATA_UNIT_SETUP.DATA_UNIT_SETUP',\n [TextileDataType.EVENT]: 'BMSCONFIG.EVENTS.EVENT',\n [TextileDataType.EVENT_ALERT]: 'BMSCONFIG.EVENTS.ALERT',\n [TextileDataType.DEVICE_TEMPLATE_COUNTER]: 'BMSCONFIG.DEVICE_TEMPLATES.COUNTERS.COUNTERS',\n [TextileDataType.DEVICE_TEMPLATE_COUNTER_CATALOG]: 'BMSCONFIG.DEVICE_TEMPLATES.COUNTERS.COUNTERS',\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION]: 'BMSCONFIG.DEVICE_TEMPLATES.CONFIGURATION.CONFIGURATIONS',\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION_CATALOG]: 'BMSCONFIG.DEVICE_TEMPLATES.CONFIGURATION.CONFIGURATIONS'\n }[textileDataType];\n }\n\n private getOverlayNoDataActions(textileDataType: TextileDataType): OverlayComponentParamsAction[] {\n const addAction: OverlayComponentParamsAction = {\n key: textileDataType,\n titleKey: this.translate.instant('GENERAL.ACTIONS.ADD_OBJECT', {object: this.translate.instant(this.getOverlayNoDataCreateParamKey(textileDataType) ?? '', {count: 1})?.toLowerCase()}),\n disabled: () => this.disableActionButton,\n isPrimary: true\n };\n\n return {\n [TextileDataType.EVENT]: [addAction],\n [TextileDataType.EVENT_ALERT]: [addAction],\n [TextileDataType.QUALITY_FINISHING]: [addAction],\n [TextileDataType.DEVICE_TEMPLATE_COUNTER]: [addAction],\n [TextileDataType.DEVICE_TEMPLATE_COUNTER_CATALOG]: [addAction],\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION]: [addAction],\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION_CATALOG]: [addAction]\n }[textileDataType];\n }\n\n private getOverlayNoDataHideDescriptionCreateParamKey(textileDataType: TextileDataType): boolean {\n return {\n [TextileDataType.COMPANY_WEAVE_STRUCTURE]: true,\n [TextileDataType.EVENT]: true,\n [TextileDataType.EVENT_ALERT]: true,\n [TextileDataType.QUALITY_FINISHING]: true,\n [TextileDataType.DEVICE_TEMPLATE_COUNTER]: true,\n [TextileDataType.DEVICE_TEMPLATE_COUNTER_CATALOG]: true,\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION]: true,\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION_CATALOG]: true\n }[textileDataType];\n }\n\n private deleteItemEmit(textileDataType: TextileDataType): boolean {\n return {\n [TextileDataType.QUALITY_FINISHING]: true,\n [TextileDataType.DEVICE_TEMPLATE_COUNTER]: true,\n [TextileDataType.DEVICE_TEMPLATE_COUNTER_CATALOG]: true,\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION]: true,\n [TextileDataType.DEVICE_TEMPLATE_CONFIGURATION_CATALOG]: true\n }[textileDataType];\n }\n\n private hasFilterActive(advancedSearchFilters: PropertyValue[]): boolean {\n return advancedSearchFilters.some((searchFilter: PropertyValue) => AdvancedSearchUtils.hasValue(searchFilter));\n }\n\n private getSelectedRows(): any[] {\n return this.gridModelForTextileDataOverviewFromService?.getSelectedRows() ?? [];\n }\n\n private initialGridOptions(\n infiniteGrid: boolean,\n cacheBlockSize: number,\n rowHeight: (params: any) => number,\n autoSizeAllColumns: boolean,\n selectedTextileDataItems: OverviewListTextileData[],\n rowsSelected: EventEmitter,\n loadData: EventEmitter,\n responsivenessViewMode: ResponsivenessViewMode,\n columnDefs: MobileColDef[],\n textileDataType: TextileDataType,\n advancedSearchFilters: PropertyValue[],\n isTextileDataTypeProductionSchedule: boolean,\n changeDetectorRef: ChangeDetectorRef,\n gridIdentifier: GridIdentifier,\n dataSource: IServerSideDatasource,\n disableActionButton: boolean,\n gridResizable: boolean,\n getRowClass: (params: RowClassParams) => string | string[],\n rememberScrollPosition: boolean\n ): GridOptionsBuilder {\n this.gridResizable = gridResizable;\n this.disableActionButton = disableActionButton;\n\n const gridOptions = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefs(responsivenessViewMode.isPhone, columnDefs), gridIdentifier, undefined, this.gridResizable)\n .withGetRowId((params: GetRowIdParams) => params.data.id.toString())\n .withGetRowHeight(rowHeight)\n .withOnGridSizeChanged(() => this.resizeGrid(autoSizeAllColumns, this.gridResizable))\n .withOnRowClicked((event: RowClickedEvent) => this.onRowClicked(event, selectedTextileDataItems, rowsSelected, changeDetectorRef))\n .withOnGridReady((params: GridReadyEvent) => this.onGridReadyEvent(params, infiniteGrid, loadData, this.gridResizable))\n .withLoadingCellRenderer('customLoadingCellRenderer')\n .withComponents({\n customLoadingCellRenderer: LoadingCellOverlayComponent\n })\n .withNoRowsOverlay({\n titleParam: this.getOverlayNoDataCreateParamKey(textileDataType),\n hideDescription: this.getOverlayNoDataHideDescriptionCreateParamKey(textileDataType),\n actions: this.getOverlayNoDataActions(textileDataType),\n scale: this.getOverlayNoDataActions(textileDataType) ? this.OVERLAY_NO_DATA_SCALE_IF_ACTIONS_ARE_PRESENT : 1,\n filterDescriptionParam: {\n paramKeyCreate: this.getOverlayNoDataCreateParamKey(textileDataType)\n },\n isAnyFilterPresent: () => this.gridModelForTextileDataOverviewFromService?.isAnyFilterPresent() || this.hasFilterActive(advancedSearchFilters)\n } as NoDataOverlayComponentParams)\n .withHeaderHeight(40)\n .withOnFirstDataRendered(({api}: FirstDataRenderedEvent) => (autoSizeAllColumns && !this.gridResizable ? api.autoSizeAllColumns() : null))\n .withGetRowClass(getRowClass);\n\n if (!infiniteGrid) {\n gridOptions.withLoadingOverlay();\n }\n\n if (dataSource) {\n gridOptions.withServerSideDataSource(cacheBlockSize, dataSource);\n }\n\n if (rememberScrollPosition) {\n gridOptions.withRememberStateForNavigationHelper();\n }\n\n return gridOptions;\n }\n\n private navigateToAddPage(pageUrl: string, textileDataType: TextileDataType, managedRoute: boolean): void {\n if (textileDataType === TextileDataType.WEAVE_STRUCTURE && managedRoute) {\n this.router.navigateByUrl(RouteUtils.paths.texStyle.weaveStructure.manageAddWeaveStructure.absolutePath);\n } else {\n this.router.navigateByUrl(pageUrl);\n }\n }\n\n private fetchExportData(gridModel: GridModel, exportGridApi: GridApi, textileDataService: TextileDataService, resolve: () => void): void {\n (textileDataService as GridModelRepository)\n .get(gridModel)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfTextileData: any[]) => {\n listOfTextileData.forEach((color: any) => {\n this.exportData.push(color);\n });\n if (listOfTextileData.length < 29) {\n exportGridApi.updateGridOptions({\n rowData: this.exportData,\n cacheBlockSize: this.exportData.length\n });\n exportGridApi.exportDataAsCsv();\n this.exportData = [];\n resolve();\n this.dialogBuilder.close();\n } else {\n gridModel.startRow += 30;\n gridModel.endRow += 30;\n this.fetchExportData(gridModel, exportGridApi, textileDataService, resolve);\n }\n });\n }\n\n private getConfirmationDeleteMessage(selected: OverviewListTextileData | DetailTextileData | OverviewListTextileData[] | DetailTextileData[], translations: Translations): string {\n if (!Array.isArray(selected) || (Array.isArray(selected) && selected.length < 2)) {\n return this.translate.instant(translations.delete, {count: 1}).toLowerCase();\n }\n\n return `${selected.length} ${this.translate.instant(translations.delete, {count: 2}).toLowerCase()}`;\n }\n}\n","import {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {findIndex, isEqual, reduce} from 'lodash-es';\n\nexport class CreelPositionsHelper {\n public getPositionOfMaterialTypeCreelInList(materialTypeCreel: HorizontalPositionOfCreelPosition, list: HorizontalPositionOfCreelPosition[]): number {\n const uniqueListOfMaterialTypeCreelPositions = this.getUniqueListOfMaterialTypeCreelPositions(list);\n\n return findIndex(uniqueListOfMaterialTypeCreelPositions, (materialTypeCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result = false;\n\n if (materialTypeCreel instanceof HorizontalPositionOfColorCreelPosition && materialTypeCreelPosition instanceof HorizontalPositionOfColorCreelPosition) {\n result = isEqual(materialTypeCreel.color.id, materialTypeCreelPosition.color.id);\n } else if (materialTypeCreel instanceof HorizontalPositionOfYarnTypeCreelPosition && materialTypeCreelPosition instanceof HorizontalPositionOfYarnTypeCreelPosition) {\n result = isEqual(materialTypeCreel.yarnType.id, materialTypeCreelPosition.yarnType.id);\n }\n\n return result;\n });\n }\n\n private getUniqueListOfMaterialTypeCreelPositions(\n groupAndMaterialTypeCreelPositions: HorizontalPositionOfCreelPosition[],\n materialTypeCreelPositionsCache: Record = {}\n ): HorizontalPositionOfCreelPosition[] {\n return reduce(\n groupAndMaterialTypeCreelPositions,\n (uniqueGroupAndMaterialTypeCreelPositions: HorizontalPositionOfCreelPosition[], groupOrMaterialTypeCreel: HorizontalPositionOfCreelPosition) => {\n if (groupOrMaterialTypeCreel instanceof HorizontalPositionOfGroupCreelPosition) {\n uniqueGroupAndMaterialTypeCreelPositions.push(...this.getUniqueListOfMaterialTypeCreelPositions(groupOrMaterialTypeCreel.group, materialTypeCreelPositionsCache));\n } else if (groupOrMaterialTypeCreel instanceof HorizontalPositionOfColorCreelPosition && !materialTypeCreelPositionsCache[groupOrMaterialTypeCreel.color.id]) {\n materialTypeCreelPositionsCache[groupOrMaterialTypeCreel.color.id] = true;\n uniqueGroupAndMaterialTypeCreelPositions.push(groupOrMaterialTypeCreel);\n } else if (groupOrMaterialTypeCreel instanceof HorizontalPositionOfYarnTypeCreelPosition && !materialTypeCreelPositionsCache[groupOrMaterialTypeCreel.yarnType.id]) {\n materialTypeCreelPositionsCache[groupOrMaterialTypeCreel.yarnType.id] = true;\n uniqueGroupAndMaterialTypeCreelPositions.push(groupOrMaterialTypeCreel);\n }\n\n return uniqueGroupAndMaterialTypeCreelPositions;\n },\n []\n );\n }\n}\n","@if (canShowDetailsOfCreelPosition()) {\n \n
\n \n
\n
\n

{{ 'TEXTILE_DATA.MATERIAL_SET.CREEL_POSITION' | bmsTranslate: {count: 1, position: getCreelPositionViewIndex()} }}

\n @if (canShowWarning()) {\n \n }\n
\n
\n @if (hasSelectedMaterialSetTypesOrGroups(creelPosition.horizontalPositionsOfCreelPosition)) {\n
\n @if (canShowDuplicate(creelPosition.horizontalPositionsOfCreelPosition)) {\n

\n {{ 'GENERAL.ACTIONS.DUPLICATE' | bmsTranslate }}\n

\n }\n

{{ 'GENERAL.GROUP' | bmsTranslate: {count: 1} }}

\n

\n {{ 'GENERAL.ACTIONS.DELETE' | bmsTranslate }}\n

\n
\n }\n\n @if (canEditMaterialSet) {\n

\n {{ 'GENERAL.ACTIONS.ADD_OBJECT' | bmsTranslate: {object: 'GENERAL.GROUP' | bmsTranslate: {count: 1} | lowercase} }}\n

\n }\n
\n
\n \n {{ (isMaterialSetOfTypeColorSet() ? 'TEXTILE_DATA.COLOR.COLOR' : 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE') | bmsTranslate: {count: 1} }}\n \n {{ 'GENERAL.AMOUNT' | bmsTranslate }}\n
\n\n \n
\n
\n
\n @if (canShowMaterialType(entry)) {\n \n }\n\n @if (entry.isGroup()) {\n \n }\n
\n
\n
\n \n\n @if (canShowCreelPreview()) {\n
\n \n
\n }\n \n \n
\n}\n","import {CdkDragDrop, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';\nimport {AfterViewInit, Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {MaterialSet} from '@domain/textile-data/textile-data';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {CreelPositionWithColorsAndYarnTypes} from '@presentation/pages/textile-data/colored-yarn-set/add/creel-position-with-colors-and-yarn-types';\nimport {UuidUtils} from '@vdw/angular-component-library';\nimport {cloneDeep, each, findIndex, isEmpty, isEqual, isNil, remove, size} from 'lodash-es';\nimport {CreelPositionsHelper} from './creel-positions.helper';\n\n@Component({\n selector: 'app-creel-position-details',\n templateUrl: './creel-position-details.component.html',\n styleUrls: ['./creel-position-details.component.scss']\n})\nexport class CreelPositionDetailsComponent implements OnChanges, AfterViewInit {\n @Input() public materialSet: MaterialSet;\n @Input() public creelPosition: CreelPosition;\n @Input() public canShowError = false;\n @Input() public canEditMaterialSet: boolean;\n @Output() public creelPositionHasBeenChanged: EventEmitter = new EventEmitter();\n public creelPositionWithColorsAndYarnTypes: CreelPositionWithColorsAndYarnTypes;\n public isDraggingOver = false;\n public droplistsRecursive: string[] = [];\n\n private readonly DEFAULT_AMOUNT = 1;\n private readonly creelPositionHelper: CreelPositionsHelper;\n\n public constructor() {\n this.creelPositionHelper = new CreelPositionsHelper();\n }\n\n public ngAfterViewInit(): void {\n this.setDroplistsRecursive();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.setCreelPreview();\n\n const creelPosition = changes.creelPosition;\n\n if (!isNil(creelPosition) && !creelPosition.firstChange && !isEqual(creelPosition.previousValue, creelPosition.currentValue)) {\n this.deselectAllPreviouslySelectedMaterialTypesAndGroups(creelPosition.previousValue.horizontalPositionsOfCreelPosition);\n }\n }\n\n public drop(event: CdkDragDrop): void {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n }\n this.emitCreelPositionChanges();\n }\n\n public setCreelPreview(): void {\n this.creelPositionWithColorsAndYarnTypes = {\n creelPositionForColors: this.isMaterialSetOfTypeColorSet() ? this.creelPosition : null,\n creelPositionForYarnTypes: this.isMaterialSetOfTypeYarnSet() ? this.creelPosition : null\n };\n }\n\n public canShowDetailsOfCreelPosition(): boolean {\n return !isNil(this.creelPosition);\n }\n\n public getCreelPositionViewIndex(): number {\n return findIndex(this.materialSet.creelPositions, this.creelPosition) + 1;\n }\n\n public canShowWarning(): boolean {\n return this.canShowError && isEmpty(this.creelPosition.horizontalPositionsOfCreelPosition);\n }\n\n public canShowDuplicate(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): boolean {\n const selectedHorizontalPositionsOfCreelPosition = horizontalPositionsOfCreelPosition.find((item: HorizontalPositionOfCreelPosition) => item.isSelected);\n\n if (selectedHorizontalPositionsOfCreelPosition.isGroup()) {\n return (selectedHorizontalPositionsOfCreelPosition as HorizontalPositionOfGroupCreelPosition).group.length > 1;\n }\n\n return true;\n }\n\n public addEmptyGroupToSelectedCreelPosition(): void {\n this.creelPosition.horizontalPositionsOfCreelPosition.unshift(new HorizontalPositionOfGroupCreelPosition(this.DEFAULT_AMOUNT, []));\n\n this.emitCreelPositionChanges();\n this.setDroplistsRecursive();\n }\n\n public groupSelectedMaterialSetTypesAndGroups(): void {\n const selectedMaterialSetTypes: HorizontalPositionOfCreelPosition[] = cloneDeep(this.getAllSelectedMaterialSetTypesAndGroups(this.creelPosition.horizontalPositionsOfCreelPosition));\n\n this.resetAllSelectedMaterialSetTypesAndGroups(selectedMaterialSetTypes);\n\n this.creelPosition.horizontalPositionsOfCreelPosition.unshift(new HorizontalPositionOfGroupCreelPosition(this.DEFAULT_AMOUNT, selectedMaterialSetTypes));\n\n this.deleteSelectedMaterialSetTypesAndGroups(this.creelPosition.horizontalPositionsOfCreelPosition);\n }\n\n public duplicateSelectedMaterialSetTypesAndGroups(): void {\n each(this.getAllSelectedMaterialSetTypesAndGroups(this.creelPosition.horizontalPositionsOfCreelPosition), (item: HorizontalPositionOfCreelPosition) =>\n this.creelPosition.horizontalPositionsOfCreelPosition.unshift(cloneDeep(item))\n );\n\n this.resetAllSelectedMaterialSetTypesAndGroups(this.creelPosition.horizontalPositionsOfCreelPosition);\n }\n\n public deleteSelectedMaterialSetTypesAndGroups(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): void {\n remove(horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n let result = false;\n\n if (horizontalPositionOfCreelPosition.isSelected) {\n result = true;\n } else if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n if (size(horizontalPositionOfGroupCreelPosition.group) > 0) {\n this.deleteSelectedMaterialSetTypesAndGroups(horizontalPositionOfGroupCreelPosition.group);\n } else {\n result = true;\n }\n }\n\n return result;\n });\n\n this.resetAllSelectedMaterialSetTypesAndGroups(horizontalPositionsOfCreelPosition);\n }\n\n public hasSelectedMaterialSetTypesOrGroups(horizontalPositionsOfCreelPositions: HorizontalPositionOfCreelPosition[]): boolean {\n let result = false;\n\n for (let i = 0; i < size(horizontalPositionsOfCreelPositions); i++) {\n const horizontalPositionsOfCreelPosition = horizontalPositionsOfCreelPositions[i];\n\n if (horizontalPositionsOfCreelPosition.isSelected) {\n result = true;\n break;\n } else if (horizontalPositionsOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition = horizontalPositionsOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n if (size(horizontalPositionOfGroupCreelPosition.group) > 0) {\n result = this.hasSelectedMaterialSetTypesOrGroups(horizontalPositionOfGroupCreelPosition.group);\n\n if (result) {\n break;\n }\n }\n }\n }\n\n return result;\n }\n\n public canShowCreelPreview(): boolean {\n let result = false;\n\n if (!isNil(this.creelPosition)) {\n const horizontalPositionOfCreelPosition = this.creelPosition.horizontalPositionsOfCreelPosition[0];\n\n if (size(this.creelPosition.horizontalPositionsOfCreelPosition) === 1 && horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n if (size(horizontalPositionOfGroupCreelPosition.group) > 0) {\n result = true;\n }\n } else if (!isEmpty(this.creelPosition.horizontalPositionsOfCreelPosition)) {\n result = true;\n }\n }\n\n return result;\n }\n\n public emitCreelPositionChanges(): void {\n this.setDroplistsRecursive();\n this.creelPositionHasBeenChanged.emit();\n }\n\n public deselectAllSelectedMaterialTypesAndGroups(): void {\n this.deselectAllPreviouslySelectedMaterialTypesAndGroups(this.creelPosition.horizontalPositionsOfCreelPosition);\n }\n\n public canShowMaterialType(horizontalPositionOfCreelPosition: any): boolean {\n return horizontalPositionOfCreelPosition.isColor() || horizontalPositionOfCreelPosition.isYarnType();\n }\n\n public getAllSelectedMaterialSetTypesAndGroups(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): HorizontalPositionOfCreelPosition[] {\n const selectedColorsAndGroups: HorizontalPositionOfCreelPosition[] = [];\n\n each(horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n if (horizontalPositionOfCreelPosition.isSelected) {\n selectedColorsAndGroups.push(horizontalPositionOfCreelPosition);\n } else if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n each(this.getAllSelectedMaterialSetTypesAndGroups(horizontalPositionOfGroupCreelPosition.group), (item: HorizontalPositionOfCreelPosition) => selectedColorsAndGroups.push(item));\n }\n });\n\n return selectedColorsAndGroups;\n }\n\n public getPositionOfMaterialTypeCreel(materialTypeCreel: HorizontalPositionOfCreelPosition): number {\n return this.creelPositionHelper.getPositionOfMaterialTypeCreelInList(materialTypeCreel, this.getMaterialTypeCreel().horizontalPositionsOfCreelPosition);\n }\n\n public isMaterialSetOfTypeColorSet(): boolean {\n return this.materialSet instanceof ColorSet;\n }\n\n private setDroplistsRecursive(): void {\n setTimeout(() => {\n this.droplistsRecursive = ['droplistCreelPositions'];\n this.creelPosition?.horizontalPositionsOfCreelPosition.forEach((childItem: HorizontalPositionOfGroupCreelPosition) => {\n childItem.id = UuidUtils.generateV4Uuid();\n this.droplistsRecursive = this.droplistsRecursive.concat(this.getIdsRecursive(childItem));\n });\n\n this.droplistsRecursive.reverse();\n });\n }\n\n private getIdsRecursive(item: HorizontalPositionOfGroupCreelPosition): string[] {\n let ids = item.group ? [item.id] : [];\n item.group?.forEach((childItem: HorizontalPositionOfGroupCreelPosition) => {\n ids = ids.concat(this.getIdsRecursive(childItem));\n });\n return ids;\n }\n\n private getMaterialTypeCreel(): CreelPosition {\n return this.isMaterialSetOfTypeColorSet() ? this.creelPositionWithColorsAndYarnTypes.creelPositionForColors : this.creelPositionWithColorsAndYarnTypes.creelPositionForYarnTypes;\n }\n\n private resetAllSelectedMaterialSetTypesAndGroups(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): void {\n each(horizontalPositionsOfCreelPosition, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n horizontalPositionOfCreelPosition.isSelected = false;\n\n if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n horizontalPositionOfGroupCreelPosition.isSelected = false;\n this.resetAllSelectedMaterialSetTypesAndGroups(horizontalPositionOfGroupCreelPosition.group);\n }\n });\n\n this.emitCreelPositionChanges();\n }\n\n private isMaterialSetOfTypeYarnSet(): boolean {\n return this.materialSet instanceof YarnSet;\n }\n\n private deselectAllPreviouslySelectedMaterialTypesAndGroups(horizontalPositionOfCreelPositions: HorizontalPositionOfCreelPosition[]): void {\n each(horizontalPositionOfCreelPositions, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n horizontalPositionOfCreelPosition.isSelected = false;\n\n if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition: HorizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n this.deselectAllPreviouslySelectedMaterialTypesAndGroups(horizontalPositionOfGroupCreelPosition.group);\n }\n });\n }\n}\n","
\n
\n \n
\n
\n
\n {{ getMaterialTypePositionViewIndex() }}\n
\n \n \n {{ horizontalPositionOfMaterialTypeCreelPosition.color.getRgbAsCommaSeparatedValue() }}\n \n
\n\n
\n
{{ getMaterialTypePositionViewIndex() }}
\n \n
\n
\n
\n \n\n {{ horizontalPositionOfMaterialTypeCreelPosition.amount }}\n\n \n
\n
\n","import {Component, EventEmitter, forwardRef, Inject, Input, OnChanges, OnInit, Output} from '@angular/core';\nimport {CreelPositionDetailsComponent} from '@presentation/pages/textile-data/material-set/add/creel-position-details/creel-position-details.component';\nimport {convertRGBToHexadecimalColorCode} from '@vdw/angular-component-library';\nimport {isEmpty, isEqual, size} from 'lodash-es';\n\n@Component({\n selector: 'app-material-type',\n templateUrl: './material-type.component.html',\n styleUrls: ['./material-type.component.scss']\n})\nexport class MaterialTypeComponent implements OnInit, OnChanges {\n @Input() public horizontalPositionOfMaterialTypeCreelPosition: any;\n @Input() public indexOfHorizontalPositionOfCreelPosition: number;\n @Input() public canEditMaterialSet: boolean;\n @Output() public typeChanges: EventEmitter = new EventEmitter();\n\n public materialTypeName: string;\n\n private readonly maxMaterialTypeNameSize = 10;\n\n public constructor(@Inject(forwardRef(() => CreelPositionDetailsComponent)) private creelPositionDetailsComponent: CreelPositionDetailsComponent) {}\n\n public ngOnInit(): void {\n this.typeChanges.emit();\n this.setMaterialTypeName();\n }\n\n public ngOnChanges(): void {\n this.typeChanges.emit();\n }\n\n public getPreviewColorCode(): string {\n return convertRGBToHexadecimalColorCode(this.horizontalPositionOfMaterialTypeCreelPosition.color.rgb);\n }\n\n public getMaterialTypePositionViewIndex(): number {\n return this.indexOfHorizontalPositionOfCreelPosition + 1;\n }\n\n public incrementAmount(event: MouseEvent): void {\n event.stopPropagation();\n this.horizontalPositionOfMaterialTypeCreelPosition.amount += 1;\n\n this.creelPositionDetailsComponent.emitCreelPositionChanges();\n }\n\n public decrementAmount(event: MouseEvent): void {\n event.stopPropagation();\n\n const amount = this.horizontalPositionOfMaterialTypeCreelPosition.amount;\n this.horizontalPositionOfMaterialTypeCreelPosition.amount = !isEqual(amount, 1) ? amount - 1 : 1;\n\n this.creelPositionDetailsComponent.emitCreelPositionChanges();\n }\n\n public canDecrementAmount(): boolean {\n return !isEqual(this.horizontalPositionOfMaterialTypeCreelPosition.amount, 1) && this.canEditMaterialSet;\n }\n\n public onMaterialTypeClick(isSelected: boolean, event: MouseEvent): void {\n if (this.canEditMaterialSet) {\n event.stopPropagation();\n\n const {metaKey, altKey} = event;\n\n if (metaKey || altKey) {\n this.horizontalPositionOfMaterialTypeCreelPosition.isSelected = !isSelected;\n } else {\n const selectedMaterialTypes = this.creelPositionDetailsComponent.getAllSelectedMaterialSetTypesAndGroups(this.creelPositionDetailsComponent.creelPosition.horizontalPositionsOfCreelPosition);\n this.creelPositionDetailsComponent.deselectAllSelectedMaterialTypesAndGroups();\n\n this.horizontalPositionOfMaterialTypeCreelPosition.isSelected = isEmpty(selectedMaterialTypes) || isEqual(size(selectedMaterialTypes), 1) ? !isSelected : true;\n }\n }\n }\n\n public canShowSelectedIndicator(): boolean {\n return this.horizontalPositionOfMaterialTypeCreelPosition.isSelected;\n }\n\n private setMaterialTypeName(): void {\n if (this.horizontalPositionOfMaterialTypeCreelPosition.isColor()) {\n this.materialTypeName = this.horizontalPositionOfMaterialTypeCreelPosition.color.name;\n } else if (this.horizontalPositionOfMaterialTypeCreelPosition.isYarnType()) {\n this.materialTypeName = this.horizontalPositionOfMaterialTypeCreelPosition.yarnType.name;\n }\n }\n}\n","\n
\n
\n
\n\n
\n \n {{ 'GENERAL.GROUP' | bmsTranslate: {count: 1} }}\n
\n\n \n\n
\n \n\n {{ horizontalPositionOfGroupCreelPosition.amount }}\n\n \n
\n
\n\n
\n
\n
\n
\n \n\n \n
\n
\n
\n\n","import {CdkDragDrop, CdkDragEnter, CdkDragStart, CdkDropList, moveItemInArray, transferArrayItem} from '@angular/cdk/drag-drop';\nimport {Component, EventEmitter, forwardRef, Inject, Input, Output} from '@angular/core';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {CreelPositionDetailsComponent} from '@presentation/pages/textile-data/material-set/add/creel-position-details/creel-position-details.component';\nimport {each, isEmpty, isEqual, size} from 'lodash-es';\nimport {asapScheduler} from 'rxjs';\nimport {CreelPositionsHelper} from '../creel-positions.helper';\n\n@Component({\n selector: 'app-material-type-group',\n templateUrl: './material-type-group.component.html',\n styleUrls: ['./material-type-group.component.scss']\n})\nexport class MaterialTypeGroupComponent {\n @Input() public horizontalPositionOfGroupCreelPosition: HorizontalPositionOfGroupCreelPosition;\n @Input() public horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[];\n @Input() public canShowError = false;\n @Input() public isDraggingOver = false;\n @Input() public canEditMaterialSet: boolean;\n @Input() public connectedDroplist: CdkDropList[] = [];\n\n @Output() public groupChanges: EventEmitter = new EventEmitter();\n\n private readonly creelPositionHelper: CreelPositionsHelper;\n\n public constructor(@Inject(forwardRef(() => CreelPositionDetailsComponent)) public creelPositionDetailsComponent: CreelPositionDetailsComponent) {\n this.creelPositionHelper = new CreelPositionsHelper();\n }\n\n public emitGroupChanges(): void {\n this.groupChanges.emit();\n }\n\n public incrementAmount(event: MouseEvent): void {\n event.stopPropagation();\n\n this.horizontalPositionOfGroupCreelPosition.amount += 1;\n\n this.creelPositionDetailsComponent.emitCreelPositionChanges();\n }\n\n public decrementAmount(event: MouseEvent): void {\n event.stopPropagation();\n\n const amount = this.horizontalPositionOfGroupCreelPosition.amount;\n this.horizontalPositionOfGroupCreelPosition.amount = !isEqual(amount, 1) ? amount - 1 : 1;\n\n this.creelPositionDetailsComponent.emitCreelPositionChanges();\n }\n\n public canDecrementAmount(): boolean {\n return !isEqual(this.horizontalPositionOfGroupCreelPosition.amount, 1) && this.canEditMaterialSet;\n }\n\n public onMaterialTypeGroupClick(isSelected: boolean, event: MouseEvent): void {\n if (this.canEditMaterialSet) {\n event.stopPropagation();\n\n const {metaKey, altKey} = event;\n\n if (metaKey || altKey) {\n this.horizontalPositionOfGroupCreelPosition.isSelected = !isSelected;\n } else {\n const selectedMaterialTypes = this.creelPositionDetailsComponent.getAllSelectedMaterialSetTypesAndGroups(this.creelPositionDetailsComponent.creelPosition.horizontalPositionsOfCreelPosition);\n this.creelPositionDetailsComponent.deselectAllSelectedMaterialTypesAndGroups();\n\n this.horizontalPositionOfGroupCreelPosition.isSelected = isEmpty(selectedMaterialTypes) || isEqual(size(selectedMaterialTypes), 1) ? !isSelected : true;\n }\n\n this.selectAllChildMaterialTypesAndGroups(this.horizontalPositionOfGroupCreelPosition.group, isSelected);\n }\n }\n\n public canShowSelectedIndicator(): boolean {\n return this.horizontalPositionOfGroupCreelPosition.isSelected;\n }\n\n public canShowWarning(): boolean {\n return this.canShowError && size(this.horizontalPositionOfGroupCreelPosition.group) <= 1;\n }\n\n public getPositionOfMaterialTypeCreel(materialTypeCreel: HorizontalPositionOfCreelPosition): number {\n return this.creelPositionHelper.getPositionOfMaterialTypeCreelInList(materialTypeCreel, this.horizontalPositionsOfCreelPosition);\n }\n\n public drop(event: CdkDragDrop): void {\n if (event.previousContainer === event.container) {\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\n } else {\n transferArrayItem(event.previousContainer.data, event.container.data, event.previousIndex, event.currentIndex);\n }\n this.emitGroupChanges();\n }\n\n public onDragEntered(event: CdkDragEnter): void {\n this.relinkOwnDroplistReference(event.container);\n }\n\n public onDragStarted(event: CdkDragStart): void {\n this.relinkOwnDroplistReference(event.source.dropContainer);\n }\n\n private relinkOwnDroplistReference(droplist: CdkDropList): void {\n const siblings = (droplist.connectedTo as string[]).map((c: string) => (CdkDropList as any)._dropLists.find((d: CdkDropList) => d.id === c)) as CdkDropList[];\n const ref = droplist._dropListRef;\n asapScheduler.schedule(() => {\n ref.connectedTo(siblings.map((list: any) => list._dropListRef));\n });\n }\n\n private selectAllChildMaterialTypesAndGroups(group: HorizontalPositionOfCreelPosition[], isSelected: boolean): void {\n each(group, (horizontalPositionOfCreelPosition: HorizontalPositionOfCreelPosition) => {\n horizontalPositionOfCreelPosition.isSelected = !isSelected;\n\n if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionOfGroupCreelPosition: HorizontalPositionOfGroupCreelPosition = horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition;\n\n this.selectAllChildMaterialTypesAndGroups(horizontalPositionOfGroupCreelPosition.group, isSelected);\n }\n });\n }\n}\n","
\n \n
\n
\n
\n
\n
\n\n \n
\n","import {Component, Input} from '@angular/core';\nimport {ColorSet} from '@domain/textile-data/color-set/color-set';\nimport {CreelPosition, MaterialType} from '@domain/textile-data/creel/creel-position';\nimport {MaterialSet} from '@domain/textile-data/textile-data';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {defaultTo, isEqual, size, take} from 'lodash-es';\n\n@Component({\n selector: 'app-preview-for-creel-position',\n templateUrl: './preview-for-creel-position.component.html',\n styleUrls: ['./preview-for-creel-position.component.scss']\n})\nexport class PreviewForCreelPositionComponent {\n @Input() public creelPosition: CreelPosition;\n @Input() public materialSet: MaterialSet;\n @Input() public maxMaterialTypesToShow: number;\n @Input() public gapBetweenColorsInPixels = 8;\n\n private readonly maxMaterialTypeNameSize = 10;\n\n public getMaterialTypesToShow(): MaterialType[] {\n return take(this.creelPosition.getUniqueItems(), this.getAmountOfMaterialTypesToShow());\n }\n\n public moreMaterialTypesAvailable(): boolean {\n return this.getAmountOfMaterialTypesToShow() < size(this.creelPosition.getUniqueItems());\n }\n\n public showMaterialTypeName(): string {\n return this.getMaterialTypesToShow()\n .map((materialType: MaterialType) => materialType.name)\n .join(', ');\n }\n\n public isMaterialSetOfTypeColorSet(): boolean {\n return this.materialSet instanceof ColorSet;\n }\n\n public isMaterialSetOfTypeYarnSet(): boolean {\n return this.materialSet instanceof YarnSet;\n }\n\n public canShowNameOfFirstColor(): boolean {\n return this.isMaterialSetOfTypeColorSet() && isEqual(size(this.creelPosition.getUniqueItems()), 1);\n }\n\n public canShowMaterialTypeName(): boolean {\n return this.canShowNameOfFirstColor() || this.isMaterialSetOfTypeYarnSet();\n }\n\n private getAmountOfMaterialTypesToShow(): number {\n return defaultTo(this.maxMaterialTypesToShow, size(this.creelPosition.getUniqueItems()));\n }\n}\n","\n
\n
\n\n
\n
\n \n \n\n \n
\n\n \n\n
\n \n
\n
\n\n","import {Component, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Output, Renderer2, ViewChild} from '@angular/core';\nimport {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {MaterialSet} from '@domain/textile-data/textile-data';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {Color} from '@vdw/angular-component-library';\nimport {each, filter, indexOf, isEmpty, isEqual, range, size} from 'lodash-es';\n\n@Component({\n selector: 'app-creel-position',\n templateUrl: './creel-position.component.html',\n styleUrls: ['./creel-position.component.scss']\n})\nexport class CreelPositionComponent implements OnInit, OnDestroy {\n @Input() public creelPosition: CreelPosition;\n @Input() public creelPositionIndex: number;\n @Input() public materialSet: MaterialSet;\n @Input() public canShowError = false;\n @Input() public canEditMaterialSet: boolean;\n @Output() public selectedCreelPositionChanged: EventEmitter = new EventEmitter();\n @Output() public deselectAllSelectedCreelPositions: EventEmitter = new EventEmitter();\n @Output() public creelPositionHasBeenChanged: EventEmitter = new EventEmitter();\n @ViewChild('creelPositionElement', {static: true}) public creelPositionElement: ElementRef;\n\n private selectedCreelPosition: CreelPosition;\n private onDropListener: () => void;\n private onDragEnterListener: () => void;\n private onDragLeaveListener: () => void;\n private onDragOverListener: () => void;\n\n private readonly renderer: Renderer2;\n private readonly dropIndicatorClass = 'drop-indicator';\n\n public constructor(renderer: Renderer2) {\n this.renderer = renderer;\n }\n\n public ngOnInit(): void {\n this.attachListeners();\n }\n\n public ngOnDestroy(): void {\n this.detachListeners();\n }\n\n public onCreelPositionClick(selectedCreelPosition: CreelPosition, isSelected: boolean, event: MouseEvent): void {\n const {metaKey, altKey, shiftKey} = event;\n\n if (metaKey || altKey) {\n this.onMetaOrAltKeyDown(selectedCreelPosition, isSelected);\n } else if (shiftKey) {\n this.onShiftKeyDown(selectedCreelPosition);\n } else {\n this.onNoKeyDown(selectedCreelPosition, isSelected);\n }\n\n this.selectedCreelPositionChanged.emit();\n }\n\n public canShowWarning(creelPosition: CreelPosition): boolean {\n return this.canShowError && (isEmpty(creelPosition.horizontalPositionsOfCreelPosition) || this.containsGroupWithNoOrOneMaterial(creelPosition.horizontalPositionsOfCreelPosition));\n }\n\n private containsGroupWithNoOrOneMaterial(horizontalPositionsOfCreelPosition: HorizontalPositionOfCreelPosition[]): boolean {\n let result = false;\n\n for (const horizontalPositionOfCreelPosition of horizontalPositionsOfCreelPosition) {\n if (horizontalPositionOfCreelPosition.isGroup()) {\n const horizontalPositionsOfGroupCreelPosition: HorizontalPositionOfCreelPosition[] = (horizontalPositionOfCreelPosition as HorizontalPositionOfGroupCreelPosition).group;\n\n if (size(horizontalPositionsOfGroupCreelPosition) <= 1 || this.containsGroupWithNoOrOneMaterial(horizontalPositionsOfGroupCreelPosition)) {\n result = true;\n break;\n }\n }\n }\n\n return result;\n }\n\n private onDrop(event: any): void {\n const materialType = JSON.parse(event.dataTransfer.getData('materialType'));\n let horizontalPositionOfMaterialSetPosition: HorizontalPositionOfColorCreelPosition | HorizontalPositionOfYarnTypeCreelPosition;\n\n if (isEqual(materialType.type, 'color')) {\n const color: Color = materialType.data as Color;\n\n horizontalPositionOfMaterialSetPosition = new HorizontalPositionOfColorCreelPosition(1, new Color(color.id, color.name, color.rgb, color.used));\n } else if (isEqual(materialType.type, 'yarnType')) {\n const yarnType: OverviewListYarnType = materialType.data as OverviewListYarnType;\n\n horizontalPositionOfMaterialSetPosition = new HorizontalPositionOfYarnTypeCreelPosition(\n 1,\n new OverviewListYarnType(yarnType.id, yarnType.name, yarnType.yarnCount, yarnType.yarnCountUnit, yarnType.threads)\n );\n }\n\n const repeatedHorizontalCreelPosition = filter(this.creelPosition.horizontalPositionsOfCreelPosition, (horizontalPosition: HorizontalPositionOfCreelPosition) =>\n isEqual(horizontalPosition, horizontalPositionOfMaterialSetPosition)\n );\n if (isEmpty(repeatedHorizontalCreelPosition)) {\n this.creelPosition.horizontalPositionsOfCreelPosition.unshift(horizontalPositionOfMaterialSetPosition);\n this.creelPositionHasBeenChanged.emit();\n }\n\n this.renderer.removeClass(this.creelPositionElement.nativeElement, this.dropIndicatorClass);\n }\n\n private onDragEnter(event: any): void {\n event.stopPropagation();\n this.renderer.addClass(this.creelPositionElement.nativeElement, this.dropIndicatorClass);\n }\n\n private onDragLeave(event: any): void {\n event.stopPropagation();\n this.renderer.removeClass(this.creelPositionElement.nativeElement, this.dropIndicatorClass);\n }\n\n private onDragOver(event: any): void {\n event.preventDefault();\n }\n\n private attachListeners(): void {\n this.onDropListener = this.renderer.listen(this.creelPositionElement.nativeElement, 'drop', (event: any) => this.onDrop(event));\n this.onDragEnterListener = this.renderer.listen(this.creelPositionElement.nativeElement, 'dragenter', (event: any) => this.onDragEnter(event));\n this.onDragLeaveListener = this.renderer.listen(this.creelPositionElement.nativeElement, 'dragleave', (event: any) => this.onDragLeave(event));\n this.onDragOverListener = this.renderer.listen(this.creelPositionElement.nativeElement, 'dragover', (event: any) => this.onDragOver(event));\n }\n\n private detachListeners(): void {\n this.onDropListener();\n this.onDragEnterListener();\n this.onDragLeaveListener();\n this.onDragOverListener();\n }\n\n private onMetaOrAltKeyDown(selectedCreelPosition: CreelPosition, isSelected: boolean): void {\n this.selectedCreelPosition = selectedCreelPosition;\n selectedCreelPosition.isSelected = !isSelected;\n }\n\n private onShiftKeyDown(selectedCreelPosition: CreelPosition): void {\n const indexOfFirstSelectedCreelPosition = indexOf(this.materialSet.creelPositions, this.selectedCreelPosition);\n let indexOfCurrentlySelectedCreelPosition = indexOf(this.materialSet.creelPositions, selectedCreelPosition);\n\n if (!isEqual(indexOfFirstSelectedCreelPosition, -1)) {\n this.deselectAllSelectedCreelPositions.emit();\n\n if (indexOfFirstSelectedCreelPosition < indexOfCurrentlySelectedCreelPosition) {\n indexOfCurrentlySelectedCreelPosition++;\n } else {\n indexOfCurrentlySelectedCreelPosition--;\n }\n\n each(range(indexOfFirstSelectedCreelPosition, indexOfCurrentlySelectedCreelPosition), (index: number) => {\n this.materialSet.creelPositions[index].isSelected = true;\n });\n }\n }\n\n private onNoKeyDown(selectedCreelPosition: CreelPosition, isSelected: boolean): void {\n const hasMoreThanOneCreelPositionSelected = filter(this.materialSet.creelPositions, ['isSelected', true]);\n this.deselectAllSelectedCreelPositions.emit();\n\n selectedCreelPosition.isSelected = isEmpty(hasMoreThanOneCreelPositionSelected) || isEqual(size(hasMoreThanOneCreelPositionSelected), 1) ? !isSelected : true;\n\n this.selectedCreelPosition = selectedCreelPosition;\n }\n}\n","
\n
\n {{ 'TEXTILE_DATA.MATERIAL_SET.ARRANGE_CREEL_POSITIONS' | bmsTranslate }}\n
\n
\n \n \n \n
\n
\n","import {CdkDragDrop, moveItemInArray} from '@angular/cdk/drag-drop';\nimport {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {MaterialSet} from '@domain/textile-data/textile-data';\nimport {indexOf, isEqual, isNil, map, size} from 'lodash-es';\n\n@Component({\n selector: 'app-creel-positions',\n templateUrl: './creel-positions.component.html',\n styleUrls: ['./creel-positions.component.scss']\n})\nexport class CreelPositionsComponent {\n @Input() public materialSet: MaterialSet;\n @Input() public canShowErrorForCreelPosition: (creelPositionIndex: number) => boolean;\n @Input() public canEditMaterialSet: boolean;\n @Output() public selectedCreelPositionChanged: EventEmitter = new EventEmitter();\n @Output() public creelPositionHasBeenChanged: EventEmitter = new EventEmitter();\n\n public canShowSkeletonView(): boolean {\n return isNil(this.materialSet);\n }\n\n public hasCreelPositions(): boolean {\n return !isEqual(this.materialSet.getSizeOfCreelPositions(), 0);\n }\n\n public onDropCreelPosition(event: CdkDragDrop): void {\n const amountOfCreelPositions = size(this.materialSet.creelPositions);\n const previousIndex = amountOfCreelPositions - 1 - event.previousIndex;\n const currentIndex = amountOfCreelPositions - 1 - event.currentIndex;\n moveItemInArray(this.materialSet.creelPositions, previousIndex, currentIndex);\n }\n\n public deselectAllSelectedCreelPositions(): void {\n map(this.materialSet.creelPositions, (creelPosition: CreelPosition) => (creelPosition.isSelected = false));\n }\n\n public getActualCreelPositionIndex(creelPosition: CreelPosition): number {\n return indexOf(this.materialSet.creelPositions, creelPosition);\n }\n}\n","
\n
\n
\n \n
\n \n \n \n\n
\n \n\n \n
\n
\n","import {Component} from '@angular/core';\nimport {GridModelRepository} from '@infrastructure/http/grid-model-repository';\nimport {GridSelectPreviewCellRendererParams} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview-cell-renderer-params';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {AgGridUtils, Color, convertRGBToHexadecimalColorCode, GridModel} from '@vdw/angular-component-library';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {GridApi, GridReadyEvent, IServerSideDatasource, IServerSideGetRowsParams, SortModelItem} from 'ag-grid-community';\nimport {join, map} from 'lodash-es';\nimport {Observable, Subject} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\n\n@Component({\n selector: 'app-select-grid-preview',\n templateUrl: './grid-select-preview.component.html',\n styleUrls: ['./grid-select-preview.component.scss']\n})\nexport class GridSelectPreviewComponent implements ICellRendererAngularComp {\n public item: TEntity;\n public isColorPreview: boolean;\n\n private params: GridSelectPreviewCellRendererParams;\n\n public agInit(params: GridSelectPreviewCellRendererParams): void {\n this.item = params.data as TEntity;\n this.isColorPreview = params.isColor;\n this.params = params;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public getAltLabel(): string {\n if (this?.item instanceof Color) {\n const color: Color = this.item;\n return Object.values(color.rgb).join(', ');\n } else if (this?.item instanceof OverviewListYarnType) {\n const yarnType: OverviewListYarnType = this.item;\n return join(\n map(yarnType.threads, (thread: {rawMaterial: string}) => thread.rawMaterial),\n ', '\n );\n }\n }\n\n public canShowPreview(): boolean {\n return this.item !== undefined;\n }\n\n public getPreviewBoxShadow(color: Color): string {\n return `0 3px 6px -2px ${convertRGBToHexadecimalColorCode(color.rgb)}`;\n }\n\n public hasAlreadyAddedItem(item: TEntity): boolean {\n return this.params.hasAlreadyAddedItem(item);\n }\n\n public canShowControls(): boolean {\n return this.params.canShowControls();\n }\n\n public clickSubtract(item: TEntity): void {\n this.params.subtractClick(item);\n }\n\n public clickAdd(item: TEntity): void {\n this.params.addClick(item);\n }\n\n public getLabelName(): string {\n return this.item.name;\n }\n\n public getColorHexCode(): string {\n if (this?.item instanceof Color) {\n const color: Color = this.item;\n return color.hexadecimalColorCode;\n }\n }\n\n public static getServerSideDataSource(\n items: GridModelRepository,\n unsub: Observable,\n maxFetchPerSlice: number = 20,\n onRequestCompleted: () => void = null\n ): IServerSideDatasource {\n return {\n getRows: (params: IServerSideGetRowsParams): void => {\n const sortModel: SortModelItem[] = params.request.sortModel;\n const startRow: number = params.request.startRow;\n const endRow: number = params.request.endRow;\n const filterModel = params.request.filterModel;\n const gridModel: GridModel = new GridModel(startRow, endRow, sortModel, filterModel);\n const gridApi: GridApi = params.api;\n\n items\n .get(gridModel)\n .pipe(takeUntil(unsub))\n .subscribe((item: TItem[]) => {\n if (startRow === 0 && item.length === 0) {\n gridApi?.showNoRowsOverlay();\n }\n if (item.length > 0) {\n gridApi?.hideOverlay();\n }\n\n let er: number = -1;\n if (item.length < maxFetchPerSlice) {\n er = startRow + item.length;\n }\n\n params.success({\n rowData: item,\n rowCount: er\n });\n\n gridApi?.sizeColumnsToFit();\n onRequestCompleted();\n });\n }\n };\n }\n\n public static onGridReady(param: GridReadyEvent, gridApi: GridApi, search: Subject, unsub: Subject): void {\n if (param.api) {\n gridApi = param.api;\n }\n AgGridUtils.initSimpleSearchSubject(gridApi, search, unsub);\n }\n}\n","\n \n
\n
\n

{{ 'TEXTILE_DATA.COLOR.COLOR' | bmsTranslate: {count: 2} }}

\n
\n

\n {{ 'GENERAL.ACTIONS.CREATE_OBJECT' | bmsTranslate: {object: 'TEXTILE_DATA.COLOR.COLOR' | bmsTranslate: {count: 1} | lowercase} }}\n

\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {Component, EventEmitter, Inject, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {HorizontalPositionOfColorCreelPosition} from '@domain/textile-data/color-set/horizontal-position-of-color-creel-position';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {COLORS, Colors} from '@infrastructure/http/color/colors';\nimport {GridSelectPreviewCellRendererParams} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview-cell-renderer-params';\nimport {GridSelectPreviewComponent} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview.component';\nimport {\n BaseComponent,\n ColDefBuilderFactoryService,\n Color,\n ColorPickerPopupService,\n FilterComponent,\n GridOptionsBuilderFactoryService,\n LoadingCellOverlayComponent,\n NoDataOverlayComponentParams\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, DndSourceOnRowDragParams, GridOptions, GridReadyEvent, IServerSideDatasource} from 'ag-grid-community';\nimport {each, filter, flatMap, isEmpty, isEqual, isNil, isUndefined, remove, size} from 'lodash-es';\nimport {Observable, of, Subject} from 'rxjs';\nimport {filter as rxJsFilter, map, switchMap, takeUntil, tap} from 'rxjs/operators';\n\n@Component({\n selector: 'app-select-color',\n templateUrl: './select-color.component.html',\n styleUrls: ['./select-color.component.scss']\n})\nexport class SelectColorComponent extends BaseComponent implements OnInit {\n @Input() public creelPositions: CreelPosition[];\n @Output() public creelPositionHasBeenChanged: EventEmitter = new EventEmitter();\n @ViewChild('filterForListOfColors') public filterForListOfColors: FilterComponent;\n @ViewChild('colorsGrid') public grid!: AgGridAngular;\n\n public gridOptionsForListOfColors: GridOptions;\n public loadingForTheFirstTime: boolean = true;\n public readonly COLOR_EDIT_PERMISSION = LastModifiedCardUtils.getPermissionToModifyItems('color');\n\n private filterText: string;\n private searchSubject = new Subject();\n private maxFetchPerSlice = 20;\n\n public constructor(\n @Inject(COLORS) private colors: Colors,\n private readonly colorPicker: ColorPickerPopupService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.initialiseGridOptions();\n }\n\n public filterColors(searchValue: string): void {\n this.searchSubject.next(searchValue);\n }\n\n public createColor(): void {\n this.colorPicker\n .showColorPickerPopup(() => AsyncUniqueValidator.createValidator(this.colors, null))\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n rxJsFilter((color: Color) => !isUndefined(color)),\n switchMap((color: Color) => this.saveColor(color))\n )\n .subscribe(() => {\n this.grid?.api?.refreshServerSide();\n this.filterForListOfColors.filterChanged(null);\n });\n }\n\n public addColorToCreelPosition(color: Color): void {\n each(this.creelPositions, (creelPosition: CreelPosition) => {\n creelPosition.horizontalPositionsOfCreelPosition.unshift(new HorizontalPositionOfColorCreelPosition(1, color));\n });\n\n this.creelPositionHasBeenChanged.emit();\n }\n\n public removeColorFromCreelPosition(color: Color): void {\n each(this.creelPositions, (creelPosition: CreelPosition) => {\n this.removeColorFromHorizontalPositions(color, creelPosition.horizontalPositionsOfCreelPosition);\n });\n\n this.creelPositionHasBeenChanged.emit();\n }\n\n public hasAlreadyAddedColor(color: Color): boolean {\n const colors = flatMap(this.creelPositions, (creelPosition: CreelPosition) => creelPosition.getUniqueItems());\n return isEqual(size(filter(colors, ['name', color.name])), size(this.creelPositions));\n }\n\n public hasFilterActive(): boolean {\n return !isNil(this.filterText) && !isEqual(this.filterText, '');\n }\n\n public canShowControls(): boolean {\n return !isEmpty(this.creelPositions);\n }\n\n private initialiseGridOptions(): void {\n this.gridOptionsForListOfColors = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForListOfColors(), GridIdentifier.SELECT_COLOR)\n .withoutColumnMenu()\n .withNoRowsOverlay(this.getNoRowsOverlayTitleParameters())\n .withServerSideDataSource(this.maxFetchPerSlice, this.getServerSideDataSource())\n .withLoadingCellRenderer('customLoadingCellRenderer')\n .withComponents({\n customLoadingCellRenderer: LoadingCellOverlayComponent\n })\n .withOnGridReady((params: GridReadyEvent) => GridSelectPreviewComponent.onGridReady(params, params.api, this.searchSubject, this.unSubscribeOnViewDestroy))\n .build();\n }\n\n private getColumnDefsForListOfColors(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('name')\n .withDndSource()\n .withDndSourceOnRowDrag((params: DndSourceOnRowDragParams) => this.dragStart(params))\n .withCellRenderer(GridSelectPreviewComponent, {\n creelPositions: this.creelPositions,\n canShowControls: () => this.canShowControls(),\n hasAlreadyAddedItem: (color: Color) => this.hasAlreadyAddedColor(color),\n subtractClick: (color: Color) => this.removeColorFromCreelPosition(color),\n addClick: (color: Color) => this.addColorToCreelPosition(color),\n isColor: true\n } as GridSelectPreviewCellRendererParams)\n .withTextMultiFilter(of([]))\n .build()\n ];\n }\n\n private dragStart(params: DndSourceOnRowDragParams): void {\n const rowNode = params.rowNode;\n const event: any = params.dragEvent;\n event.dataTransfer.setData(\n 'materialType',\n JSON.stringify({\n type: 'color',\n data: rowNode.data\n })\n );\n }\n\n private removeColorFromHorizontalPositions(color: Color, horizontalPositions: HorizontalPositionOfCreelPosition[]): void {\n remove(horizontalPositions, (horizontalPosition: HorizontalPositionOfCreelPosition) => {\n let shouldRemove = false;\n if (horizontalPosition.isColor()) {\n shouldRemove = isEqual((horizontalPosition as HorizontalPositionOfColorCreelPosition).color.id, color.id);\n } else if (horizontalPosition.isGroup()) {\n this.removeColorFromHorizontalPositions(color, (horizontalPosition as HorizontalPositionOfGroupCreelPosition).group);\n }\n return shouldRemove;\n });\n }\n\n private saveColor(color: Color): Observable {\n return this.colors.save(color).pipe(\n tap((id: number) => (color.id = id)),\n map(() => color)\n );\n }\n\n private getServerSideDataSource(): IServerSideDatasource {\n return GridSelectPreviewComponent.getServerSideDataSource(this.colors, this.unSubscribeOnViewDestroy, this.maxFetchPerSlice, () => this.onRequestCompleted());\n }\n\n private getNoRowsOverlayTitleParameters(): Partial {\n return {\n scale: 1,\n titleKey: null,\n titleParam: 'TEXTILE_DATA.COLOR.COLOR',\n hideDescription: true\n };\n }\n\n private onRequestCompleted(): void {\n if (this.loadingForTheFirstTime) {\n this.loadingForTheFirstTime = false;\n this.gridOptionsForListOfColors.loadingCellRendererParams = {\n loadingForTheFirstTime: false\n };\n }\n }\n}\n","\n \n
\n
\n

{{ 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE' | bmsTranslate: {count: 2} }}

\n
\n

\n {{ 'GENERAL.ACTIONS.CREATE_OBJECT' | bmsTranslate: {object: 'TEXTILE_DATA.YARN_TYPE.YARN_TYPE' | bmsTranslate: {count: 1} | lowercase} }}\n

\n
\n \n
\n
\n \n
\n
\n
\n
\n","import {Component, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {HorizontalPositionOfGroupCreelPosition} from '@domain/textile-data/colored-yarn-set/horizontal-position-of-group-creel-position';\nimport {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {HorizontalPositionOfCreelPosition} from '@domain/textile-data/creel/horizontal-position-of-creel-position';\nimport {HorizontalPositionOfYarnTypeCreelPosition} from '@domain/textile-data/yarn-set/horizontal-position-of-yarn-type-creel-position';\nimport {HttpYarnTypesService} from '@infrastructure/http/yarn-type/http-yarn-types.service';\nimport {GridSelectPreviewCellRendererParams} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview-cell-renderer-params';\nimport {GridSelectPreviewComponent} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview.component';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {BaseComponent, ColDefBuilderFactoryService, FilterComponent, GridOptionsBuilderFactoryService, LoadingCellOverlayComponent, NoDataOverlayComponentParams} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, DndSourceOnRowDragParams, GridOptions, GridReadyEvent, IServerSideDatasource} from 'ag-grid-community';\nimport {each, filter, flatMap, isEmpty, isEqual, remove, size} from 'lodash-es';\nimport {of, Subject} from 'rxjs';\n\n@Component({\n selector: 'app-select-yarn-type',\n templateUrl: './select-yarn-type.component.html',\n styleUrls: ['./select-yarn-type.component.scss']\n})\nexport class SelectYarnTypeComponent extends BaseComponent implements OnInit {\n @Input() public creelPositions: CreelPosition[];\n @Output() public creelPositionHasBeenChanged: EventEmitter = new EventEmitter();\n @ViewChild('filterComponent') public filterComponent: FilterComponent;\n @ViewChild('yarnTypesGrid') public grid!: AgGridAngular;\n\n public gridOptions: GridOptions;\n public loadingForTheFirstTime: boolean = true;\n public readonly YARN_EDIT_PERMISSION = LastModifiedCardUtils.getPermissionToModifyItems('yarnType');\n\n private searchSubject = new Subject();\n private maxFetchPerSlice = 20;\n\n public constructor(\n private readonly yarnTypes: HttpYarnTypesService,\n private readonly router: Router,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.initialiseGridOptions();\n }\n\n public filterYarnTypes(searchValue: string): void {\n this.searchSubject.next(searchValue);\n }\n\n public addYarnTypeToCreelPosition(yarnType: OverviewListYarnType): void {\n each(this.creelPositions, (creelPosition: CreelPosition) => {\n if (!creelPosition.horizontalPositionsOfCreelPosition.some((horizontalPosition: HorizontalPositionOfYarnTypeCreelPosition) => horizontalPosition.yarnType?.id === yarnType.id)) {\n creelPosition.horizontalPositionsOfCreelPosition.unshift(new HorizontalPositionOfYarnTypeCreelPosition(1, yarnType));\n }\n });\n\n this.creelPositionHasBeenChanged.emit();\n }\n\n public removeYarnTypeFromCreelPosition(yarnType: OverviewListYarnType): void {\n each(this.creelPositions, (creelPosition: CreelPosition) => {\n this.removeYarnTypeFromHorizontalPositions(yarnType, creelPosition.horizontalPositionsOfCreelPosition);\n });\n\n this.creelPositionHasBeenChanged.emit();\n }\n\n public hasAlreadyAddedYarnType(yarnType: OverviewListYarnType): boolean {\n const yarnTypes = flatMap(this.creelPositions, (creelPosition: CreelPosition) => creelPosition.getUniqueItems());\n return isEqual(size(filter(yarnTypes, ['name', yarnType.name])), size(this.creelPositions));\n }\n\n private dragStart(params: DndSourceOnRowDragParams): void {\n const rowNode = params.rowNode;\n const event: any = params.dragEvent;\n event.dataTransfer.setData(\n 'materialType',\n JSON.stringify({\n type: 'yarnType',\n data: rowNode.data\n })\n );\n }\n\n public canShowControls(): boolean {\n return !isEmpty(this.creelPositions);\n }\n\n public createYarn(): void {\n this.router.navigateByUrl(RouteUtils.paths.texStyle.yarn.addYarn.absolutePath);\n }\n\n private initialiseGridOptions(): void {\n this.gridOptions = this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefs(), GridIdentifier.SELECT_YARN_TYPE_FOR_MATERIAL_SET)\n .withoutColumnMenu()\n .withNoRowsOverlay(this.getNoRowsOverlayTitleParameters())\n .withLoadingCellRenderer('customLoadingCellRenderer')\n .withServerSideDataSource(this.maxFetchPerSlice, this.getServerSideDataSource())\n .withComponents({\n customLoadingCellRenderer: LoadingCellOverlayComponent\n })\n .withOnGridReady((params: GridReadyEvent) => GridSelectPreviewComponent.onGridReady(params, params.api, this.searchSubject, this.unSubscribeOnViewDestroy))\n .build();\n }\n\n private getColumnDefs(): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('name')\n .withDndSource()\n .withDndSourceOnRowDrag((params: DndSourceOnRowDragParams) => this.dragStart(params))\n .withCellRenderer(GridSelectPreviewComponent, {\n creelPositions: this.creelPositions,\n canShowControls: () => this.canShowControls(),\n hasAlreadyAddedItem: (yarnType: OverviewListYarnType) => this.hasAlreadyAddedYarnType(yarnType),\n subtractClick: (yarnType: OverviewListYarnType) => this.removeYarnTypeFromCreelPosition(yarnType),\n addClick: (yarnType: OverviewListYarnType) => this.addYarnTypeToCreelPosition(yarnType)\n } as GridSelectPreviewCellRendererParams)\n .withTextMultiFilter(of([]))\n .build()\n ];\n }\n\n private getNoRowsOverlayTitleParameters(): Partial {\n return {\n scale: 1,\n titleKey: null,\n titleParam: 'TEXTILE_DATA.YARN_SET.YARN_SET',\n hideDescription: true\n };\n }\n\n private removeYarnTypeFromHorizontalPositions(yarnType: OverviewListYarnType, horizontalPositions: HorizontalPositionOfCreelPosition[]): void {\n remove(horizontalPositions, (horizontalPosition: HorizontalPositionOfCreelPosition) => {\n let shouldRemove = false;\n if (horizontalPosition.isYarnType()) {\n shouldRemove = isEqual((horizontalPosition as HorizontalPositionOfYarnTypeCreelPosition).yarnType.id, yarnType.id);\n } else if (horizontalPosition.isGroup()) {\n this.removeYarnTypeFromHorizontalPositions(yarnType, (horizontalPosition as HorizontalPositionOfGroupCreelPosition).group);\n }\n return shouldRemove;\n });\n }\n\n private getServerSideDataSource(): IServerSideDatasource {\n return GridSelectPreviewComponent.getServerSideDataSource(this.yarnTypes, this.unSubscribeOnViewDestroy, this.maxFetchPerSlice, () => this.onRequestCompleted());\n }\n\n private onRequestCompleted(): void {\n if (this.loadingForTheFirstTime) {\n this.loadingForTheFirstTime = false;\n this.gridOptions.loadingCellRendererParams = {\n loadingForTheFirstTime: false\n };\n }\n }\n}\n","import {NgModule} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller';\nimport {COLOR_SETS} from '@infrastructure/http/color-set/color-sets';\nimport {HttpColorSetsService} from '@infrastructure/http/color-set/http-color-sets.service';\nimport {HttpMachineQualitiesService} from '@infrastructure/http/machine-quality/http-machine-qualities.service';\nimport {MACHINE_QUALITIES} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {ChangePlaceholderPartsDialogComponent} from '@presentation/components/change-placeholder-parts-dialog/change-placeholder-parts-dialog.component';\nimport {CreelPreviewComponent} from '@presentation/components/creel-preview/creel-preview.component';\nimport {PlaceholderPartsComponent} from '@presentation/components/placeholder-parts/placeholder-parts.component';\nimport {AddYarnComponent} from '@presentation/components/yarn/add-yarn/add-yarn.component';\nimport {SelectColorSetComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/select-color-set/select-color-set.component';\nimport {GridCompatibleWithMachineQualityComponent} from '@presentation/pages/textile-data/finishing/add/select-machine-quality-and-finishing-template/grid-compatible-with-machine-quality/grid-compatible-with-machine-quality.component';\nimport {AddMaterialSetPageComponent} from '@presentation/pages/textile-data/material-set/add/add-material-set-page.component';\nimport {CreelPositionDetailsComponent} from '@presentation/pages/textile-data/material-set/add/creel-position-details/creel-position-details.component';\nimport {MaterialTypeGroupComponent} from '@presentation/pages/textile-data/material-set/add/creel-position-details/group/material-type-group.component';\nimport {MaterialTypeComponent} from '@presentation/pages/textile-data/material-set/add/creel-position-details/material-type/material-type.component';\nimport {CreelPositionComponent} from '@presentation/pages/textile-data/material-set/add/creel-positions/creel-position/creel-position.component';\nimport {PreviewForCreelPositionComponent} from '@presentation/pages/textile-data/material-set/add/creel-positions/creel-position/preview-for-creel-position/preview-for-creel-position.component';\nimport {CreelPositionsComponent} from '@presentation/pages/textile-data/material-set/add/creel-positions/creel-positions.component';\nimport {SelectColorComponent} from '@presentation/pages/textile-data/material-set/add/select-color/select-color.component';\nimport {SelectYarnTypeComponent} from '@presentation/pages/textile-data/material-set/add/select-yarn-type/select-yarn-type.component';\nimport {SharedModule} from '@shared/shared.module';\nimport {ColorPickerModule} from '@vdw/angular-component-library';\nimport {AgGridModule} from 'ag-grid-angular';\nimport {SelectWeavePatternTemplateComponent} from './weave-structure/add/select-weave-pattern-template-and-add-weave-pattern-form/select-weave-pattern-template.component';\nimport {OverviewListWeaveStructureService} from './weave-structure/overview/overview-list-weave-structure.service';\nimport {OverviewListYarnSetService} from './yarn-set/overview/overview-list-yarn-set.service';\n\n@NgModule({\n imports: [AgGridModule, SharedModule, VirtualScrollerModule, ColorPickerModule, RouterModule],\n providers: [\n {provide: MACHINE_QUALITIES, useClass: HttpMachineQualitiesService},\n {provide: COLOR_SETS, useClass: HttpColorSetsService},\n OverviewListYarnSetService,\n OverviewListWeaveStructureService\n ],\n declarations: [\n CreelPositionsComponent,\n CreelPositionComponent,\n PreviewForCreelPositionComponent,\n CreelPositionDetailsComponent,\n MaterialTypeGroupComponent,\n CreelPreviewComponent,\n SelectColorSetComponent,\n SelectColorComponent,\n SelectYarnTypeComponent,\n AddMaterialSetPageComponent,\n GridCompatibleWithMachineQualityComponent,\n MaterialTypeComponent,\n PlaceholderPartsComponent,\n ChangePlaceholderPartsDialogComponent,\n SelectWeavePatternTemplateComponent,\n ChangePlaceholderPartsDialogComponent,\n AddYarnComponent\n ],\n exports: [\n CreelPositionsComponent,\n CreelPositionComponent,\n PreviewForCreelPositionComponent,\n CreelPositionDetailsComponent,\n CreelPreviewComponent,\n MaterialTypeGroupComponent,\n VirtualScrollerModule,\n SelectColorComponent,\n SelectYarnTypeComponent,\n AddMaterialSetPageComponent,\n SharedModule,\n AgGridModule,\n SelectColorSetComponent,\n GridCompatibleWithMachineQualityComponent,\n MaterialTypeComponent,\n PlaceholderPartsComponent,\n ChangePlaceholderPartsDialogComponent,\n SelectWeavePatternTemplateComponent,\n AddYarnComponent\n ]\n})\nexport class TextileDataSharedModule {}\n","export enum TextileDataType {\n ARTICLE = 'article',\n COLOR = 'color',\n COLOR_SET = 'colorSet',\n COLORED_YARN = 'coloredYarn',\n COLORED_YARN_SET = 'coloredYarnSet',\n COMPANY_WEAVE_STRUCTURE = 'companyWeaveStructure',\n CREEL = 'creel',\n CUSTOMER = 'customer',\n DATA_UNIT_SETUP = 'dataUnitSetup',\n DATA_UNIT_SETUP_CATALOG = 'dataUnitSetupCatalog',\n EVENT = 'event',\n EVENT_ALERT = 'eventAlert',\n WEAVE_PRODUCT = 'weaveProduct',\n FINISHING = 'finishing',\n FINISHING_TEMPLATE = 'finishingTemplate',\n MACHINE_QUALITY = 'machineQuality',\n QUALITY_FINISHING = 'qualityFinishing',\n ORDERBOOK = 'orderbook',\n PRODUCT_CONFIGURATION = 'productConfiguration',\n PRODUCTION_ORDER_LITE = 'productionOrderLite',\n PRODUCTION_SCHEDULE = 'productionSchedule',\n PRODUCTION_SCHEDULE_NEW = 'productionScheduleNew',\n SALES_ORDER = 'salesOrder',\n WEAVE_PATTERN = 'weavePattern',\n WEAVE_STRUCTURE = 'weaveStructure',\n GROUPED_WEAVE_STRUCTURE = 'groupedWeaveStructure',\n WEFT_COLORED_YARN_SET = 'weftColoredYarnSet',\n YARN_SET = 'yarnSet',\n YARN_TYPE = 'yarnType',\n TUFT_PRODUCT = 'tuftProduct',\n TUFT_PRODUCTION_ORDER = 'tuftProductionOrder',\n DEVICE_TEMPLATE_CATALOG = 'deviceTemplateCatalog',\n DEVICE_TEMPLATE_COUNTER_CATALOG = 'deviceTemplateCounterCatalog',\n DEVICE_TEMPLATE_CONFIGURATION_CATALOG = 'deviceTemplateConfigurationCatalog',\n DEVICE_TEMPLATE = 'deviceTemplate',\n DEVICE_TEMPLATE_COUNTER = 'deviceTemplateCounter',\n DEVICE_TEMPLATE_CONFIGURATION = 'deviceTemplateConfiguration',\n PRODUCTION_ORDER_WEAVING = 'productionOrderWeaving',\n PATH_LAYOUT_TEMPLATE = 'pathLayoutTemplate',\n OPERATOR = 'operator',\n RESOURCE_TYPE = 'resourceType',\n PHYSICAL_QUANTITY = 'physicalQuantity',\n REPORT_ITEM = 'reportItem',\n DECLARATION = 'declaration',\n AUTOMATIC_STOP_GROUP = 'automaticStopGroup',\n PLASTIC_PRODUCT = 'plasticProduct',\n PLASTIC_PRODUCTION_ORDER = 'plasticProductionOrder',\n TOOL = 'tool',\n REJECT_REASON = 'rejectReason',\n FIXED_SCHEDULE = 'fixedSchedule',\n BUGGY = 'buggy',\n SHIFT = 'shift',\n SHIFT_PATTERN = 'shiftPattern',\n SHIFT_SCHEDULE = 'shiftSchedule',\n MANAGE_WEAVE_STRUCTURE = 'manageWeaveStructure',\n STOCK_LOCATION = 'stockLocation',\n RAW_MATERIAL = 'rawMaterial'\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {NotFoundPageComponent} from '../status-codes/404/not-found-page.component';\n\nexport const textileDataRoutes: Routes = [\n {path: '', component: NotFoundPageComponent},\n Factory.createModuleRoute(RouteUtils.paths.texStyle.finishingTemplate, (): any =>\n import('@presentation/pages/textile-data/finishing-template/finishing-template.module').then((m: any) => m.FinishingTemplateModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.color, (): any => import('@presentation/pages/textile-data/color/color.module').then((m: any) => m.ColorModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.colorSet, (): any => import('@presentation/pages/textile-data/color-set/color-set.module').then((m: any) => m.ColorSetModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.coloredYarn, (): any => import('@presentation/pages/textile-data/colored-yarn/colored-yarn.module').then((m: any) => m.ColoredYarnModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.yarnSet, (): any => import('@presentation/pages/textile-data/yarn-set/yarn-set.module').then((m: any) => m.YarnSetModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.coloredYarnSet, (): any =>\n import('@presentation/pages/textile-data/colored-yarn-set/colored-yarn-set.module').then((m: any) => m.ColoredYarnSetModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.weftColoredYarnSet, (): any =>\n import('@presentation/pages/textile-data/weft-colored-yarn-set/weft-colored-yarn-set.module').then((m: any) => m.WeftColoredYarnSetModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.yarn, (): any => import('@presentation/pages/textile-data/yarn-type/yarn-type.module').then((m: any) => m.YarnTypeModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.machineQuality, (): any =>\n import('@presentation/pages/textile-data/machine-quality/machine-quality.module').then((m: any) => m.MachineQualityModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.creel, (): any => import('@presentation/pages/textile-data/creel/creel.module').then((m: any) => m.CreelModule)),\n Factory.createPrototypeModuleRoute(\n {\n route: 'weave-product',\n parentId: NavigationId.TEXSTYLE,\n navigationKey: 'TEXTILE_DATA.WEAVE_PRODUCT.WEAVE_PRODUCT',\n id: NavigationId.WEAVE_PRODUCT_MODULE,\n requiredPermission: Permission.TEXSTYLE_WEAVE_PRODUCT_VIEW\n },\n import('@presentation/pages/textile-data/weave-product/weave-product.module')\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.weaveStructure, (): any =>\n import('@presentation/pages/textile-data/weave-structure/weave-structure.module').then((m: any) => m.WeaveStructureModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.groupedWeaveStructure, (): any =>\n import('@presentation/pages/textile-data/grouped-weave-structure/grouped-weave-structure.module').then((m: any) => m.GroupedWeaveStructureModule)\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.companyWeaveStructure, (): any =>\n import('@presentation/pages/textile-data/company-weave-structure/company-weave-structure.module').then((m: any) => m.CompanyWeaveStructureModule)\n ),\n Factory.createPrototypeModuleRoute(\n {\n route: 'tuft-product',\n parentId: NavigationId.TEXSTYLE,\n navigationKey: 'TEXTILE_DATA.TUFT_PRODUCT.TUFT_PRODUCT',\n id: NavigationId.TUFT_PRODUCT_MODULE,\n requiredPermission: Permission.TEXSTYLE_TUFT_PRODUCT_VIEW\n },\n import('@presentation/pages/textile-data/tuft-product/tuft-product.module')\n ),\n Factory.createPrototypeModuleRoute(\n {\n route: 'plastic-product',\n parentId: NavigationId.TEXSTYLE,\n navigationKey: 'TEXTILE_DATA.PLASTIC_PRODUCT.PLASTIC_PRODUCT',\n id: NavigationId.PLASTIC_PRODUCT_MODULE,\n requiredPermission: Permission.TEXSTYLE_PLASTIC_PRODUCT_VIEW\n },\n import('@presentation/pages/textile-data/plastic-product/plastic-product.module')\n ),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.buggy, (): any => import('@presentation/pages/textile-data/buggy/buggy.module').then((m: any) => m.BuggyModule)),\n Factory.createModuleRoute(RouteUtils.paths.texStyle.fixedSchedule, (): any => import('@presentation/pages/textile-data/fixed-schedule/fixed-schedule.module').then((m: any) => m.FixedScheduleModule))\n];\n\nexport const textileDataRouting: ModuleWithProviders = RouterModule.forChild(textileDataRoutes);\n","import {IdNameVersion} from '@domain/id-name-version';\nimport {Gauge} from '@domain/machine/gauge';\nimport {TuftProduct} from '@domain/textile-data/tuft-product/tuft-product';\nimport {AssertionUtils} from '@vdw/angular-component-library';\n\nexport class OverviewListTuftProduct {\n private _id: number;\n private _name: string;\n private _version: number;\n private _description: string;\n private _color: string;\n private _blend: string;\n private _widthInCm: number;\n private _gauge: Gauge;\n private _stitchRateInStitchesPerCm: number;\n private _pileHeightInCm: number;\n private _weightInGramsPerMeter: number;\n private _primaryBacking: IdNameVersion;\n private _standardSpeed: number;\n private _standardEfficiency: number;\n private _tuftingNotes: string;\n private _backingNotes: string;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n description: string,\n color: string,\n blend: string,\n widthInCm: number,\n gauge: Gauge,\n stitchRateInStitchesPerCm: number,\n pileHeightInCm: number,\n weightInGramsPerMeter: number,\n primaryBacking: IdNameVersion,\n standardSpeed: number,\n standardEfficiency: number,\n tuftingNotes: string,\n backingNotes: string\n ) {\n this._id = id;\n this._name = name;\n this._version = version;\n this._description = description;\n this._color = color;\n this._blend = blend;\n this._widthInCm = widthInCm;\n this._gauge = gauge;\n this._stitchRateInStitchesPerCm = stitchRateInStitchesPerCm;\n this._pileHeightInCm = pileHeightInCm;\n this._weightInGramsPerMeter = weightInGramsPerMeter;\n this._primaryBacking = primaryBacking;\n this._standardSpeed = standardSpeed;\n this._standardEfficiency = standardEfficiency;\n this._tuftingNotes = tuftingNotes;\n this._backingNotes = backingNotes;\n }\n\n public static fromJSON(tuftProductJSON: any): OverviewListTuftProduct {\n return new OverviewListTuftProduct(\n tuftProductJSON.id,\n tuftProductJSON.name,\n tuftProductJSON.version,\n tuftProductJSON.description,\n tuftProductJSON.color,\n tuftProductJSON.blend,\n tuftProductJSON.widthInCm,\n AssertionUtils.isNullOrUndefined(tuftProductJSON.gauge) ? null : Gauge.fromJSON(tuftProductJSON.gauge),\n tuftProductJSON.stitchRateInStitchesPerCm,\n tuftProductJSON.pileHeightInCm,\n tuftProductJSON.weightInGramsPerMeter,\n AssertionUtils.isNullOrUndefined(tuftProductJSON.primaryBacking) ? null : IdNameVersion.fromJSON(tuftProductJSON.primaryBacking),\n tuftProductJSON.standardSpeed,\n tuftProductJSON.standardEfficiency,\n tuftProductJSON.tuftingNotes,\n tuftProductJSON.backingNotes\n );\n }\n\n public static fromTuftProduct(tuftProduct: TuftProduct): OverviewListTuftProduct {\n return new OverviewListTuftProduct(\n tuftProduct.id,\n tuftProduct.name,\n tuftProduct.version,\n tuftProduct.description,\n tuftProduct.color,\n tuftProduct.blend,\n tuftProduct.widthInCm,\n tuftProduct.gauge,\n tuftProduct.stitchRateInStitchesPerCm,\n tuftProduct.pileHeightInCm,\n tuftProduct.weightInGramsPerMeter,\n new IdNameVersion(tuftProduct.primaryBacking.id, tuftProduct.primaryBacking.name, tuftProduct.primaryBacking.version),\n tuftProduct.standardSpeed,\n tuftProduct.standardEfficiency,\n tuftProduct.tuftingNotes,\n tuftProduct.backingNotes\n );\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get color(): string {\n return this._color;\n }\n\n public get blend(): string {\n return this._blend;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public get gauge(): Gauge {\n return this._gauge;\n }\n\n public get stitchRateInStitchesPerCm(): number {\n return this._stitchRateInStitchesPerCm;\n }\n\n public get pileHeightInCm(): number {\n return this._pileHeightInCm;\n }\n\n public get weightInGramsPerMeter(): number {\n return this._weightInGramsPerMeter;\n }\n\n public get primaryBacking(): IdNameVersion {\n return this._primaryBacking;\n }\n\n public get standardSpeed(): number {\n return this._standardSpeed;\n }\n\n public get standardEfficiency(): number {\n return this._standardEfficiency;\n }\n\n public get tuftingNotes(): string {\n return this._tuftingNotes;\n }\n\n public get backingNotes(): string {\n return this._backingNotes;\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n}\n","import {StringUtils} from '@application/helper/string-utils';\n\nexport class OverviewListWeaveProduct {\n private _id: number;\n private _name: string;\n private _description: string;\n private _version: number;\n private _widthInCm: number;\n private _pickDensityInPicksPerCm: number;\n private _standardSpeedInRotationsPerMinute: number;\n private _standardEfficiencyInPercentage: number;\n private _numberOfFeeders: number;\n private _numberOfShafts: number;\n\n public constructor(\n id: number,\n name: string,\n description: string,\n version: number,\n widthInCm: number,\n pickDensityInPicksPerCm: number,\n standardSpeedInRotationsPerMinute: number,\n standardEfficiencyInPercentage: number,\n numberOfFeeders: number,\n numberOfShafts: number\n ) {\n this._id = id;\n this._name = name;\n this._description = description;\n this._version = version;\n this._widthInCm = widthInCm;\n this._pickDensityInPicksPerCm = pickDensityInPicksPerCm;\n this._standardSpeedInRotationsPerMinute = standardSpeedInRotationsPerMinute;\n this._standardEfficiencyInPercentage = standardEfficiencyInPercentage;\n this._numberOfFeeders = numberOfFeeders;\n this._numberOfShafts = numberOfShafts;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get version(): number {\n return this._version;\n }\n\n public get widthInCm(): number {\n return this._widthInCm;\n }\n\n public get pickDensityInPicksPerCm(): number {\n return this._pickDensityInPicksPerCm;\n }\n\n public get standardSpeedInRotationsPerMinute(): number {\n return this._standardSpeedInRotationsPerMinute;\n }\n\n public get standardEfficiencyInPercentage(): number {\n return this._standardEfficiencyInPercentage;\n }\n\n public get numberOfFeeders(): number {\n return this._numberOfFeeders;\n }\n\n public get numberOfShafts(): number {\n return this._numberOfShafts;\n }\n\n public get nameWithVersion(): string {\n return StringUtils.createNameWithVersion(this._name, this._version);\n }\n\n public static fromJSON(weaveProductJSON: any): OverviewListWeaveProduct {\n return new OverviewListWeaveProduct(\n weaveProductJSON.id,\n weaveProductJSON.name,\n weaveProductJSON.description,\n weaveProductJSON.version,\n weaveProductJSON.widthInCm,\n weaveProductJSON.pickDensityInPicksPerCm,\n weaveProductJSON.standardSpeedInRotationsPerMinute,\n weaveProductJSON.standardEfficiencyInPercentage,\n weaveProductJSON.numberOfFeeders,\n weaveProductJSON.numberOfShafts\n );\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {Component, Inject} from '@angular/core';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\n\n@Component({\n selector: 'app-grid-owner-label',\n templateUrl: './grid-owner-label.component.html',\n styleUrls: ['./grid-owner-label.component.scss']\n})\nexport class GridOwnerLabelComponent implements ICellRendererAngularComp {\n public fromVandewiele: boolean;\n\n public constructor(@Inject(AUTHENTICATION) private authentication: Authentication) {}\n\n public agInit(params: any): void {\n this.fromVandewiele = params.data.fromVandewiele ?? false;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public getLabelForOwner(): string {\n if (this.fromVandewiele) {\n return 'Vandewiele';\n } else {\n return this.authentication.getCurrentSubscription().name;\n }\n }\n}\n","
\n {{ getLabelForOwner() }}\n
\n","import {Inject, Injectable} from '@angular/core';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {BooleanUtils, ColDefBuilderFactoryService, LinkIconRendererComponent, StringUtils, TranslateService} from '@vdw/angular-component-library';\nimport {CellClassParams, ColDef, ICellRendererParams, ITooltipParams} from 'ag-grid-community';\nimport {OverviewWeaveQualityTypeComponent} from '../../machine-quality/overview-weave-quality-type/overview-weave-quality-type.component';\nimport {GridOwnerLabelComponent} from './grid-owner-label/grid-owner-label.component';\nimport {OverviewListWeaveStructure} from './overview-list-weave-structure';\n\n@Injectable()\nexport class OverviewListWeaveStructureService {\n private pageUrls = LastModifiedCardUtils.getPageUrls('weaveStructure');\n\n public constructor(\n @Inject(AUTHENTICATION) private authentication: Authentication,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(canClickName: boolean, isManagedRoute: boolean, showQualityType: boolean): ColDef[] {\n const columnDefs = [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n canClick: canClickName && !isManagedRoute,\n editPageUrl: this.pageUrls.edit\n };\n })\n .withCellClass((cellClassParams: CellClassParams) => {\n const result = [];\n\n const weaveStructure: OverviewListWeaveStructure = cellClassParams.data;\n if (weaveStructure.name.length === 0) {\n result.push('object-without-name');\n }\n return result;\n })\n .withLockVisible()\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withField('version', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.VERSION').withLockVisible().build(),\n this.colDefBuilderFactoryService.getBuilder().withField('type', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.TYPE').build(),\n this.colDefBuilderFactoryService.getBuilder().withField('description', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.DESCRIPTION').build(),\n this.colDefBuilderFactoryService.getBuilder().withField('releaseNotes', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.RELEASE_NOTES').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('fromVandewiele')\n .withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.OWNER')\n .withCellRenderer(GridOwnerLabelComponent)\n .withComparator(BooleanUtils.booleanComparator)\n .withPinned(false)\n .withoutFilter()\n .withSortable()\n .withTooltipValueGetter((params: ITooltipParams) => (params.data.fromVandewiele ? 'Vandewiele' : this.authentication.getCurrentSubscription().name).toUpperCase())\n .build()\n ];\n\n if (isManagedRoute) {\n columnDefs.splice(4, 0, this.colDefBuilderFactoryService.getBuilder().withField('fileName', true).withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.FILE_NAME').build());\n } else {\n columnDefs.push(\n this.colDefBuilderFactoryService.getBuilder().withField('dateModified').withHeaderName('GENERAL.DATETIME.DATE').withDateMultiFilter().withDate().build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('picksPerColorLine', true)\n .withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_SET_SIZE_Y')\n .withNumericMultiFilter()\n .withHide(true)\n .build()\n );\n }\n\n if (showQualityType) {\n columnDefs.splice(\n 3,\n 0,\n this.colDefBuilderFactoryService\n .getBuilder()\n .withField('qualityType')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.QUALITY_TYPE')\n .withCellRenderer(OverviewWeaveQualityTypeComponent)\n .withComparator(StringUtils.stringComparator)\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`TEXTILE_DATA.MACHINE_QUALITY.TYPES.${params.data.qualityType}`))\n .build()\n );\n }\n\n return columnDefs;\n }\n}\n","import {WeavePattern} from '@domain/textile-data/weave-structure/weave-pattern/weave-pattern';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {StringUtils} from '@vdw/angular-component-library';\n\nexport class OverviewListWeaveStructure {\n public id: number;\n public name: string;\n public version: number;\n public type: string;\n public description: string;\n public fileName: string;\n public fromVandewiele: boolean;\n public patterns: WeavePattern[];\n public qualityType: WeaveQualityType;\n public releaseNotes: string;\n public dateModified: Date;\n public picksPerColorLine: number;\n\n public constructor(\n id: number,\n name: string,\n version: number,\n type: string,\n description: string,\n fileName: string,\n fromVandewiele: boolean,\n qualityType: WeaveQualityType,\n releaseNotes: string,\n weavePatterns: WeavePattern[] = [],\n dateModified?: Date,\n picksPerColorLine?: number\n ) {\n this.id = id;\n this.name = name;\n this.version = version;\n this.type = type;\n this.description = description;\n this.fileName = fileName;\n this.fromVandewiele = fromVandewiele;\n this.patterns = weavePatterns;\n this.qualityType = qualityType;\n this.releaseNotes = releaseNotes;\n this.dateModified = dateModified;\n this.picksPerColorLine = picksPerColorLine;\n }\n\n public static fromJSON(weaveStructureJSON: any): OverviewListWeaveStructure {\n return new OverviewListWeaveStructure(\n weaveStructureJSON.id,\n weaveStructureJSON.name,\n weaveStructureJSON.version,\n weaveStructureJSON.type,\n weaveStructureJSON.description,\n weaveStructureJSON.fileName,\n weaveStructureJSON.fromVandewiele,\n weaveStructureJSON.qualityType,\n weaveStructureJSON.releaseNotes,\n weaveStructureJSON.patterns,\n StringUtils.toDate(weaveStructureJSON.dateModified),\n weaveStructureJSON.picksPerColorLine\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this.id,\n name: this.name,\n version: this.version,\n type: this.type,\n description: this.description,\n fileName: this.fileName,\n fromVandewiele: this.fromVandewiele,\n patterns: this.patterns,\n releaseNotes: this.releaseNotes\n } as any as JSON;\n }\n\n public canDuplicate(): boolean {\n return this.fromVandewiele;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return this.canDuplicate() ? '' : 'TEXTILE_DATA.WEAVE_STRUCTURE.ERRORS.PREVENT_DUPLICATE';\n }\n}\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {ActivatedRoute, Params, Router} from '@angular/router';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {YarnSets, YARN_SETS} from '@infrastructure/http/yarn-set/yarn-sets';\nimport {AssertionUtils, BaseComponent, ObjectUtils} from '@vdw/angular-component-library';\nimport {isEqual, isNil, isUndefined} from 'lodash-es';\nimport {takeUntil} from 'rxjs/operators';\nimport {NavigationAddMaterialSetPageData} from '../../material-set/add/navigation-add-material-set-page-data.type';\nimport {NavigationMaterialSetData} from '../../material-set/add/navigation-material-set-data.interface';\n\n@Component({\n templateUrl: './add-yarn-set-page.component.html'\n})\nexport class AddYarnSetPageComponent extends BaseComponent implements OnInit {\n public static urlToEditYarnSet = RouteUtils.paths.texStyle.yarnSet.editYarnSet.path;\n public static urlToDuplicateYarnSet = RouteUtils.paths.texStyle.yarnSet.duplicateYarnSet.path;\n\n public yarnSetToSave: YarnSet;\n public hasYarnSetState = false;\n\n private urlParams: Params;\n\n public constructor(\n @Inject(YARN_SETS) public readonly yarnSets: YarnSets,\n private readonly activatedRoute: ActivatedRoute,\n private readonly navigationHelperService: NavigationHelperService,\n private readonly router: Router\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.urlParams = this.activatedRoute.snapshot.params;\n this.initialiseAddYarnSetPage();\n }\n\n private initialiseAddYarnSetPage(): void {\n const emptyYarnSetState = {materialSet: null} as NavigationMaterialSetData;\n const yarnSetState = this.navigationHelperService.getPartialState(Object.keys(emptyYarnSetState));\n\n if (!AssertionUtils.isNullOrUndefined(yarnSetState) && !ObjectUtils.isDeepEqual(yarnSetState, emptyYarnSetState)) {\n this.yarnSetToSave = yarnSetState.materialSet as YarnSet;\n this.hasYarnSetState = true;\n } else if (this.isDuplicatingYarnSet() || this.isEditingYarnSet()) {\n this.yarnSets\n .getById(Number(this.urlParams.id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe({\n next: (yarnSet: YarnSet) => (this.yarnSetToSave = yarnSet),\n error: ErrorHandlers.navigateToOverviewAndThrowError(this.router, RouteUtils.paths.texStyle.yarnSet.absolutePath)\n });\n } else {\n this.yarnSetToSave = YarnSet.createEmptyYarnSet();\n }\n }\n\n private isEditingYarnSet(): boolean {\n return !isNil(this.activatedRoute.snapshot.routeConfig) && isEqual(this.activatedRoute.snapshot.routeConfig.path, AddYarnSetPageComponent.urlToEditYarnSet) && !isUndefined(this.urlParams.id);\n }\n\n private isDuplicatingYarnSet(): boolean {\n return !isNil(this.activatedRoute.snapshot.routeConfig) && isEqual(this.activatedRoute.snapshot.routeConfig.path, AddYarnSetPageComponent.urlToDuplicateYarnSet) && !isUndefined(this.urlParams.id);\n }\n}\n","\n","import {AfterViewChecked, ChangeDetectorRef, Component, ElementRef, Inject, ViewChild} from '@angular/core';\nimport {PositionOfDialog} from '@domain/position-of-dialog';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {OverviewListYarnSet} from '@presentation/pages/textile-data/yarn-set/overview/overview-list-yarn-set';\nimport {DialogBuilderFactoryService, ResponsivenessViewMode, RESPONSIVENESS_VIEW_MODE} from '@vdw/angular-component-library';\nimport {includes, isNil, isUndefined} from 'lodash-es';\n\n@Component({\n templateUrl: './grid-yarn-set-preview.component.html',\n styleUrls: ['./grid-yarn-set-preview.component.scss']\n})\nexport class GridYarnSetPreviewComponent implements AfterViewChecked {\n @ViewChild('yarntypes') public yarntypes: ElementRef;\n public yarnSet: OverviewListYarnSet;\n public showTooltip = false;\n\n public constructor(\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {}\n\n public ngAfterViewChecked(): void {\n this.showTooltip = this.canShowTooltip();\n this.changeDetectorRef.detectChanges();\n }\n\n public agInit(params: any): void {\n this.yarnSet = params.data;\n }\n\n public getYarnTypes(): string {\n return this.yarnSet\n .getUniqueYarnTypes()\n .map((yarnType: YarnType) => yarnType.name)\n .join(', ');\n }\n\n public showYarnSetDetails(event: MouseEvent): void {\n if (!this.isMobile()) {\n let source: Element = event.target as Element;\n while (!includes(source.classList, 'yarn-types') && !isNil(source.parentElement)) {\n source = source.parentElement;\n }\n\n this.dialogBuilderFactoryService.getBuilder().withClass('reposition-dialog').withWidth('706px').withMaxHeight('100%').openDialog(RepositionDialogComponent, {\n textileData: this.yarnSet,\n component: TextileDataDetailComponent,\n sourceElement: source,\n positionOfDialog: PositionOfDialog.LEFT\n });\n }\n }\n\n private canShowTooltip(): boolean {\n return !isUndefined(this.yarntypes) && this.yarntypes.nativeElement.offsetWidth < this.yarntypes.nativeElement.scrollWidth;\n }\n\n private isMobile(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n}\n","\n {{ getYarnTypes() }}\n\n","import {Injectable} from '@angular/core';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {BaseComponent, ColDefBuilderFactoryService, LinkIconRendererComponent, StringUtils} from '@vdw/angular-component-library';\nimport {ColDef, ICellRendererParams, ValueGetterParams} from 'ag-grid-community';\nimport {map, ReplaySubject, takeUntil} from 'rxjs';\nimport {GridYarnSetPreviewComponent} from './grid-yarn-set-preview/grid-yarn-set-preview.component';\nimport {OverviewListYarnSet} from './overview-list-yarn-set';\n\n@Injectable()\nexport class OverviewListYarnSetService extends BaseComponent {\n private pageUrls = LastModifiedCardUtils.getPageUrls('yarnSet');\n\n public constructor(private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService) {\n super();\n }\n\n public getColumnDefsForListOfYarnSets(possibleValuesSubject: ReplaySubject, canClickName: boolean): ColDef[] {\n return [\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('name')\n .withField('name', true)\n .withHeaderName('GENERAL.NAME')\n .withComparator(StringUtils.stringComparator)\n .withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n canClick: canClickName,\n editPageUrl: this.pageUrls.edit\n };\n })\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('creelPositions')\n .withHeaderName('GENERAL.POSITION', 2, true)\n .withValueGetter((params: ValueGetterParams) => params.data.creelPositions.length, true)\n .withNumericMultiFilter(\n possibleValuesSubject.asObservable().pipe(\n map((listOfYarnSet: OverviewListYarnSet[]) => this.getPossibleNumberOfPositions(listOfYarnSet)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n )\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('numberOfYarns')\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_TYPE', 2, true)\n .withValueGetter((params: ValueGetterParams) => this.getNumberOfYarns(params.data), true)\n .withNumericMultiFilter(\n possibleValuesSubject.asObservable().pipe(\n map((listOfYarnSet: OverviewListYarnSet[]) => this.getPossibleNumberOfYarns(listOfYarnSet)),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n )\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.YARN_TYPE.YARN_TYPE', 2)\n .withCellRenderer(GridYarnSetPreviewComponent)\n .withValueGetter((params: ValueGetterParams) =>\n params.data\n .getUniqueYarnTypes()\n .map((yarnType: YarnType) => yarnType.name)\n .join(', ')\n )\n .withComparator(StringUtils.stringComparator)\n .build()\n ];\n }\n\n private getPossibleNumberOfPositions(listOfYarnSet: OverviewListYarnSet[]): string[] {\n return listOfYarnSet.map((yarnSet: OverviewListYarnSet) => yarnSet.creelPositions.length.toString());\n }\n\n private getPossibleNumberOfYarns(listOfYarnSet: OverviewListYarnSet[]): string[] {\n return listOfYarnSet?.map((yarnSet: OverviewListYarnSet) => this.getNumberOfYarns(yarnSet).toString());\n }\n\n private getNumberOfYarns(yarnSet: OverviewListYarnSet): number {\n return yarnSet.creelPositions.flatMap((creelPosition: OverviewListCreelPosition) => creelPosition.items).length;\n }\n}\n","import {CreelPosition} from '@domain/textile-data/creel/creel-position';\nimport {MaterialTypeOverviewList, OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {YarnSet} from '@domain/textile-data/yarn-set/yarn-set';\nimport {YarnType} from '@domain/textile-data/yarn-type/yarn-type';\nimport {OverviewListYarnType} from '@presentation/pages/textile-data/yarn-type/overview/overview-list-yarn-type';\nimport {flatMap, map, uniqBy} from 'lodash-es';\n\nexport class OverviewListYarnSet {\n private readonly _id: number;\n private readonly _name: string;\n private readonly _creelPositions: OverviewListCreelPosition[];\n\n public constructor(id: number, name: string, creelPositions: OverviewListCreelPosition[]) {\n this._id = id;\n this._name = name;\n this._creelPositions = creelPositions;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get creelPositions(): OverviewListCreelPosition[] {\n return this._creelPositions;\n }\n\n public static fromJSON(yarnSetOverviewListJSON: any): OverviewListYarnSet {\n return new OverviewListYarnSet(\n yarnSetOverviewListJSON.id,\n yarnSetOverviewListJSON.name,\n map(yarnSetOverviewListJSON.creelPositions, (creelPositionJSON: any) => {\n return new OverviewListCreelPosition(\n map(creelPositionJSON.creel, (itemJSON: any) => {\n return new OverviewListYarnType(\n itemJSON.id,\n itemJSON.name,\n null,\n null,\n map(itemJSON.threads, (threadJSON: any) => {\n return {rawMaterial: threadJSON.rawMaterial};\n })\n );\n }),\n creelPositionJSON.creelPosition,\n null,\n null\n );\n })\n );\n }\n\n public static fromYarnSet(yarnSet: YarnSet): OverviewListYarnSet {\n return new OverviewListYarnSet(\n yarnSet.id,\n yarnSet.name,\n map(yarnSet.creelPositions, (creelPosition: CreelPosition, index: number) => {\n return OverviewListCreelPosition.fromCreelPosition(creelPosition, index + 1);\n })\n );\n }\n\n public getUniqueYarnTypes(): YarnType[] {\n return uniqBy(\n flatMap(this.creelPositions, (creelPosition: OverviewListCreelPosition) => {\n return creelPosition.items as any as YarnType[];\n }),\n 'id'\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n creelPositions: map(this._creelPositions, (creelPosition: OverviewListCreelPosition) => {\n return {\n creelPosition: creelPosition.position,\n creel: map(creelPosition.items, (yarnType: MaterialTypeOverviewList) => yarnType.toJSON())\n } as any as JSON;\n })\n } as any as JSON;\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {YarnConsumption} from '@domain/production-schedule/yarn-consumption';\nimport {Unit} from '@vdw/angular-component-library';\nimport {first, size} from 'lodash-es';\n\nexport class OverviewListYarnType {\n private _id: number;\n private _name: string;\n private _yarnCount: number;\n private _yarnCountInNm: number;\n private _yarnCountUnit: Unit;\n private _threads: {rawMaterial: string}[];\n private _yarnConsumption: YarnConsumption;\n private _description: string;\n private _groupName: string;\n private _comment: string;\n\n public constructor(\n id: number,\n name: string,\n yarnCount: number,\n yarnCountUnit: Unit,\n threads: {rawMaterial: string}[],\n description?: string,\n groupName?: string,\n comment?: string,\n yarnConsumption?: YarnConsumption,\n yarnCountInNm?: number\n ) {\n this._id = id;\n this._name = name;\n this._yarnCount = yarnCount;\n this._yarnCountUnit = yarnCountUnit;\n this._threads = threads;\n this._yarnConsumption = yarnConsumption;\n this._description = description;\n this._groupName = groupName;\n this._comment = comment;\n this._yarnCountInNm = yarnCountInNm;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get yarnCount(): number {\n return this._yarnCount;\n }\n\n public get yarnCountUnit(): Unit {\n return this._yarnCountUnit;\n }\n\n public get threads(): {rawMaterial: string}[] {\n return this._threads;\n }\n\n public get yarnConsumption(): YarnConsumption {\n return this._yarnConsumption;\n }\n\n public set yarnConsumption(yarnConsumption: YarnConsumption) {\n this._yarnConsumption = yarnConsumption;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get groupName(): string {\n return this._groupName;\n }\n\n public get comment(): string {\n return this._comment;\n }\n\n public get yarnCountInNm(): number {\n return this._yarnCountInNm;\n }\n\n public set yarnCountInNm(value: number) {\n this._yarnCountInNm = value;\n }\n\n public static fromJSON(yarnTypeJSON: any): OverviewListYarnType {\n return new OverviewListYarnType(\n yarnTypeJSON.id,\n yarnTypeJSON.name,\n yarnTypeJSON.yarnCount,\n Unit[yarnTypeJSON.yarnCountUnit] as Unit,\n yarnTypeJSON.threads.map((threadJSON: any) => {\n return {rawMaterial: threadJSON.rawMaterialView.name};\n }),\n yarnTypeJSON.description,\n yarnTypeJSON.groupName,\n yarnTypeJSON.comment,\n undefined,\n yarnTypeJSON.yarnCountInNm\n );\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n yarnCount: this._yarnCount,\n yarnCountUnit: this._yarnCountUnit,\n threads: this._threads\n } as any as JSON;\n }\n\n public getFirstRawMaterial(): string {\n return size(this.threads) > 0 ? first(this.threads).rawMaterial : '';\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","export enum ToolType {\n EXTRUSION = 'EXTRUSION',\n SINGLE_MOLD = 'SINGLE_MOLD'\n}\n","export enum AddToolViewMode {\n GENERAL,\n STATUS,\n CAVITIES,\n SETUP,\n MATCHING_CRITERIA,\n PRODUCTS\n}\n","
\n @if (canShowHeader) {\n
\n \n \n \n \n
\n }\n\n \n\n
\n @if (canShowFormBasedOnViewMode(VIEW_MODE.GENERAL)) {\n
\n \n \n \n \n \n \n \n \n \n
\n \n {{ 'UTILITIES.TOOL.TOOL_TYPE.TOOL_TYPE' | bmsTranslate }}\n \n @for (toolType of toolTypes; track $index) {\n {{ 'UTILITIES.TOOL.TOOL_TYPE.' + toolType | bmsTranslate }} \n }\n \n \n \n \n \n \n {{ 'UTILITIES.TOOL.WEIGHT' | bmsTranslate }}\n \n @if (addToolGeneralForm.controls?.weight.value !== null && !addToolGeneralForm.controls?.weight.disabled) {\n \n }\n \n {{ 'GENERAL.UNIT.KILOGRAM' | bmsTranslate }}\n \n \n \n \n \n \n \n \n
\n
\n \n {{ 'UTILITIES.TOOL.SPEED' | bmsTranslate }}\n \n @if (addToolGeneralForm.controls?.speed.value !== null && !addToolGeneralForm.controls?.speed.disabled) {\n \n }\n \n \n \n \n \n {{ 'UTILITIES.TOOL.SPEED_UNIT.SPEED_UNIT' | bmsTranslate }}\n \n @for (speedUnit of speedUnits; track $index) {\n {{ 'UTILITIES.TOOL.SPEED_UNIT.' + speedUnit | bmsTranslate }} \n }\n \n \n
\n \n \n \n } @else if (canShowFormBasedOnViewMode(VIEW_MODE.CAVITIES)) {\n \n } @else if (canShowFormBasedOnViewMode(VIEW_MODE.SETUP)) {\n \n } @else if (canShowFormBasedOnViewMode(VIEW_MODE.STATUS)) {\n \n } @else if (canShowFormBasedOnViewMode(VIEW_MODE.MATCHING_CRITERIA)) {\n \n } @else if (canShowFormBasedOnViewMode(VIEW_MODE.PRODUCTS)) {\n \n }\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {ErrorHandlers} from '@application/helper/error-handlers';\nimport {NavigationHelperService} from '@application/helper/navigation-helper/navigation-helper.service';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {isMultipleOfValidator} from '@application/validators/is-multiple-of-validator';\nimport {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {NumberingMode} from '@domain/machine/numbering-mode.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {StandardSpeed} from '@domain/machine/standard-speed.enum';\nimport {ToolStatus} from '@domain/machine/tool-status.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {MatchingCriteria} from '@domain/utilities/tool/matching-criteria';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {ToolType} from '@domain/utilities/tool/tool-type.enum';\nimport {HttpMachineTypesService} from '@infrastructure/http/machine-type/http-machine-types.service';\nimport {MACHINES, Machines} from '@infrastructure/http/machine/machines.interface';\nimport {HttpPlasticProductsService} from '@infrastructure/http/plastic-product/http-plastic-products.service';\nimport {HttpToolsCustomSettingsService} from '@infrastructure/http/tool/http-tools-custom-settings.service';\nimport {HttpToolsService} from '@infrastructure/http/tool/http-tools.service';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {PlasticMachineOverviewList} from '@presentation/pages/machine-overview/plastic-machine-overview-list';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ContentSwitcherNavigationInput,\n DialogBuilderFactoryService,\n DialogType,\n EnumUtils,\n FormValidationHelper,\n NavigationHelperPrototypeService,\n SaveType,\n skeletonViewAnimation,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {distinctUntilChanged, finalize, forkJoin, map, Observable, startWith, Subject, takeUntil} from 'rxjs';\nimport {ToolCustomSettingsComponent} from '../settings/tool-custom-settings.component';\nimport {AddToolViewMode} from './add-tool-view-mode.enum';\nimport {MatchingCriteriaData} from './matching-criteria/matching-criteria-data.interface';\nimport {ToolCavitiesForm, ToolForm, ToolGeneralForm, ToolSetupForm, ToolStatusForm} from './tool.form';\n\n@Component({\n templateUrl: './add-tool-page.component.html',\n styleUrl: 'add-tool-page.component.scss',\n animations: [skeletonViewAnimation('.form-field-skeleton-wrapper, .mat-card-header, .button-skeleton-wrapper')]\n})\nexport class AddToolPageComponent extends BaseComponent implements OnInit {\n @Input() public pageType: PageTypeEnum;\n @Input() public itemId: number;\n @Input() public canShowHeader: boolean = false;\n\n public addToolForm: ToolForm;\n public toolTypes = EnumUtils.getEnumValues(ToolType);\n public speedUnits = EnumUtils.getEnumValues(StandardSpeed);\n public matchingCriteria: MatchingCriteria[] = [];\n public matchingCriteriaData: MatchingCriteriaData = {machines: [], machineTypes: []};\n public products: PlasticProduct[] = [];\n public TOOL_TRANSLATION_KEY = 'UTILITIES.TOOL.TOOL';\n\n protected customSettingsUpdated = new Subject();\n public selectedMenuItem: TabsMenuItem = {value: AddToolViewMode.GENERAL, translationKey: 'GENERAL.GENERAL'};\n\n public menuItems: TabsMenuItem[] = [\n this.selectedMenuItem,\n {value: AddToolViewMode.STATUS, translationKey: 'GENERAL.STATUS'},\n {value: AddToolViewMode.CAVITIES, translationKey: 'UTILITIES.TOOL.CAVITIES.CAVITIES'},\n {value: AddToolViewMode.SETUP, translationKey: 'UTILITIES.TOOL.SETUP.SETUP'},\n {value: AddToolViewMode.MATCHING_CRITERIA, translationKey: 'UTILITIES.TOOL.MATCHING_CRITERIA.MATCHING_CRITERIA'},\n {value: AddToolViewMode.PRODUCTS, translationKey: 'UTILITIES.TOOL.PRODUCTS.PRODUCT', translationParameters: {count: 2}}\n ];\n\n public readonly SAVE_TYPE = SaveType;\n public readonly VIEW_MODE = AddToolViewMode;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_TOOL;\n public currentTool: Tool;\n\n private used = false;\n\n public constructor(\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly router: Router,\n private readonly formBuilder: FormBuilder,\n private readonly tools: HttpToolsService,\n private readonly activatedRoute: ActivatedRoute,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly textileService: TextileService,\n private readonly translate: TranslateService,\n private readonly navigationService: NavigationHelperService,\n @Inject(MACHINES) private readonly machines: Machines,\n private readonly machineTypes: HttpMachineTypesService,\n private readonly plasticProducts: HttpPlasticProductsService,\n protected readonly httpToolsCustomSettingsService: HttpToolsCustomSettingsService,\n public readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public get addToolGeneralForm(): ToolGeneralForm {\n return this.addToolForm.controls.addToolGeneralForm;\n }\n\n public get addToolStatusForm(): ToolStatusForm {\n return this.addToolForm.controls.addToolStatusForm;\n }\n\n public get addToolCavitiesForm(): ToolCavitiesForm {\n return this.addToolForm.controls.addToolCavitiesForm;\n }\n\n public get addToolSetupForm(): ToolSetupForm {\n return this.addToolForm.controls.addToolSetupForm;\n }\n\n public get addToolMatchingCriteriaForm(): ToolSetupForm {\n return this.addToolForm.controls.addToolMatchingCriteriaForm;\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n\n this.addToolGeneralForm.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => (this.currentTool = this.getCurrentTool()));\n const id = this.activatedRoute.snapshot.params.id ?? this.itemId;\n\n if (!AssertionUtils.isNullOrUndefined(id)) {\n forkJoin([this.tools.getById(Number(id)), this.plasticProducts.getAll()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([tool, products]: [Tool, PlasticProduct[]]) => {\n this.itemId = tool.id;\n this.used = tool.used;\n this.matchingCriteria = tool.matchingCriteria;\n this.products = products.filter((product: PlasticProduct) => tool.productIds.includes(product.id));\n\n this.setFormValues(tool);\n });\n }\n\n forkJoin([this.machines.getAll(), this.machineTypes.getAll(MachineType.PLASTIC_MACHINE)])\n .pipe(\n map(([machines, machineTypes]: [MachineOverviewList[], PlasticsMachineType[]]) => [\n machines.filter((machine: MachineOverviewList) => machine.machineType === MachineType.PLASTIC_MACHINE),\n machineTypes\n ]),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(([machines, machineTypes]: [PlasticMachineOverviewList[], PlasticsMachineType[]]) => (this.matchingCriteriaData = {machines, machineTypes}));\n }\n\n public get createdObject(): string {\n return !AssertionUtils.isNullOrUndefined(this.addToolGeneralForm.controls.name.value) ? this.addToolGeneralForm.controls.name.value : '';\n }\n\n public canShowFormBasedOnViewMode(viewMode: AddToolViewMode): boolean {\n return this.selectedMenuItem.value === viewMode;\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms(\n [this.addToolGeneralForm, this.addToolStatusForm, this.addToolCavitiesForm, this.addToolSetupForm, this.addToolMatchingCriteriaForm],\n this.document\n );\n\n if (isValid) {\n const toolToSave = this.getCurrentTool();\n this.saving = true;\n\n const request: Observable = this.isEditingTool() ? this.tools.update(toolToSave) : this.tools.save(toolToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n if (saveType === SaveType.SAVE_AND_CLOSE) {\n toolToSave.id = id;\n\n this.navigationHelper.navigateBack(this.isEditingTool() ? [] : toolToSave);\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.setFormFields();\n this.selectedMenuItem = this.menuItems.find((item: TabsMenuItem) => item.value === AddToolViewMode.GENERAL);\n }\n return;\n }\n\n this.textileService.navigateAndShowToast(saveType, TextileDataType.TOOL, 'UTILITIES.TOOL.TOOL', this.isEditingTool(), toolToSave.name, id);\n },\n error: (errorMessage: BackendError) => this.showErrorDialogForBackendError(this.isEditingTool() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n public isEditingTool(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.EDIT;\n }\n\n return this.activatedRoute.snapshot.routeConfig?.path === RouteUtils.paths.utilities.tool.editTool.path;\n }\n\n public duplicateTool(): void {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: AddToolPageComponent,\n componentInputs: {pageType: PageTypeEnum.DUPLICATE, itemId: this.itemId}\n }\n });\n return;\n }\n\n this.router.navigateByUrl(RouteUtils.paths.utilities.tool.duplicateTool.absolutePath.replace(':id', this.itemId.toString()));\n }\n\n public cancel(): void {\n this.navigationHelper.contentSwitcherDialogActive() ? this.navigationHelper.navigateBack() : this.navigationService.navigateToPreviousRoute(RouteUtils.paths.utilities.tool.absolutePath);\n }\n\n public deleteTool(): void {\n this.textileService.removeConfirmation(this.getCurrentTool(), TextileDataType.TOOL, false, null, this.tools);\n }\n\n public getLoadLink(): string {\n return ErrorHandlers.getLoadLink(RouteUtils.paths.utilities.tool.editTool.absolutePath, this.addToolGeneralForm.controls.name);\n }\n\n public getLoadEntry(): ContentSwitcherNavigationInput {\n return {\n componentInfo: {\n component: AddToolPageComponent,\n componentInputs: {pageType: PageTypeEnum.EDIT, itemId: this.addToolGeneralForm?.controls?.name?.errors?.entityId, canShowHeader: true}\n }\n };\n }\n\n public getCurrentTool(): Tool {\n return new Tool(\n this.isEditingTool() ? this.itemId : null,\n this.addToolGeneralForm.value.name,\n this.addToolGeneralForm.value.toolType,\n this.addToolGeneralForm.value.weight,\n this.addToolGeneralForm.value.speed,\n this.addToolGeneralForm.value.speedUnit,\n this.addToolGeneralForm.value.description,\n this.addToolCavitiesForm.value.cavities,\n this.addToolCavitiesForm.value.usedCavities,\n this.addToolCavitiesForm.value.numberingMode,\n this.addToolCavitiesForm.value.cavitiesAcross,\n this.addToolCavitiesForm.value.cavitiesDown,\n this.addToolCavitiesForm.value.pieceCycles,\n this.addToolSetupForm.value.waiveCycles,\n this.addToolSetupForm.value.mountTime,\n this.addToolSetupForm.value.dismountTime,\n this.addToolStatusForm.getRawValue().status,\n Array.isArray(this.addToolStatusForm.value.stockLocation) ? this.addToolStatusForm.value.stockLocation[0] : this.addToolStatusForm.value.stockLocation,\n this.used,\n this.matchingCriteria,\n this.products?.map((product: PlasticProduct) => product.id)\n );\n }\n\n public getToolPermission(): Permission {\n return RouteUtils.paths.utilities.tool.editTool.requiredPermission;\n }\n\n public isLocked(): boolean {\n return this.isEditingTool() && this.used;\n }\n\n protected applyNameSuggestion(suggestion: string): void {\n this.addToolGeneralForm.controls.name.patchValue(suggestion);\n }\n\n protected openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: ToolCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelper.navigateWithContentSwitcher(componentInfo).subscribe(() => this.customSettingsUpdated.next());\n }\n\n private setFormFields(): void {\n const addToolGeneralForm = this.formBuilder.group({\n name: this.formBuilder.control(null, Validators.required, AsyncUniqueValidator.createValidator(this.tools, null)),\n toolType: this.formBuilder.control(null, Validators.required),\n weight: this.formBuilder.control(null, Validators.min(0)),\n speed: this.formBuilder.control(null, Validators.min(0)),\n speedUnit: this.formBuilder.control(StandardSpeed.CYCLE_TIME),\n description: this.formBuilder.control(null)\n });\n\n const addToolStatusForm = this.formBuilder.group({\n status: this.formBuilder.control(null, Validators.required),\n stockLocation: this.formBuilder.control(null)\n });\n\n const addToolCavitiesForm = this.formBuilder.group({\n cavities: this.formBuilder.control(null, [Validators.min(1)]),\n usedCavities: this.formBuilder.control(null, [Validators.min(1)]),\n numberingMode: this.formBuilder.control(NumberingMode.LEFT_RIGHT_BOTTOM_TOP),\n cavitiesAcross: this.formBuilder.control(null, [Validators.min(0)]),\n cavitiesDown: this.formBuilder.control(null, [Validators.min(0)]),\n pieceCycles: this.formBuilder.control(null, Validators.min(1))\n });\n\n const addToolSetupForm = this.formBuilder.group({\n waiveCycles: this.formBuilder.control(null),\n mountTime: this.formBuilder.control(null, [Validators.min(0)]),\n dismountTime: this.formBuilder.control(null, [Validators.min(0)])\n });\n\n this.addToolForm = this.formBuilder.group({\n addToolGeneralForm,\n addToolStatusForm,\n addToolCavitiesForm,\n addToolSetupForm,\n addToolMatchingCriteriaForm: this.formBuilder.group({})\n });\n\n this.addToolStatusForm.controls.status.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy), startWith(undefined), distinctUntilChanged()).subscribe((status: ToolStatus) => {\n if (status === ToolStatus.IN_USE) {\n this.addToolStatusForm.controls.status.disable();\n } else {\n this.addToolStatusForm.controls.status.enable();\n }\n });\n\n this.addToolCavitiesForm.controls.pieceCycles.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((pieceCycles: number) => {\n if (AssertionUtils.isNullOrUndefined(pieceCycles) || this.addToolCavitiesForm.controls.pieceCycles.invalid) {\n this.addToolSetupForm.controls.waiveCycles.reset();\n } else {\n this.setWaiveCyclesValidators(pieceCycles);\n }\n });\n\n this.addToolCavitiesForm.controls.cavities.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((cavities: number) => {\n if (AssertionUtils.isNullOrUndefined(cavities) || cavities <= 1) {\n this.resetCavitiesValidators();\n } else {\n this.setCavitiesValidators();\n }\n });\n\n this.menuItems[0].form = this.addToolGeneralForm;\n this.menuItems[1].form = this.addToolStatusForm;\n this.menuItems[2].form = this.addToolCavitiesForm;\n this.menuItems[3].form = this.addToolSetupForm;\n this.menuItems[4].form = this.addToolMatchingCriteriaForm;\n }\n\n private setFormValues(tool: Tool, stockLocation: IdName = null): void {\n this.addToolGeneralForm.reset({\n name: this.isDuplicatingTool() ? null : tool.name,\n toolType: tool.toolType,\n weight: tool.weightInKg,\n speed: tool.speed,\n speedUnit: tool.speedUnit,\n description: tool.description\n });\n\n this.addToolStatusForm.reset({status: tool.status, stockLocation: stockLocation ?? tool.stockLocation});\n\n this.addToolCavitiesForm.reset({\n cavities: tool.cavities,\n usedCavities: tool.usedCavities,\n numberingMode: tool.numberingMode,\n cavitiesAcross: tool.cavitiesAcross,\n cavitiesDown: tool.cavitiesDown,\n pieceCycles: tool.pieceCycles\n });\n\n this.addToolSetupForm.reset({waiveCycles: tool.waiveCycles, mountTime: tool.mountTimeInMinutes, dismountTime: tool.dismountTimeInMinutes});\n\n if (this.isEditingTool()) {\n this.addToolGeneralForm.controls.name.setAsyncValidators([AsyncUniqueValidator.createValidator(this.tools, tool.name)]);\n this.addToolGeneralForm.controls.name.updateValueAndValidity();\n }\n\n if (!AssertionUtils.isNullOrUndefined(tool.pieceCycles)) {\n this.setWaiveCyclesValidators(tool.pieceCycles);\n }\n\n if (this.isLocked()) {\n this.addToolForm.disable();\n }\n }\n\n private setWaiveCyclesValidators(pieceCycles: number): void {\n this.addToolSetupForm.controls.waiveCycles.setValidators(isMultipleOfValidator(pieceCycles));\n this.addToolSetupForm.controls.waiveCycles.updateValueAndValidity();\n }\n\n private setCavitiesValidators(): void {\n this.addToolCavitiesForm.controls.usedCavities.setValidators(Validators.min(1));\n this.addToolCavitiesForm.controls.cavitiesAcross.setValidators(Validators.min(0));\n this.addToolCavitiesForm.controls.cavitiesDown.setValidators(Validators.min(0));\n\n this.addToolCavitiesForm.updateValueAndValidity();\n }\n\n private resetCavitiesValidators(): void {\n this.addToolCavitiesForm.controls.usedCavities.reset();\n this.addToolCavitiesForm.controls.cavitiesAcross.reset();\n this.addToolCavitiesForm.controls.cavitiesDown.reset();\n }\n\n private isDuplicatingTool(): boolean {\n if (!AssertionUtils.isNullOrUndefined(this.pageType)) {\n return this.pageType === PageTypeEnum.DUPLICATE;\n }\n\n return this.activatedRoute.snapshot.routeConfig?.path === RouteUtils.paths.utilities.tool.duplicateTool.path;\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {object: this.translate.instant(this.TOOL_TRANSLATION_KEY, {count: 1})}),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {\n ColDefBuilderFactoryService,\n CustomCellEditorComponent,\n CustomCellEditorParams,\n CustomCellEditorRendererComponent,\n CustomCellEditorRendererParams,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {ColDef, EditableCallbackParams, GetRowIdParams, ICellRendererParams, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\n\n@Injectable({providedIn: 'root'})\nexport class MatchingCriteriaOverviewService {\n public constructor(\n private readonly colDefBuilder: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(showStandardEfficiencyColumn: boolean, showSpeedColumn: boolean, isEditable: boolean = true): ColDef[] {\n return [\n this.colDefBuilder\n .getBuilder()\n .withColId('type')\n .withHeaderName('GENERAL.TYPE')\n .withValueGetter((params: ValueGetterParams) => this.getResourceType(params), true)\n .build(),\n this.colDefBuilder\n .getBuilder()\n .withColId('resource')\n .withHeaderName('UTILITIES.TOOL.MATCHING_CRITERIA.RESOURCE')\n .withValueGetter((params: ValueGetterParams) => this.getResource(params), true)\n .build(),\n ...(showSpeedColumn ? this.getColDefForSpeed(isEditable) : []),\n ...(showStandardEfficiencyColumn ? this.getColDefForStandardEfficiency(isEditable) : [])\n ];\n }\n\n public getColDefForMachineGroup(): ColDef[] {\n return [this.colDefBuilder.getBuilder().withField('id').withHide().build(), this.colDefBuilder.getBuilder().withField('name', true).withHeaderName('GENERAL.NAME').build()];\n }\n\n private getColDefForSpeed(isEditable: boolean): ColDef[] {\n return [\n this.colDefBuilder\n .getBuilder()\n .withHeaderName('UTILITIES.TOOL.SPEED', null, false, 'UTILITIES.TOOL.SPEED_UNIT.SPEED')\n .withColIdAndField('standardSpeedInCycleTime')\n .withRightAlignment()\n .withEditable(\n isEditable,\n CustomCellEditorComponent,\n (params: EditableCallbackParams): CustomCellEditorParams =>\n ({\n min: 1,\n unit: Unit.SPEED,\n allowDecimals: true,\n maximumFractionDigits: 2,\n placeholder: params.data?.baseStandardSpeedInCycleTime?.toString() ?? '0'\n }) as CustomCellEditorParams\n )\n .withCellRenderer(\n CustomCellEditorRendererComponent,\n (params: ICellRendererParams): CustomCellEditorRendererParams =>\n ({\n placeholder: params.data?.baseStandardSpeedInCycleTime?.toString() ?? '0',\n unit: this.translate.instant('UTILITIES.TOOL.SPEED_UNIT.SPEED'),\n value: params.value\n }) as CustomCellEditorRendererParams\n )\n .withTooltipValueGetter((params: ITooltipParams) => this.getSpeed(params))\n .withOnCellClicked()\n .build()\n ];\n }\n\n private getColDefForStandardEfficiency(isEditable: boolean): ColDef[] {\n return [\n this.colDefBuilder\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_EFFICIENCY', null, false, Unit.PERCENTAGE)\n .withColIdAndField('standardEfficiency')\n .withRightAlignment()\n .withEditable(\n isEditable,\n CustomCellEditorComponent,\n (params: EditableCallbackParams): CustomCellEditorParams =>\n ({\n min: 1,\n max: 100,\n unit: Unit.PERCENTAGE,\n allowDecimals: true,\n maximumFractionDigits: 2,\n placeholder: params.data?.baseStandardEfficiency?.toString() ?? '0'\n }) as CustomCellEditorParams\n )\n .withCellRenderer(\n CustomCellEditorRendererComponent,\n (params: ICellRendererParams): CustomCellEditorRendererParams =>\n ({\n placeholder: params.data?.baseStandardEfficiency?.toString() ?? '0',\n unit: Unit.PERCENTAGE,\n value: params.value\n }) as CustomCellEditorRendererParams\n )\n .withTooltipValueGetter((params: ITooltipParams) => this.getStandardEfficiency(params))\n .withOnCellClicked()\n .build()\n ];\n }\n\n private getStandardEfficiency(params: ICellRendererParams | ITooltipParams): string {\n return `${params.value ?? ''} %`;\n }\n\n private getResourceType(params: ValueGetterParams): string {\n if (params.data.machineType) {\n return this.translate.instant('MACHINE.DETAILS.MACHINE_TYPE');\n } else if (params.data.machineGroup) {\n return this.translate.instant('PLANNING.MACHINE_GROUP');\n } else {\n return this.translate.instant('MACHINE.MACHINE', {count: 1});\n }\n }\n\n public getResource(params: ValueGetterParams | GetRowIdParams): string {\n return params.data?.machineType?.name ?? params.data?.machine?.name ?? params.data?.machineGroup?.name;\n }\n\n private getSpeed(params: ICellRendererParams | ITooltipParams): string {\n return `${params.value ?? ''} ${this.translate.instant('UTILITIES.TOOL.SPEED_UNIT.SPEED')}`;\n }\n}\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FormGroup} from '@angular/forms';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {IdName} from '@domain/id-name';\nimport {MachineType} from '@domain/machine/machine-type.enum';\nimport {PlasticsMachineType} from '@domain/machine/plastics-machine-type';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {MatchingCriteria} from '@domain/utilities/tool/matching-criteria';\nimport {SelectMachineTypeService} from '@presentation/pages/machine-overview/add-equipment-kind/generic-equipment-kind-form/select-machine-type/select-machine-type.service';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {OverviewMachineGroup} from '@presentation/pages/machine-overview/overview-machine-group';\nimport {MachineOverviewService} from '@presentation/pages/machine-overview/overview-machines-views/overview-machines-list/machine-overview.service';\nimport {PlasticMachineOverviewList} from '@presentation/pages/machine-overview/plastic-machine-overview-list';\nimport {\n AlertDialogResult,\n AssertionUtils,\n BaseComponent,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n NoDataOverlayComponentParams,\n OverlayActionsService,\n OverlayComponentParams,\n OverlayComponentParamsAction,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {ColDef, GetRowIdParams, GridApi, GridReadyEvent, IRowDragItem, IRowNode} from 'ag-grid-community';\nimport {filter, takeUntil} from 'rxjs';\nimport {MatchingCriteriaData} from './matching-criteria-data.interface';\nimport {MatchingCriteriaOverviewService} from './matching-criteria-overview.service';\n\ntype CrudOverviewDataConfigType = MatchingCriteria | MachineOverviewList | PlasticsMachineType | OverviewMachineGroup;\n\n@Component({\n selector: 'app-matching-criteria',\n styleUrls: ['./matching-criteria.component.scss'],\n templateUrl: './matching-criteria.component.html'\n})\nexport class MatchingCriteriaComponent extends BaseComponent implements OnInit, OnChanges {\n @Input() public form: FormGroup;\n @Input() public matchingCriteria: MatchingCriteria[];\n @Input() public editPermission: Permission;\n @Input() public enableDragHandle: boolean = false;\n @Input() public enableMultiRowSelect: boolean = true;\n @Input() public showStandardEfficiencyColumn: boolean = false;\n @Input() public showSpeedColumn: boolean = false;\n @Input() public showMachineGroup: boolean = false;\n @Input() public isLocked: boolean = false;\n @Output() public matchingCriteriaChange = new EventEmitter();\n\n public isLoading = true;\n public config: CrudOverviewDataConfig;\n public plasticMachineTypes: PlasticsMachineType[] = [];\n public machineGroups: OverviewMachineGroup[];\n\n private readonly TRANSLATION_KEY = 'UTILITIES.TOOL.MATCHING_CRITERIA.MATCHING_CRITERIA';\n private readonly noOverlayAction: OverlayComponentParamsAction[] = [\n {\n key: 'addMachine',\n titleKey: this.translate.instant('GENERAL.ACTIONS.ADD_OBJECT', {object: this.translate.instant('MACHINE.MACHINE', {count: 1}).toLowerCase()}),\n isPrimary: true\n }\n ];\n\n private configGridApi: GridApi;\n private machineConfig: CrudOverviewDataConfig;\n private plasticMachineTypeConfig: CrudOverviewDataConfig;\n private machineGroupConfig: CrudOverviewDataConfig;\n private plasticMachines: MachineOverviewList[] = [];\n\n public constructor(\n private readonly selectMachineTypeService: SelectMachineTypeService,\n private readonly overlayActionsService: OverlayActionsService,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly matchingCriteriaOverviewService: MatchingCriteriaOverviewService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly machineOverviewService: MachineOverviewService\n ) {\n super();\n }\n\n @Input() public set matchingcriteriaData(data: MatchingCriteriaData) {\n this.plasticMachines = data.machines;\n this.setMachineConfig(this.plasticMachines);\n\n if (this.showMachineGroup) {\n this.machineGroups = data.machineGroups;\n this.setMachineGroupConfig(this.machineGroups);\n } else {\n this.plasticMachineTypes = data.machineTypes;\n this.setMachineTypeConfig(this.plasticMachineTypes);\n }\n\n if (!AssertionUtils.isEmpty(this.plasticMachines)) {\n this.isLoading = false;\n this.configGridApi?.setGridOption('loading', false);\n }\n }\n\n public ngOnInit(): void {\n this.subscribeToOverlayActions();\n this.setDisabledForOverlay();\n\n this.setConfig();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('matchingCriteria' in changes && !changes.matchingCriteria.isFirstChange()) {\n this.configGridApi.setGridOption('rowData', changes.matchingCriteria.currentValue);\n this.config.rowData = changes.matchingCriteria.currentValue;\n }\n\n if ('isLocked' in changes && !changes.isLocked.isFirstChange()) {\n this.setDisabledForOverlay();\n }\n }\n\n public selectMachine(): void {\n const selectedMatchingCriteriaWithMachines = [];\n this.configGridApi.forEachNode((node: IRowNode) => {\n if (node.data.machine !== null) {\n selectedMatchingCriteriaWithMachines.push(node);\n }\n });\n const selectedMachines = selectedMatchingCriteriaWithMachines?.map((node: IRowNode) => node.data.machine);\n\n if (selectedMachines.length > 0) {\n this.machineConfig.selectedObjects = selectedMachines;\n }\n\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.machineConfig\n }\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machines: PlasticMachineOverviewList[]) => {\n if (!AssertionUtils.isNullOrUndefined(machines)) {\n const existingSelectedMachineIds = selectedMachines.map((machine: PlasticMachineOverviewList) => machine.id);\n const itemsToAdd = machines.filter((machine: PlasticMachineOverviewList) => !existingSelectedMachineIds.includes(machine.id));\n const newSelectedMachineIds = machines.map((machine: PlasticMachineOverviewList) => machine.id);\n const itemsToRemove = selectedMatchingCriteriaWithMachines\n .map((node: IRowNode) => node.data)\n .filter((matchingCriteria: MatchingCriteria) => !newSelectedMachineIds.includes(matchingCriteria.machine.id));\n\n this.configGridApi.applyTransaction({\n add: itemsToAdd.map(\n (machine: PlasticMachineOverviewList) => new MatchingCriteria(null, new IdName(machine.id, machine.name), null, null, null, null, machine.standardSpeed, machine.standardEfficiency)\n ),\n remove: itemsToRemove\n });\n\n this.setLatestMatchingCriteriaList();\n }\n });\n }\n\n public selectMachineType(): void {\n const selectedMatchingCriteriaWithMachineTypes = [];\n this.configGridApi.forEachNode((node: IRowNode) => {\n if (node.data.machineType !== null) {\n selectedMatchingCriteriaWithMachineTypes.push(node);\n }\n });\n const selectedMachineTypes = selectedMatchingCriteriaWithMachineTypes?.map((node: IRowNode) => node.data.machineType);\n\n if (selectedMachineTypes.length > 0) {\n this.plasticMachineTypeConfig.selectedObjects = selectedMachineTypes;\n }\n\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.plasticMachineTypeConfig\n }\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineTypes: PlasticsMachineType[]) => {\n if (!AssertionUtils.isNullOrUndefined(machineTypes)) {\n const existingSelectedMachineTypeIds = selectedMachineTypes.map((machineType: PlasticsMachineType) => machineType.id);\n const itemsToAdd = machineTypes.filter((machineType: PlasticsMachineType) => !existingSelectedMachineTypeIds.includes(machineType.id));\n const newSelectedMachineTypeIds = machineTypes.map((machineType: PlasticsMachineType) => machineType.id);\n const itemsToRemove = selectedMatchingCriteriaWithMachineTypes\n .map((node: IRowNode) => node.data)\n .filter((matchingCriteria: MatchingCriteria) => !newSelectedMachineTypeIds.includes(matchingCriteria.machineType.id));\n this.configGridApi.applyTransaction({\n add: itemsToAdd.map((machineType: PlasticsMachineType) => new MatchingCriteria(null, null, new IdName(machineType.id, machineType.name), null, null, null)),\n remove: itemsToRemove\n });\n\n this.setLatestMatchingCriteriaList();\n }\n });\n }\n\n public selectMachineGroup(): void {\n const selectedMatchingCriteriaWithMachineGroups = [];\n this.configGridApi.forEachNode((node: IRowNode) => {\n if (node.data.machineGroup !== null) {\n selectedMatchingCriteriaWithMachineGroups.push(node);\n }\n });\n const selectedMachineGroups = selectedMatchingCriteriaWithMachineGroups?.map((node: IRowNode) => node.data.machineGroup);\n\n if (selectedMachineGroups.length > 0) {\n this.machineGroupConfig.selectedObjects = selectedMachineGroups;\n }\n\n this.navigationHelper\n .navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.machineGroupConfig\n }\n }\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((machineGroups: OverviewMachineGroup[]) => {\n if (!AssertionUtils.isNullOrUndefined(machineGroups)) {\n const existingSelectedMachineGroupIds = selectedMachineGroups.map((machineGroup: OverviewMachineGroup) => machineGroup.id);\n const itemsToAdd = machineGroups.filter((machineGroup: OverviewMachineGroup) => !existingSelectedMachineGroupIds.includes(machineGroup.id));\n const newSelectedMachineGroupIds = machineGroups.map((machineGroup: OverviewMachineGroup) => machineGroup.id);\n const itemsToRemove = selectedMatchingCriteriaWithMachineGroups\n .map((node: IRowNode) => node.data)\n .filter((matchingCriteria: MatchingCriteria) => !newSelectedMachineGroupIds.includes(matchingCriteria.machineGroup.id));\n this.configGridApi.applyTransaction({\n add: itemsToAdd.map((machineGroup: OverviewMachineGroup) => new MatchingCriteria(null, null, null, new IdName(machineGroup.id, machineGroup.name), null, null, null)),\n remove: itemsToRemove\n });\n\n this.setLatestMatchingCriteriaList();\n }\n });\n }\n\n private subscribeToOverlayActions(): void {\n this.noOverlayAction.push({\n key: this.showMachineGroup ? 'addMachineGroup' : 'addMachineType',\n titleKey: this.translate.instant('GENERAL.ACTIONS.ADD_OBJECT', {object: this.translate.instant(this.showMachineGroup ? 'PLANNING.MACHINE_GROUP' : 'MACHINE.DETAILS.MACHINE_TYPE').toLowerCase()}),\n isPrimary: true\n });\n\n this.overlayActionsService.actionTriggeredEmitter.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((actionKey: string) => {\n if (AssertionUtils.isEmpty(this.plasticMachines)) {\n this.isLoading = true;\n this.configGridApi?.setGridOption('loading', true);\n return;\n }\n\n if (actionKey === this.noOverlayAction[0].key) {\n this.selectMachine();\n } else if (actionKey === this.noOverlayAction[1].key) {\n this.showMachineGroup ? this.selectMachineGroup() : this.selectMachineType();\n }\n });\n }\n\n private getColumnDefs(): ColDef[] {\n return this.matchingCriteriaOverviewService.getColumnDefs(this.showStandardEfficiencyColumn, this.showSpeedColumn, !this.isLocked);\n }\n\n private setConfig(): void {\n const builderFactory = this.builderFactoryService.getBuilder();\n\n if (!this.isLocked) {\n builderFactory.withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: this.editPermission,\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: true\n } as CrudActions)\n });\n }\n\n builderFactory.withGridOptions(this.getColumnDefs(), GridIdentifier.MATCHING_CRITERIA, this.matchingCriteria, (builder: GridOptionsBuilder) => {\n builder\n .withOnGridReady((params: GridReadyEvent) => {\n this.configGridApi = params.api;\n\n if (this.isLoading) {\n params.api.setGridOption('loading', true);\n }\n })\n .withOnFirstDataRendered(() => this.configGridApi.setGridOption('loading', false))\n .withRowSelection(this.enableMultiRowSelect)\n .withGetRowId((params: GetRowIdParams) => this.matchingCriteriaOverviewService.getResource(params))\n .withOnCellValueChanged(() => this.onCellValueChanged())\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 1,\n titleParam: this.translate.instant(this.TRANSLATION_KEY),\n hideDescription: false,\n actions: this.noOverlayAction\n } as NoDataOverlayComponentParams);\n\n if (this.enableDragHandle && !this.isLocked) {\n builder.withRowDraggingInsideGrid((params: IRowDragItem) => params.rowNode.data?.machine.name).withOnRowDragEnd(() => this.setLatestMatchingCriteriaList());\n }\n\n return builder.build();\n });\n\n this.config = builderFactory.build();\n }\n\n private setMachineConfig(machines: MachineOverviewList[]): void {\n this.machineConfig = this.builderFactoryService\n .getBuilder()\n .withEntityName('MACHINE.MACHINE')\n .withGridOptions(this.getColDefForMachine(), GridIdentifier.SELECT_MACHINE, machines, (builder: GridOptionsBuilder) => builder.withRowSelection(true).build())\n .build();\n }\n\n private setMachineGroupConfig(machinesGroups: OverviewMachineGroup[]): void {\n this.machineGroupConfig = this.builderFactoryService\n .getBuilder()\n .withEntityName('PLANNING.MACHINE_GROUP')\n .withGridOptions(this.getColDefForMachineGroup(), GridIdentifier.SELECT_MACHINE_GROUP, machinesGroups, (builder: GridOptionsBuilder) => builder.withRowSelection(true).build())\n .build();\n }\n\n private getColDefForMachine(): ColDef[] {\n return this.machineOverviewService.getColumnDefsForSpeed();\n }\n\n private getColDefForMachineGroup(): ColDef[] {\n return this.matchingCriteriaOverviewService.getColDefForMachineGroup();\n }\n\n private setMachineTypeConfig(machineTypes: PlasticsMachineType[]): void {\n this.plasticMachineTypeConfig = this.builderFactoryService\n .getBuilder()\n .withEntityName('MACHINE.DETAILS.MACHINE_TYPE')\n .withGridOptions(\n this.selectMachineTypeService.getColumnDefsForMachineType(MachineType.PLASTIC_MACHINE),\n this.selectMachineTypeService.getMachineTypeGridIdentifier(MachineType.PLASTIC_MACHINE),\n machineTypes,\n (builder: GridOptionsBuilder) => builder.withRowSelection(true).build()\n )\n .build();\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object: this.translate.instant(this.TRANSLATION_KEY).toLowerCase()}),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(\n filter((result: AlertDialogResult) => result === AlertDialogResult.CONFIRM),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n const rowsToRemove = AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows() : [rowNode.data];\n this.configGridApi.applyTransaction({remove: rowsToRemove});\n\n this.setLatestMatchingCriteriaList();\n });\n }\n\n private onCellValueChanged(): void {\n this.setLatestMatchingCriteriaList();\n this.form.setErrors(document.querySelectorAll('.invalid').length > 0 ? {invalid: true} : null);\n }\n\n private getLatestMatchingCriteriaList(): MatchingCriteria[] {\n const updatedData: MatchingCriteria[] = [];\n this.configGridApi.forEachNode((node: IRowNode) => {\n if (node.data instanceof MatchingCriteria) {\n node.data.orderIndex = this.enableDragHandle ? node.rowIndex : undefined;\n }\n\n updatedData.push(node.data);\n });\n return updatedData;\n }\n\n private setLatestMatchingCriteriaList(): void {\n const latestMatchingCriteriaList = this.getLatestMatchingCriteriaList();\n this.config.rowData.push(...latestMatchingCriteriaList);\n this.matchingCriteriaChange.emit(latestMatchingCriteriaList);\n }\n\n private setDisabledForOverlay(): void {\n this.noOverlayAction.forEach((param: OverlayComponentParamsAction) => (param.disabled = this.isLocked));\n }\n}\n","
\n
\n

{{ 'GENERAL.SELECTED' | bmsTranslate }} {{ 'BMSCONFIG.RESOURCE_TYPES.RESOURCE_TYPE' | bmsTranslate: {count: 2} | lowercase }}

\n \n \n \n \n
\n \n
\n","import {NgModule} from '@angular/core';\nimport {MachineOverviewService} from '@presentation/pages/machine-overview/overview-machines-views/overview-machines-list/machine-overview.service';\nimport {TextileDataSharedModule} from '@presentation/pages/textile-data/textile-data-shared.module';\nimport {CrudOverviewDataModule, EditorHeaderModule, SplitButtonModule} from '@vdw/angular-component-library';\nimport {MatchingCriteriaComponent} from './matching-criteria.component';\n\n@NgModule({\n imports: [TextileDataSharedModule, EditorHeaderModule, CrudOverviewDataModule, SplitButtonModule],\n declarations: [MatchingCriteriaComponent],\n exports: [MatchingCriteriaComponent],\n providers: [MachineOverviewService]\n})\nexport class MatchingCriteriaModule {}\n","
\n @if (canShowHeader) {\n
\n \n \n \n \n
\n }\n\n \n\n
\n
\n \n \n \n \n \n \n \n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, Inject, Input, OnInit} from '@angular/core';\nimport {FormBuilder, Validators} from '@angular/forms';\nimport {HeaderIdentifier} from '@application/headers/header-identifier.enum';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {AsyncUniqueValidator} from '@application/validators/async-unique-validator';\nimport {IdName} from '@domain/id-name';\nimport {HttpStockLocationService} from '@infrastructure/http/stock-location/http-stock-location.service';\nimport {\n AssertionUtils,\n BackendError,\n BaseComponent,\n ContentSwitcherNavigationInput,\n DialogBuilderFactoryService,\n DialogType,\n FormValidationHelper,\n NavigationHelperPrototypeService,\n SaveType,\n TabsMenuItem,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {finalize, Observable, takeUntil} from 'rxjs';\nimport {StockLocationForm} from './add-stock-location.form';\n\n@Component({\n selector: 'app-add-stock-location',\n styleUrl: 'add-stock-location.component.scss',\n templateUrl: './add-stock-location.component.html'\n})\nexport class AddStockLocationComponent extends BaseComponent implements OnInit {\n @Input() public pageType: PageTypeEnum;\n @Input() public itemId: number;\n @Input() public canShowHeader: boolean = false;\n\n public addStockLocationForm: StockLocationForm;\n public readonly SAVE_TYPE = SaveType;\n public readonly HEADER_IDENTIFIER = HeaderIdentifier.ADD_STOCK_LOCATION;\n public selectedMenuItem: TabsMenuItem = {value: 0, translationKey: 'GENERAL.GENERAL'};\n public readonly STOCK_LOCATION_TRANSLATION_KEY = 'UTILITIES.TOOL.STOCK_LOCATION';\n\n public constructor(\n private readonly formBuilder: FormBuilder,\n private readonly stockLocationService: HttpStockLocationService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService,\n public readonly navigationHelper: NavigationHelperPrototypeService,\n @Inject(DOCUMENT) private readonly document: Document\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n this.getStockLocationDetails();\n }\n\n public isEditingStockLocation(): boolean {\n return this.pageType === PageTypeEnum.EDIT;\n }\n\n public get createdObject(): string {\n return !AssertionUtils.isNullOrUndefined(this.addStockLocationForm.controls.name.value) ? this.addStockLocationForm.controls.name.value : '';\n }\n\n public getLoadEntry(): ContentSwitcherNavigationInput {\n return {\n componentInfo: {\n component: AddStockLocationComponent,\n componentInputs: {pageType: PageTypeEnum.EDIT, itemId: this.addStockLocationForm?.controls?.name?.errors?.entityId, canShowHeader: true}\n }\n };\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForm(this.addStockLocationForm, this.document);\n if (isValid) {\n this.saving = true;\n const stockLocationToSave = this.getCurrentStockLocation();\n\n const request: Observable = this.isEditingStockLocation() ? this.stockLocationService.update(stockLocationToSave) : this.stockLocationService.save(stockLocationToSave);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => {\n if (saveType === SaveType.SAVE_AND_CLOSE) {\n stockLocationToSave.id = id;\n\n this.navigationHelper.navigateBack(this.isEditingStockLocation() ? [] : stockLocationToSave);\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.resetFormFields();\n }\n },\n error: (errorMessage: BackendError) =>\n this.showErrorDialogForBackendError(this.isEditingStockLocation() ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT', errorMessage.message)\n });\n }\n }\n\n private getStockLocationDetails(): void {\n const id = this.itemId;\n\n if (!AssertionUtils.isNullOrUndefined(id)) {\n this.stockLocationService\n .getById(Number(id))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((stockLocation: IdName) => {\n this.itemId = stockLocation.id;\n\n this.setFormValues(stockLocation);\n });\n }\n }\n\n private setFormValues(stockLocation: IdName): void {\n this.addStockLocationForm.reset({\n name: this.pageType === PageTypeEnum.DUPLICATE ? null : stockLocation.name\n });\n }\n\n private getCurrentStockLocation(): IdName {\n return new IdName(this.isEditingStockLocation() ? this.itemId : null, this.addStockLocationForm.value.name);\n }\n\n private setFormFields(): void {\n this.addStockLocationForm = this.formBuilder.group({\n name: this.formBuilder.control('', Validators.required, AsyncUniqueValidator.createValidator(this.stockLocationService, null))\n });\n }\n\n private resetFormFields(): void {\n this.addStockLocationForm.reset();\n }\n\n private showErrorDialogForBackendError(translationKey: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant(translationKey, {object: this.translate.instant(this.STOCK_LOCATION_TRANSLATION_KEY)}),\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {ToolStatus} from '@domain/machine/tool-status.enum';\nimport {\n ColDefBuilderFactoryService,\n ContentSwitcherNavigationInput,\n CrudColdef,\n GridOptionsBuilder,\n GridTagComponent,\n LinkIconRendererComponent,\n NoDataOverlayComponentParams,\n OverlayComponentParams,\n StringUtils,\n TagColor,\n TagSize,\n TranslateService,\n Unit\n} from '@vdw/angular-component-library';\nimport {ICellRendererParams, ITooltipParams, ValueGetterParams} from 'ag-grid-community';\nimport {Subject} from 'rxjs';\n\n@Injectable()\nexport class ToolOverviewService {\n public constructor(\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService\n ) {}\n\n public getColumnDefs(withLinkIcon: boolean = true, rowActionsComplete?: Subject): CrudColdef {\n let nameColDef = this.colDefBuilderFactoryService.getBuilder().withColIdAndField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator);\n\n if (withLinkIcon) {\n const editRoute = NavigationUtils.getNavigationRoute(NavigationId.EDIT_TOOL);\n\n nameColDef = nameColDef.withCellRenderer(LinkIconRendererComponent, (params: ICellRendererParams) => {\n return {\n params,\n editPageUrl: NavigationUtils.getAbsolutePath(editRoute.data.id),\n rowActionsComplete,\n contentSwitcherEntry: {componentInfo: {component: editRoute.component}, data: editRoute.data} as ContentSwitcherNavigationInput\n };\n });\n }\n\n return {\n colDefs: [\n nameColDef.build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('toolTypeId')\n .withField('toolType')\n .withHeaderName('UTILITIES.TOOL.TOOL_TYPE.TOOL_TYPE')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`UTILITIES.TOOL.TOOL_TYPE.${params.data.toolType}`), true)\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('weightInKg', true).withHeaderName('UTILITIES.TOOL.WEIGHT', 1, false, Unit.KILOGRAM).withRightAlignment().build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('description', true).withHeaderName('GENERAL.DESCRIPTION').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('toolStatusId')\n .withField('status')\n .withHeaderName('GENERAL.STATUS')\n .withCellRenderer(GridTagComponent, {\n translationKey: 'UTILITIES.TOOL.TOOL_STATUS.',\n size: TagSize.MEDIUM,\n colorGetter: {\n [ToolStatus.ASSEMBLING]: TagColor.VIOLET,\n [ToolStatus.FREE]: TagColor.TEAL,\n [ToolStatus.IN_MAINTENANCE]: TagColor.YELLOW,\n [ToolStatus.IN_USE]: TagColor.AQUA,\n [ToolStatus.NOT_AVAILABLE]: TagColor.ERROR\n }\n })\n .withTooltipValueGetter((params: ITooltipParams) => this.translate.instant(`UTILITIES.TOOL.TOOL_STATUS.${params.value}`))\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('stockLocation.name', true).withHeaderName('UTILITIES.TOOL.STOCK_LOCATION').build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('pieceCycles')\n .withValueGetter((params: ValueGetterParams) => params.data.pieceCycles ?? 1)\n .withHeaderName('UTILITIES.TOOL.CAVITIES.PIECE_CYCLES')\n .withRightAlignment()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('originalCavities')\n .withValueGetter((params: ValueGetterParams) => params.data.cavities ?? 1)\n .withHeaderName('UTILITIES.TOOL.CAVITIES.CAVITIES')\n .withRightAlignment()\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('mountTimeInMinutes').withHeaderName('UTILITIES.TOOL.SETUP.MOUNT_TIME').withRightAlignment().withHide().build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('dismountTimeInMinutes').withHeaderName('UTILITIES.TOOL.SETUP.DISMOUNT_TIME').withRightAlignment().withHide().build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColId('usedCavities')\n .withValueGetter((params: ValueGetterParams) => params.data.usedCavities ?? 1)\n .withHeaderName('UTILITIES.TOOL.CAVITIES.USED_CAVITIES')\n .withRightAlignment()\n .withHide()\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColId('speed').withHeaderName('UTILITIES.TOOL.SPEED').withRightAlignment().withHide().build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('speedUnit')\n .withHeaderName('UTILITIES.TOOL.SPEED_UNIT.SPEED_UNIT')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`UTILITIES.TOOL.SPEED_UNIT.${params.data.speedUnit}`), true)\n .withHide()\n .build(),\n this.colDefBuilderFactoryService\n .getBuilder()\n .withColIdAndField('numberingMode')\n .withHeaderName('UTILITIES.TOOL.CAVITIES.NUMBERING_MODE.NUMBERING_MODE')\n .withValueGetter((params: ValueGetterParams) => this.translate.instant(`UTILITIES.TOOL.CAVITIES.NUMBERING_MODE.${params.data.numberingMode}`), true)\n .withHide()\n .build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('cavitiesAcross').withHeaderName('UTILITIES.TOOL.CAVITIES.CAVITIES_ACROSS').withRightAlignment().withHide().build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('cavitiesDown').withHeaderName('UTILITIES.TOOL.CAVITIES.CAVITIES_DOWN').withRightAlignment().withHide().build(),\n this.colDefBuilderFactoryService.getBuilder().withColIdAndField('waiveCycles').withHeaderName('UTILITIES.TOOL.SETUP.WAIVE_CYCLES').withRightAlignment().withHide().build()\n ],\n rowActionsComplete\n } as CrudColdef;\n }\n\n public getDefaultGridOptionsBuilder(builder: GridOptionsBuilder): GridOptionsBuilder {\n return builder\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.translate.instant('UTILITIES.TOOL.TOOL', {count: 1}),\n hideDescription: true\n } as NoDataOverlayComponentParams);\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport {CustomSettings} from '@domain/custom-settings/custom-settings';\nimport {NameGeneratorProperty} from '@domain/custom-settings/name-generation-property';\nimport {NameGenerator} from '@domain/custom-settings/name-generator';\nimport {HttpToolsCustomSettingsService} from '@infrastructure/http/tool/http-tools-custom-settings.service';\nimport {BaseComponent, NavigationHelperPrototypeService, TabsMenuItem, ToastService, TranslateService} from '@vdw/angular-component-library';\nimport {forkJoin, takeUntil} from 'rxjs';\n\n@Component({\n templateUrl: './tool-custom-settings.component.html'\n})\nexport class ToolCustomSettingsComponent extends BaseComponent implements OnInit {\n protected nameGenerationProperties: NameGeneratorProperty[] = [];\n protected settingsForm: FormGroup<{nameGenerator: FormControl}>;\n protected generalTab: TabsMenuItem = {\n value: 'generalTab',\n translationKey: 'GENERAL.GENERAL'\n };\n\n protected TOOL_TRANSLATION_KEY = 'UTILITIES.TOOL.TOOL';\n\n public constructor(\n private readonly toolCustomSettings: HttpToolsCustomSettingsService,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly formBuilder: FormBuilder,\n private readonly toastService: ToastService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n this.getCustomSettings();\n }\n\n protected navigateBack(): void {\n this.navigationHelper.navigateBack();\n }\n\n protected save(): void {\n this.toolCustomSettings\n .save(new CustomSettings(undefined, this.settingsForm.value.nameGenerator))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.navigateBack();\n this.toastService.showInfo({\n tapToDismiss: false,\n timeOut: 2000,\n message: this.translate.instant('GENERAL.ACTIONS.UPDATED_OBJECT_WITHOUT_NAME', {object: 'GENERAL.CUSTOM_SETTINGS.CUSTOM_SETTINGS'})\n });\n });\n }\n\n private setFormFields(): void {\n this.settingsForm = this.formBuilder.group({\n nameGenerator: this.formBuilder.control(null)\n });\n this.generalTab.form = this.settingsForm;\n }\n\n private getCustomSettings(): void {\n forkJoin([this.toolCustomSettings.get(), this.toolCustomSettings.getNameGenerationProperties()])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([customSettings, nameGenerationProperties]: [CustomSettings, NameGeneratorProperty[]]) => {\n this.settingsForm.controls.nameGenerator.patchValue(customSettings.nameGenerator);\n this.nameGenerationProperties = nameGenerationProperties;\n });\n }\n}\n","
\n \n
\n \n \n
\n","import {Injectable} from '@angular/core';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {PageTypeEnum} from '@application/helper/navigation-helper/page-type.enum';\nimport {RemoveConfirmationService} from '@application/helper/remove-confirmation/remove-confirmation.service';\nimport {AddComponentInput} from '@application/helper/routing/add-component-input.interface';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {HttpToolsService} from '@infrastructure/http/tool/http-tools.service';\nimport {\n AssertionUtils,\n ContentSwitcherNavigationInput,\n CrudObjectSelectionDialogInput,\n CrudObjectSelectionDialogNewComponent,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n DialogBuilderFactoryService,\n DialogType,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {AddToolPageComponent} from './add/add-tool-page.component';\nimport {ToolOverviewService} from './overview/tool-overview.service';\n\n@Injectable()\nexport class ToolSelectionService {\n private config: CrudOverviewDataConfig;\n private readonly TRANSLATION_KEY = 'UTILITIES.TOOL.TOOL';\n private readonly routes = [\n NavigationUtils.getNavigationRoute(NavigationId.TOOL_MODULE),\n NavigationUtils.getNavigationRoute(NavigationId.TOOL),\n NavigationUtils.getNavigationRoute(NavigationId.ADD_TOOL),\n NavigationUtils.getNavigationRoute(NavigationId.EDIT_TOOL),\n NavigationUtils.getNavigationRoute(NavigationId.DUPLICATE_TOOL)\n ];\n\n public constructor(\n private readonly tools: HttpToolsService,\n private readonly translate: TranslateService,\n private readonly overview: ToolOverviewService,\n private readonly removeConfirmation: RemoveConfirmationService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n this.init();\n }\n\n public init(): void {\n const addRoute = NavigationUtils.getNavigationRoute(NavigationId.ADD_TOOL);\n\n const crudOverviewButtonConfigs = this.gridActionButtonsHelper.getActionButtonsWithNewRouting(\n addRoute.component,\n Permission.TEXSTYLE_PLASTIC_TOOL_EDIT,\n ({gridApi, rowNode}: GridButtonClickedEvent) => {\n const data = AssertionUtils.isNullOrUndefined(rowNode) ? (gridApi?.getSelectedRows()[0] as Tool) : (rowNode.data as Tool);\n\n if (!AssertionUtils.isEmpty(this.config.selectedObjects) && data.id === this.config.selectedObjects[0]?.id) {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: this.translate.instant('CONFLICTS.DIALOG.IN_USE', {object: data.name}),\n messageText: this.translate.instant('CONFLICTS.DIALOG.DESELECT'),\n type: DialogType.DELETE\n });\n return;\n }\n\n this.removeConfirmation.open(data, this.tools.delete(data.id), this.TRANSLATION_KEY, gridApi, this.tools.getConflicts(data.id));\n }\n );\n\n this.config = this.builderFactoryService\n .getBuilder()\n .withEntityName(this.TRANSLATION_KEY)\n .withRowData(this.tools.getAll())\n .withDefaultButtons(crudOverviewButtonConfigs)\n .withCrudGridOptions(this.overview.getColumnDefs(true, crudOverviewButtonConfigs.rowActionsComplete), GridIdentifier.TOOL_OVERVIEW, null, (builder: GridOptionsBuilder) =>\n this.overview.getDefaultGridOptionsBuilder(builder).withRowSelection(false, false, true).build()\n )\n .build();\n }\n\n public openContentSwitcherDialog(inputValue: Tool, plasticProductId?: number, machineId?: number): Observable {\n this.config.rowData = null;\n this.config.selectedObjects = [inputValue];\n this.config.dataObservable = this.tools.getCompatible(plasticProductId, machineId);\n\n return this.navigationHelper.navigateWithContentSwitcher({\n componentInfo: {\n component: CrudObjectSelectionDialogNewComponent,\n componentInputs: {\n config: this.config,\n newClickedEntry: {componentInfo: {component: AddToolPageComponent, componentInputs: {pageType: PageTypeEnum.ADD, canShowHeader: true} as AddComponentInput}} as ContentSwitcherNavigationInput\n } as CrudObjectSelectionDialogInput\n }\n });\n }\n}\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule} from '@angular/router';\nimport {AuthorizedRouteFactory as Factory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {AddToolPageComponent} from './add/add-tool-page.component';\nimport {ToolOverviewPageComponent} from './overview/tool-overview-page.component';\n\nconst shared = {parentId: NavigationId.TOOL_MODULE};\n\nexport const toolRoutes = [\n Factory.createPrototypeComponentRoute(ToolOverviewPageComponent, {route: '', requiredPermission: Permission.TEXSTYLE_PLASTIC_TOOL_VIEW, reuse: true, id: NavigationId.TOOL, ...shared}),\n Factory.createPrototypeComponentRoute(AddToolPageComponent, {route: 'add', requiredPermission: Permission.TEXSTYLE_PLASTIC_TOOL_EDIT, reuse: true, id: NavigationId.ADD_TOOL, ...shared}),\n Factory.createPrototypeComponentRoute(AddToolPageComponent, {route: 'edit/:id', requiredPermission: Permission.TEXSTYLE_PLASTIC_TOOL_VIEW, id: NavigationId.EDIT_TOOL, ...shared}),\n Factory.createPrototypeComponentRoute(AddToolPageComponent, {route: 'add/:id', requiredPermission: Permission.TEXSTYLE_PLASTIC_TOOL_EDIT, id: NavigationId.DUPLICATE_TOOL, ...shared})\n];\n\nexport const toolRouting: ModuleWithProviders = RouterModule.forChild(toolRoutes);\n","import {Component, OnInit} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {CrudActions} from '@application/helper/grid-action-buttons-helper/crud-actions.interface';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {LastModifiedCardUtils} from '@application/helper/last-modified-card-utils';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {HttpToolsService} from '@infrastructure/http/tool/http-tools.service';\nimport {TextileService} from '@presentation/pages/textile-data/textile-data-overview/textile.service';\nimport {TextileDataType} from '@presentation/pages/textile-data/textile-data-type.enum';\nimport {\n AssertionUtils,\n BaseComponent,\n ContentSwitcherNavigationInput,\n CrudOverviewDataBuilderFactoryService,\n CrudOverviewDataConfig,\n GridButtonClickedEvent,\n GridOptionsBuilder,\n NavigationHelperPrototypeService,\n RouteNavigationInput\n} from '@vdw/angular-component-library';\nimport {ColDef} from 'ag-grid-community';\nimport {ToolCustomSettingsComponent} from '../settings/tool-custom-settings.component';\nimport {ToolOverviewService} from './tool-overview.service';\n\n@Component({\n templateUrl: './tool-overview-page.component.html'\n})\nexport class ToolOverviewPageComponent extends BaseComponent implements OnInit {\n public config: CrudOverviewDataConfig;\n\n private readonly GRID_IDENTIFIER = GridIdentifier.TOOL_OVERVIEW;\n private readonly pageUrls = LastModifiedCardUtils.getPageUrls('tool');\n\n public constructor(\n private readonly tools: HttpToolsService,\n private readonly router: Router,\n private readonly textileService: TextileService,\n private readonly toolOverviewService: ToolOverviewService,\n private readonly builderFactoryService: CrudOverviewDataBuilderFactoryService,\n private readonly gridActionButtonsHelper: GridActionButtonsHelper,\n private readonly navigationHelperService: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const crudColdef = this.toolOverviewService.getColumnDefs();\n this.getTools(crudColdef.colDefs);\n }\n\n private getTools(colDefs: ColDef[]): void {\n this.config = this.builderFactoryService\n .getBuilder()\n .withDefaultButtons({\n crudOverviewButtonConfigs: this.gridActionButtonsHelper.getActionButtonsForGridSelection({\n requiredPermissionToEdit: RouteUtils.paths.utilities.tool.editTool.requiredPermission,\n withEdit: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'edit'),\n withDuplicate: (grid: GridButtonClickedEvent) => this.navigateToGivenRoute(grid, 'duplicate'),\n withDelete: (grid: GridButtonClickedEvent) => this.delete(grid),\n allowDeleteMultiple: false\n } as CrudActions)\n })\n .withGridOptions(colDefs, this.GRID_IDENTIFIER, null, (builder: GridOptionsBuilder) => this.toolOverviewService.getDefaultGridOptionsBuilder(builder).withRowSelection(false).build())\n .withRowData(this.tools.getAll())\n .withEntityName(NavigationUtils.getNavigationData(NavigationId.TOOL_MODULE).navigationKey)\n .withNewClicked(() => this.router.navigateByUrl(this.pageUrls.add))\n .withCustomSettingsClicked(() => this.openCustomSettings())\n .build();\n }\n\n private navigateToGivenRoute({gridApi, rowNode}: GridButtonClickedEvent, action: string): void {\n const routeInfo = {\n route: this.pageUrls[action].replace(':id', AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0].id : rowNode.id)\n } as RouteNavigationInput;\n\n this.navigationHelperService.navigateWithRoute(routeInfo);\n }\n\n private delete({gridApi, rowNode}: GridButtonClickedEvent): void {\n this.textileService.removeConfirmation(AssertionUtils.isNullOrUndefined(rowNode) ? gridApi?.getSelectedRows()[0] : rowNode.data, TextileDataType.TOOL, false, null, this.tools);\n }\n\n private openCustomSettings(): void {\n const componentInfo = {\n componentInfo: {\n component: ToolCustomSettingsComponent\n }\n } as ContentSwitcherNavigationInput;\n\n this.navigationHelperService.navigateWithContentSwitcher(componentInfo);\n }\n}\n","\n","import {ModuleWithProviders} from '@angular/core';\nimport {RouterModule, Routes} from '@angular/router';\nimport {AuthorizedRouteFactory} from '@application/helper/routing/authorized-route-factory';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {NotFoundPageComponent} from '../status-codes/404/not-found-page.component';\n\nexport const utilitiesRoutes: Routes = [\n {path: '', component: NotFoundPageComponent},\n AuthorizedRouteFactory.createPrototypeModuleRoute(\n {\n route: 'tool',\n parentId: NavigationId.UTILITIES,\n id: NavigationId.TOOL_MODULE,\n navigationKey: 'UTILITIES.TOOL.TOOL',\n requiredPermission: Permission.TEXSTYLE_PLASTIC_TOOL_VIEW\n },\n import('@presentation/pages/utilities/tool/tool.module')\n )\n];\n\nexport const utilitiesRouting: ModuleWithProviders = RouterModule.forChild(utilitiesRoutes);\n","export class BackendLimitsConstants {\n public static readonly INT32_MAX = 2147483647;\n public static readonly INT64_MAX = 9223372036854775807;\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Observable} from 'rxjs';\nimport {YarnConsumption} from './yarn-consumption';\n\n@Injectable()\nexport class HttpYarnConsumptionService implements YarnConsumption {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public calculateYarnConsumptionForOrderline(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}yarnconsumptions/order-line/${id}`);\n }\n\n public calculateYarnConsumptionForProductionOrder(id: number | string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getAggregatorEndpoint()}yarnconsumptions/production-order/${id}`);\n }\n\n public calculateYarnConsumptionForDesign(id: number, colorSetId: number, yarnSetId: number, machineQualityId: number, calculateYarnConsumptionPerDent: boolean = false): Observable {\n return this.httpClient.get(\n `${this.backendConfiguration.getAggregatorEndpoint()}yarnconsumptions/design/${id}?color-set=${colorSetId}&yarn-set=${yarnSetId}&machine-quality=${machineQualityId}&calculateYarnConsumptionPerDent=${calculateYarnConsumptionPerDent}`\n );\n }\n}\n","
\n \n
\n
\n

{{ subtitle }}

\n \n \n
\n \n
\n \n
\n","import {Component, ElementRef, EventEmitter, Inject, Input, OnInit, Optional, Output, Renderer2, ViewChild} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {intComparator} from '@application/helper/int-comparator';\nimport {StringUtils} from '@application/helper/string-utils';\nimport {WeaveStructureColumnPipe} from '@application/pipes/weave-structure-column.pipe';\nimport {Gauge} from '@domain/machine/gauge';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {PropertyValue} from '@domain/property-value';\nimport {TargetForListOfDrawingsEnum} from '@domain/target-for-list-of-drawings.enum';\nimport {PlasticProduct} from '@domain/textile-data/plastic-product/plastic-product';\nimport {WeaveStructureForMachineQuality} from '@domain/textile-data/weave-structure/weave-structure-for-machine-quality';\nimport {WeftColoredYarnSet} from '@domain/textile-data/weft-colored-yarn-set/weft-colored-yarn-set';\nimport {Tool} from '@domain/utilities/tool/tool';\nimport {Articles, ARTICLES} from '@infrastructure/http/article/articles';\nimport {COLOR_SETS, ColorSets} from '@infrastructure/http/color-set/color-sets';\nimport {Colors, COLORS} from '@infrastructure/http/color/colors';\nimport {COLORED_YARN_SETS, ColoredYarnSets} from '@infrastructure/http/colored-yarn-set/colored-yarn-sets';\nimport {Creels, CREELS} from '@infrastructure/http/creel/creels';\nimport {DRAWINGS, Drawings} from '@infrastructure/http/drawing/drawings';\nimport {GetAllMachineQualitiesParameters, MACHINE_QUALITIES, MachineQualities} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {Machines, MACHINES} from '@infrastructure/http/machine/machines.interface';\nimport {HttpPlasticProductsService} from '@infrastructure/http/plastic-product/http-plastic-products.service';\nimport {HttpToolsService} from '@infrastructure/http/tool/http-tools.service';\nimport {HttpTuftProductsService} from '@infrastructure/http/tuft-product/http-tuft-products.service';\nimport {GetAllWeaveProductsParameters, WEAVE_PRODUCT, WeaveProducts} from '@infrastructure/http/weave-product/weave-products.interface';\nimport {WEAVE_STRUCTURES, WeaveStructures} from '@infrastructure/http/weave-structure/weave-structures';\nimport {WEFT_COLORED_YARN_SETS, WeftColoredYarnSets} from '@infrastructure/http/weft-colored-yarn-set/weft-colored-yarn-sets';\nimport {DesignPreviewComponent} from '@presentation/components/grid/design-preview/design-preview.component';\nimport {MachineOverviewList} from '@presentation/pages/machine-overview/machine-overview-list';\nimport {OverviewMachine} from '@presentation/pages/machine-overview/overview-machine';\nimport {OverviewListArticle} from '@presentation/pages/texfab/article/overview/overview-list-article';\nimport {GridColorSetPreviewComponent} from '@presentation/pages/textile-data/color-set/overview/grid-color-set-preview/grid-color-set-preview.component';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {GridColorPreviewComponent} from '@presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview.component';\nimport {GridColoredYarnSetPreviewComponent} from '@presentation/pages/textile-data/colored-yarn-set/overview/grid-colored-yarn-set-preview/grid-colored-yarn-set-preview.component';\nimport {OverviewListColoredYarnSet} from '@presentation/pages/textile-data/colored-yarn-set/overview/overview-list-colored-yarn-set';\nimport {GridCreelPreviewComponent} from '@presentation/pages/textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component';\nimport {OverviewListCreel} from '@presentation/pages/textile-data/creel/overview/overview-list-creel';\nimport {OverviewWeaveQualityTypeComponent} from '@presentation/pages/textile-data/machine-quality/overview-weave-quality-type/overview-weave-quality-type.component';\nimport {OverviewListMachineQuality} from '@presentation/pages/textile-data/machine-quality/overview/overview-list-machine-quality';\nimport {WeaveQualityType} from '@presentation/pages/textile-data/machine-quality/overview/weave-quality-type.enum';\nimport {PlasticProductOverviewService} from '@presentation/pages/textile-data/plastic-product/overview/plastic-product-overview.service';\nimport {OverviewListTuftProduct} from '@presentation/pages/textile-data/tuft-product/overview/overview-list-tuft-product';\nimport {OverviewListWeaveProduct} from '@presentation/pages/textile-data/weave-product/overview/overview-list-weave-product';\nimport {ToolOverviewService} from '@presentation/pages/utilities/tool/overview/tool-overview.service';\nimport {\n AgGridUtils,\n BaseComponent,\n ColDefBuilderFactoryService,\n Color,\n convertUnit,\n EnumUtils,\n FooterConstants,\n GridOptionsBuilderFactoryService,\n LocaleUtils,\n TranslateService,\n Unit,\n WINDOW\n} from '@vdw/angular-component-library';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, FirstDataRenderedEvent, GridOptions, ICellRendererParams, ITooltipParams, RowDoubleClickedEvent, RowNode, RowSelectedEvent, ValueGetterParams} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {find, isEmpty, isEqual, isNil, lowerCase, size} from 'lodash-es';\nimport {forkJoin} from 'rxjs';\nimport {takeUntil} from 'rxjs/operators';\nimport {AdvancedSearchObjectInput} from '../advanced-search-object-input.enum';\nimport {AdvancedSearchComponent} from '../advanced-search.component';\nimport {SelectObjectType} from './select-object-type';\n\n@Component({\n selector: 'app-advanced-search-select-object',\n templateUrl: './advanced-search-select-object.component.html',\n styleUrls: ['./advanced-search-select-object.component.scss']\n})\nexport class AdvancedSearchSelectObjectComponent extends BaseComponent implements OnInit {\n private static readonly nameTranslationKey = 'GENERAL.NAME';\n private static readonly previewTranslationKey = 'GENERAL.PREVIEW';\n private static readonly numberOfCreelPositionsTranslationKey = 'TEXTILE_DATA.MATERIAL_SET.NUMBER_OF_CREEL_POSITIONS';\n private static readonly overviewListColorSetName = 'overviewListColorSet.name';\n private static readonly overviewListYarnSetName = 'overviewListYarnSet.name';\n @Input() public objectInput: AdvancedSearchObjectInput;\n @Input() public selectedObject: SelectObjectType;\n @Input() public showSearchBar = true;\n @Output() public cancel: EventEmitter = new EventEmitter();\n @Output() public objectSelected: EventEmitter = new EventEmitter();\n @ViewChild('grid', {read: ElementRef}) public gridElement: ElementRef;\n @ViewChild('grid') public grid: AgGridAngular;\n public subtitle: string;\n public listOfObjects: SelectObjectType[];\n public columnsDefsForListOfObjects: ColDef[];\n public gridOptionsForListOfObjects: GridOptions;\n\n private reedDensityUnit: Unit;\n private pickDensityUnit: Unit;\n private weftDensityUnit: Unit;\n private pileHeightUnit: Unit;\n\n private readonly actionsHeightInPx = 76;\n private readonly minimumBottomMarginInPx = 16;\n\n private listOfCustomSettings: PropertyValue[];\n\n public constructor(\n @Optional() @Inject(MACHINE_QUALITIES) private readonly machineQualities: MachineQualities,\n @Optional() @Inject(COLOR_SETS) private readonly colorSets: ColorSets,\n @Optional() @Inject(COLORS) private readonly colors: Colors,\n @Optional() @Inject(COLORED_YARN_SETS) private readonly coloredYarnSets: ColoredYarnSets,\n @Optional() @Inject(ARTICLES) private readonly articles: Articles,\n @Optional() @Inject(MACHINES) private readonly machines: Machines,\n @Optional() @Inject(CREELS) private readonly creels: Creels,\n @Optional() @Inject(WEAVE_STRUCTURES) private readonly weaveStructures: WeaveStructures,\n @Optional() @Inject(DRAWINGS) private readonly drawings: Drawings,\n @Optional() @Inject(WEFT_COLORED_YARN_SETS) private weftColoredYarnSets: WeftColoredYarnSets,\n @Optional() @Inject(WEAVE_PRODUCT) private readonly weaveProducts: WeaveProducts,\n @Optional() private readonly tuftProducts: HttpTuftProductsService,\n @Optional() private readonly plasticProducts: HttpPlasticProductsService,\n @Optional() private readonly plasticProductOverviewService: PlasticProductOverviewService,\n @Optional() private readonly toolOverviewService: ToolOverviewService,\n @Optional() private readonly tools: HttpToolsService,\n @Inject(WINDOW) private readonly window: Window,\n private readonly translate: TranslateService,\n private readonly l10nIntlService: L10nIntlService,\n private readonly dialogRef: MatDialogRef,\n private readonly renderer: Renderer2,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactory: ColDefBuilderFactoryService,\n private readonly weaveStructureColumnPipe: WeaveStructureColumnPipe\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setSubtitle();\n this.initialiseColumnsDefsForListOfObjects();\n this.initialiseGridOptionsForListOfObjects();\n this.getListOfObjects();\n }\n\n public filterObjects(filterText: string): void {\n this.grid.api.setGridOption('quickFilterText', filterText);\n }\n\n public cancelObjectSelection(): void {\n this.cancel.emit();\n }\n\n public canChooseSelectedObject(): boolean {\n return !isNil(this.selectedObject);\n }\n\n public chooseSelectedObject(): void {\n this.objectSelected.emit(this.selectedObject);\n }\n\n public showOnlyLatestVersionChanged(showOnlyLatestVersion: boolean): void {\n this.getListOfObjects(showOnlyLatestVersion);\n }\n\n public canShowLatestVersionToggle(): boolean {\n return [AdvancedSearchObjectInput.MACHINE_QUALITY, AdvancedSearchObjectInput.WEAVE_PRODUCT].includes(this.objectInput);\n }\n\n private getOverlayTranslationKey(): string {\n let key = 'GENERAL.ADVANCED_SEARCH';\n switch (this.objectInput) {\n case AdvancedSearchObjectInput.MACHINE_QUALITY:\n key = this.translate.instant(`${key}.MACHINE_QUALITY`, {count: 2});\n break;\n case AdvancedSearchObjectInput.COLORED_YARN_SET:\n key = this.translate.instant(`${key}.COLORED_YARN_SET`, {count: 2});\n break;\n case AdvancedSearchObjectInput.COLOR_SET:\n key = this.translate.instant(`${key}.COLOR_SET`, {count: 2});\n break;\n case AdvancedSearchObjectInput.MAIN_COLOR:\n key = this.translate.instant(`${key}.MAIN_COLOR`, {count: 2});\n break;\n case AdvancedSearchObjectInput.ARTICLE:\n key = this.translate.instant(`${key}.ARTICLE`, {count: 2});\n break;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n key = this.translate.instant(`${key}.WEAVE_STRUCTURE`, {count: 2});\n break;\n case AdvancedSearchObjectInput.MAIN_DESIGN:\n key = this.translate.instant(`${key}.MAIN_DESIGN`, {count: 2});\n break;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n key = this.translate.instant(`${key}.WEFT_COLORED_YARN_SET`, {count: 2});\n break;\n default:\n key = this.translate.instant(`${key}.BORDER_COLOR`, {count: 2});\n break;\n }\n\n return key;\n }\n\n private initialiseGridOptionsForListOfObjects(): void {\n this.gridOptionsForListOfObjects = this.gridOptionsBuilderFactoryService\n .getBuilder(this.columnsDefsForListOfObjects, this.getGridIdentifier())\n .withRowHeight(this.getRowHeight())\n .withOnRowDoubleClicked((event: RowDoubleClickedEvent) => this.onRowDoubleClicked(event))\n .withOnRowSelected((event: RowSelectedEvent) => (this.selectedObject = event.node.data))\n .withOnGridReady(() => this.onGridReadyEvent())\n .withOnFirstDataRendered(({api}: FirstDataRenderedEvent) => {\n api.forEachNode((node: RowNode) => {\n node.setSelected(isEqual(node.data, this.selectedObject));\n });\n })\n .withNoRowsOverlay({\n titleParam: this.getOverlayTranslationKey(),\n hideDescription: true,\n filterDescriptionParam: {\n paramKeyCreate: this.getOverlayTranslationKey()\n }\n })\n .withLoadingOverlay()\n .withAutomaticRowSelection()\n .withAutomaticButtonFocusOnRowSelection(`[id=\"${this.dialogRef.id}\"] .${FooterConstants.CHOOSE_BUTTON_CLASS_NAME}`)\n .build();\n }\n\n private getRowHeight(): number {\n return this.objectInput === AdvancedSearchObjectInput.MAIN_DESIGN ? 96 : 56;\n }\n\n private onRowDoubleClicked(event: RowDoubleClickedEvent): void {\n if (event && event.node && event.node.data) {\n this.objectSelected.emit(event.node.data);\n }\n }\n\n private setSubtitle(): void {\n const subtitleKey = 'GENERAL.ACTIONS.CHOOSE_OBJECT';\n let key = 'GENERAL.ADVANCED_SEARCH';\n switch (this.objectInput) {\n case AdvancedSearchObjectInput.MACHINE_QUALITY:\n key = this.translate.instant(`${key}.MACHINE_QUALITY`, {count: 1});\n break;\n case AdvancedSearchObjectInput.COLORED_YARN_SET:\n key = this.translate.instant(`${key}.COLORED_YARN_SET`, {count: 1});\n break;\n case AdvancedSearchObjectInput.MACHINE:\n key = this.translate.instant(`${key}.MACHINE`);\n break;\n case AdvancedSearchObjectInput.COLOR_SET:\n key = this.translate.instant(`${key}.COLOR_SET`, {count: 1});\n break;\n case AdvancedSearchObjectInput.MAIN_COLOR:\n key = this.translate.instant(`${key}.MAIN_COLOR`, {count: 1});\n break;\n case AdvancedSearchObjectInput.ARTICLE:\n key = this.translate.instant(`${key}.ARTICLE`, {count: 1});\n break;\n case AdvancedSearchObjectInput.CREEL:\n key = this.translate.instant(`${key}.CREEL`, {count: 1});\n break;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n key = this.translate.instant(`${key}.WEAVE_STRUCTURE`, {count: 1});\n break;\n case AdvancedSearchObjectInput.MAIN_DESIGN:\n key = this.translate.instant(`${key}.MAIN_DESIGN`, {count: 1});\n break;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n key = this.translate.instant(`${key}.WEFT_COLORED_YARN_SET`, {count: 1});\n break;\n case AdvancedSearchObjectInput.WEAVE_PRODUCT:\n key = this.translate.instant(`${key}.WEAVE_PRODUCT`);\n break;\n case AdvancedSearchObjectInput.TUFT_PRODUCT:\n key = this.translate.instant(`${key}.TUFT_PRODUCT`);\n break;\n case AdvancedSearchObjectInput.PLASTIC_PRODUCT:\n key = this.translate.instant(`${key}.PLASTIC_PRODUCT`);\n break;\n case AdvancedSearchObjectInput.TOOL:\n key = this.translate.instant(`${key}.TOOL`);\n break;\n default:\n key = this.translate.instant(`${key}.BORDER_COLOR`, {count: 1});\n break;\n }\n\n this.subtitle = this.translate.instant(subtitleKey, {object: lowerCase(key)});\n }\n\n private getListOfObjects(showOnlyLatestVersion: boolean = true): void {\n switch (this.objectInput) {\n case AdvancedSearchObjectInput.MACHINE_QUALITY:\n this.getMachineQualities(showOnlyLatestVersion);\n break;\n case AdvancedSearchObjectInput.COLORED_YARN_SET:\n this.getColoredYarnSets();\n break;\n case AdvancedSearchObjectInput.MACHINE:\n this.getMachines();\n break;\n case AdvancedSearchObjectInput.COLOR_SET:\n this.getColorSets();\n break;\n case AdvancedSearchObjectInput.MAIN_COLOR:\n case AdvancedSearchObjectInput.BORDER_COLOR:\n this.getColors();\n break;\n case AdvancedSearchObjectInput.ARTICLE:\n this.getArticles();\n break;\n case AdvancedSearchObjectInput.CREEL:\n this.getCreels();\n break;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n this.getWeaveStructures();\n break;\n case AdvancedSearchObjectInput.MAIN_DESIGN:\n this.getMainDesigns();\n break;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n this.getWeftColoredYarnSets();\n break;\n case AdvancedSearchObjectInput.WEAVE_PRODUCT:\n this.getWeaveProducts(showOnlyLatestVersion);\n break;\n case AdvancedSearchObjectInput.TUFT_PRODUCT:\n this.getTuftProducts();\n break;\n case AdvancedSearchObjectInput.PLASTIC_PRODUCT:\n this.getPlasticProducts();\n break;\n case AdvancedSearchObjectInput.TOOL:\n this.getTools();\n break;\n }\n }\n\n private getMachines(): void {\n this.machines\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfMachines: MachineOverviewList[]) => (this.listOfObjects = listOfMachines));\n }\n\n private getColoredYarnSets(): void {\n this.coloredYarnSets\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((listOfColoredYarnSets: OverviewListColoredYarnSet[]) => (this.listOfObjects = listOfColoredYarnSets));\n }\n\n private getMachineQualities(showOnlyLatestVersion: boolean): void {\n const parameters: Partial = {showOnlyLatestVersion};\n\n forkJoin([this.machineQualities.getListOfCustomSettings(), this.machineQualities.getAll(parameters)])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([listOfCustomSettings, machineQualities]: [PropertyValue[], OverviewListMachineQuality[]]) => {\n this.listOfCustomSettings = listOfCustomSettings;\n this.listOfObjects = machineQualities;\n\n this.reedDensityUnit = Unit[this.getDefaultMachineQualityParameterForPropertyName('reedDensityUnit')];\n this.pickDensityUnit = Unit[this.getDefaultMachineQualityParameterForPropertyName('pickDensityUnit')];\n this.weftDensityUnit = Unit[this.getDefaultMachineQualityParameterForPropertyName('weftDensityUnit')];\n this.pileHeightUnit = Unit[this.getDefaultMachineQualityParameterForPropertyName('pileHeightUnit')];\n });\n }\n\n private getColorSets(): void {\n this.colorSets\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((colorSets: OverviewListColorSet[]) => (this.listOfObjects = colorSets));\n }\n\n private getColors(): void {\n this.colors\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((colors: Color[]) => (this.listOfObjects = colors));\n }\n\n private getArticles(): void {\n this.articles\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((articles: OverviewListArticle[]) => (this.listOfObjects = articles));\n }\n\n private getCreels(): void {\n this.creels\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((creels: OverviewListCreel[]) => (this.listOfObjects = creels));\n }\n\n private getWeaveStructures(): void {\n this.weaveStructures\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((weaveStructures: WeaveStructureForMachineQuality[]) => (this.listOfObjects = weaveStructures));\n }\n\n private getMainDesigns(): void {\n this.drawings\n .getSlice(0, 0, 'thumbs', false, TargetForListOfDrawingsEnum.PRODUCTION_ORDER, [])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((drawings: Drawing[]) => {\n this.listOfObjects = drawings;\n });\n }\n\n private getWeftColoredYarnSets(): void {\n this.weftColoredYarnSets\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((weftColoredYarnSets: WeftColoredYarnSet[]) => (this.listOfObjects = weftColoredYarnSets));\n }\n\n private getWeaveProducts(showOnlyLatestVersion: boolean): void {\n const parameters: Partial = {showOnlyLatestVersion};\n\n this.weaveProducts\n .getAll(parameters)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((weaveProducts: OverviewListWeaveProduct[]) => (this.listOfObjects = weaveProducts));\n }\n\n private getTuftProducts(): void {\n this.tuftProducts\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((tuftProducts: OverviewListTuftProduct[]) => (this.listOfObjects = tuftProducts));\n }\n\n private getPlasticProducts(): void {\n this.plasticProducts\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((plasticProducts: PlasticProduct[]) => (this.listOfObjects = plasticProducts));\n }\n\n private getTools(): void {\n this.tools\n .getAll()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((tools: Tool[]) => (this.listOfObjects = tools));\n }\n\n private getColumnDefsForListOfMachines(): ColDef[] {\n return [\n this.colDefBuilderFactory\n .getBuilder()\n .withField('name')\n .withValueGetter((params: ValueGetterParams) => this.machineNameValueGetter(params))\n .withSuppressHeaderMenuButton()\n .withResizable(false)\n .build()\n ];\n }\n\n private machineNameValueGetter(params: ValueGetterParams): string {\n const overviewMachine: OverviewMachine = params.data;\n return !isEmpty(overviewMachine.name) ? overviewMachine.name : this.getNoDataTranslation();\n }\n\n private getNoDataTranslation(): string {\n return this.translate.instant('GENERAL.NO_DATA', {object: lowerCase(this.translate.instant(AdvancedSearchSelectObjectComponent.nameTranslationKey))});\n }\n\n private getColumnDefsForListOfColoredYarnSets(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('overviewListColorSet.creelPositions.length', true)\n .withHeaderName(AdvancedSearchSelectObjectComponent.numberOfCreelPositionsTranslationKey)\n .withComparator(intComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField(AdvancedSearchSelectObjectComponent.overviewListColorSetName, true)\n .withHeaderName('TEXTILE_DATA.COLOR_SET.COLOR_SET')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField(AdvancedSearchSelectObjectComponent.overviewListYarnSetName, true)\n .withHeaderName('TEXTILE_DATA.YARN_SET.YARN_SET')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName(AdvancedSearchSelectObjectComponent.previewTranslationKey)\n .withSortable(false)\n .withoutFilter()\n .withCellRenderer(GridColorSetPreviewComponent)\n .build()\n ];\n }\n\n private getColumnDefsForListOfMachineQualities(): ColDef[] {\n return [\n this.colDefBuilderFactory\n .getBuilder()\n .withField('technicalNameWithVersion')\n .withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey)\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('technicalNameWithVersion')\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('weaveStructure.name')\n .withHeaderName('TEXTILE_DATA.WEAVE_STRUCTURE.WEAVE_STRUCTURE')\n .withComparator(StringUtils.stringComparator)\n .withValueGetter((params: ValueGetterParams) => this.getValueForWeaveStructureCell(params.data), true)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('reedDensityInDentsPerMM')\n .withHeaderValueGetter(() => this.getHeaderNameFromUnit(this.reedDensityUnit))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.DENTS_PER_MILLIMETER, this.reedDensityUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.DENTS_PER_MILLIMETER, this.reedDensityUnit))\n .withoutFilter()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('pickDensityInPicksPerMM')\n .withHeaderValueGetter(() => this.getHeaderNameFromUnit(this.pickDensityUnit))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.PICKS_PER_MILLIMETER, this.pickDensityUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.PICKS_PER_MILLIMETER, this.pickDensityUnit))\n .withoutFilter()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('weftDensityInDentsPerMM')\n .withHeaderValueGetter(() => this.getHeaderNameFromUnit(this.weftDensityUnit))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.WEFTS_PER_MILLIMETER, this.weftDensityUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.WEFTS_PER_MILLIMETER, this.weftDensityUnit))\n .withoutFilter()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('practicalPickDensityInPicksPerMM')\n .withHeaderValueGetter(() => this.getHeaderNameFromUnit(this.pickDensityUnit))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.PICKS_PER_MILLIMETER, this.pickDensityUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.PICKS_PER_MILLIMETER, this.pickDensityUnit))\n .withoutFilter()\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('pileHeightInMM')\n .withHeaderValueGetter(() => this.getHeaderNameFromUnit(this.pileHeightUnit))\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.MILLIMETER, this.pileHeightUnit))\n .withTooltipValueGetter((params: ITooltipParams) => this.buildAgGridCellTooltipWithUnit(params.value, Unit.MILLIMETER, this.pileHeightUnit))\n .build()\n ];\n }\n\n private getValueForWeaveStructureCell(machineQuality: OverviewListMachineQuality): string {\n return this.weaveStructureColumnPipe.transform(machineQuality);\n }\n\n private getDefaultMachineQualityParameterForPropertyName(propertyName: string): string {\n return find(this.listOfCustomSettings, ['propertyName', propertyName]).propertyValue;\n }\n\n private getColumnDefsForListOfColorSets(): ColDef[] {\n return [\n this.colDefBuilderFactory\n .getBuilder()\n .withField('name')\n .withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey)\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('name')\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName(AdvancedSearchSelectObjectComponent.numberOfCreelPositionsTranslationKey)\n .withCellRenderer((params: ICellRendererParams) => `${this.getNumberOfCreelPositionsForColorSet(params.data)}`)\n .withTooltipValueGetter((params: ITooltipParams) => `${this.getNumberOfCreelPositionsForColorSet(params.data)}`)\n .withComparator((valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode) => {\n return size((nodeA.data as OverviewListColorSet).creelPositions) - size((nodeB.data as OverviewListColorSet).creelPositions);\n })\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.COLOR.COLOR')\n .withCellRenderer((params: ICellRendererParams) => this.getCommaSeparatedStringForColorSet(params.data))\n .withTooltipValueGetter((params: ITooltipParams) => this.getCommaSeparatedStringForColorSet(params.data))\n .withComparator((valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode) => {\n const firstColorSetOverviewList: OverviewListColorSet = nodeA.data;\n const colorNamesOfFirstColorSet: string = StringUtils.createStringFromColorsOrYarnTypes(firstColorSetOverviewList.getUniqueColors());\n\n const secondColorSetOverviewList: OverviewListColorSet = nodeB.data;\n const colorNamesOfSecondColorSet: string = StringUtils.createStringFromColorsOrYarnTypes(secondColorSetOverviewList.getUniqueColors());\n\n return StringUtils.stringComparator(colorNamesOfFirstColorSet, colorNamesOfSecondColorSet);\n })\n .build(),\n this.colDefBuilderFactory.getBuilder().withHeaderName(AdvancedSearchSelectObjectComponent.previewTranslationKey).withSortable(false).withCellRenderer(GridColorSetPreviewComponent).build()\n ];\n }\n\n private getNumberOfCreelPositionsForColorSet(colorSet: OverviewListColorSet): number {\n return size(colorSet.creelPositions);\n }\n\n private getCommaSeparatedStringForColorSet(colorSet: OverviewListColorSet): string {\n return StringUtils.createStringFromColorsOrYarnTypes(colorSet.getUniqueColors());\n }\n\n private getColumnDefsForListOfColors(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withHeaderName('TEXTILE_DATA.COLOR.RGB')\n .withSortable(false)\n .withCellRenderer(GridColorPreviewComponent, {\n showRGBValue: true\n })\n .withValueGetter('data')\n .withTooltipField('name')\n .withoutFilter()\n .build()\n ];\n }\n\n private getColumnDefsForListOfArticles(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name').withHeaderName('CUSTOMERS.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory.getBuilder().withField('design.name').withHeaderName('DESIGN_LIBRARY.DESIGN').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('machineQuality.nameWithVersion')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.MACHINE_QUALITY')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withValueGetter('data.coloredYarnSet')\n .withHeaderName('TEXTILE_DATA.COLORED_YARN_SET.COLORED_YARN_SET')\n .withCellRenderer(GridColoredYarnSetPreviewComponent)\n .withSortable(false)\n .withoutFilter()\n .build()\n ];\n }\n\n private getColumnDefsForListOfCreels(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('preview')\n .withValueGetter('data.coloredYarnSetsWithStartDent')\n .withHeaderName(AdvancedSearchSelectObjectComponent.previewTranslationKey)\n .withCellRenderer(GridCreelPreviewComponent)\n .withSortable(false)\n .withoutFilter()\n .build()\n ];\n }\n\n private getColumnDefsForListOfWeaveStructures(): ColDef[] {\n return [\n this.colDefBuilderFactory\n .getBuilder()\n .withField('name', true)\n .withColId('name')\n .withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey)\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory.getBuilder().withField('version', true).withColId('version').withHeaderName('GENERAL.VERSION').withComparator(intComparator).build(),\n this.colDefBuilderFactory.getBuilder().withField('type', true).withColId('type').withHeaderName('GENERAL.TYPE').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('qualityType')\n .withHeaderName('TEXTILE_DATA.MACHINE_QUALITY.QUALITY_TYPE')\n .withCellRenderer(OverviewWeaveQualityTypeComponent)\n .withComparator(StringUtils.stringComparator)\n .withTooltipValueGetter((params: ITooltipParams) => this.getValueForQualityTypeCell(params.data.qualityType))\n .build(),\n this.colDefBuilderFactory.getBuilder().withField('description', true).withColId('description').withHeaderName('GENERAL.DESCRIPTION').withComparator(StringUtils.stringComparator).build()\n ];\n }\n\n private getColumnDefsForListOfDesigns(): ColDef[] {\n return [\n this.colDefBuilderFactory\n .getBuilder()\n .withField('name')\n .withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey)\n .withComparator(StringUtils.stringComparator)\n .withTooltipField('name')\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withValueGetter('data')\n .withHeaderName(AdvancedSearchSelectObjectComponent.previewTranslationKey)\n .withCellRenderer(DesignPreviewComponent)\n .withSortable(false)\n .withoutFilter()\n .build()\n ];\n }\n\n private getColumnDefsForListOfWeftColoredYarnSets(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('overviewListColorSet.creelPositions.length')\n .withHeaderName(AdvancedSearchSelectObjectComponent.numberOfCreelPositionsTranslationKey)\n .withComparator(intComparator)\n .build(),\n this.colDefBuilderFactory.getBuilder().withField(AdvancedSearchSelectObjectComponent.overviewListColorSetName).withHeaderName('TEXTILE_DATA.COLOR_SET.COLOR_SET').build(),\n this.colDefBuilderFactory.getBuilder().withField(AdvancedSearchSelectObjectComponent.overviewListYarnSetName).withHeaderName('TEXTILE_DATA.YARN_SET.YARN_SET').build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withValueGetter('data')\n .withHeaderName(AdvancedSearchSelectObjectComponent.previewTranslationKey)\n .withCellRenderer(GridColoredYarnSetPreviewComponent)\n .withSortable(false)\n .withoutFilter()\n .build()\n ];\n }\n\n private getColumnDefsForListOfWeaveProducts(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withField('name', true).withHeaderName(AdvancedSearchSelectObjectComponent.nameTranslationKey).withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('widthInCm')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, Unit.CENTIMETER))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('pickDensityInPicksPerCm')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.PICK_DENSITY')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, Unit.PICKS_PER_CENTIMETER))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('standardSpeedInRotationsPerMinute')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_SPEED')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.value, Unit.ROTATIONS_PER_MINUTE))\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withField('standardEfficiencyInPercentage')\n .withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.STANDARD_EFFICIENCY')\n .withRightAlignment()\n .withCellRenderer((params: ICellRendererParams) => `${params.value} %`)\n .build(),\n this.colDefBuilderFactory.getBuilder().withField('numberOfFeeders').withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_FEEDERS').withRightAlignment().build(),\n this.colDefBuilderFactory.getBuilder().withField('numberOfShafts').withHeaderName('TEXTILE_DATA.WEAVE_PRODUCT.NUMBER_OF_SHAFTS').withRightAlignment().build()\n ];\n }\n\n private getColumnDefsForListOfTuftProducts(): ColDef[] {\n return [\n this.colDefBuilderFactory.getBuilder().withColIdAndField('name', true).withHeaderName('GENERAL.NAME').withComparator(StringUtils.stringComparator).build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('version', true)\n .withHeaderName('GENERAL.VERSION')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('widthInCm')\n .withHeaderName('GENERAL.DIMENSIONS.WIDTH')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value, Unit.CENTIMETER, this.l10nIntlService))\n .withCellClass('right')\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('blend', true)\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.BLEND')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('left')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('color', true)\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.COLOR')\n .withCellRenderer((params: ICellRendererParams) => params.getValue())\n .withCellClass('left')\n .withComparator(StringUtils.stringComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('gauge')\n .withHeaderName('GENERAL.DIMENSIONS.GAUGE')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue().fractionalValueAsString, Unit.INCH))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value?.fractionalValueAsString, Unit.INCH, this.l10nIntlService))\n .withCellClass('right')\n .withComparator(this.gaugeComparator)\n .build(),\n this.colDefBuilderFactory\n .getBuilder()\n .withColIdAndField('stitchRateInStitchesPerCm')\n .withHeaderName('TEXTILE_DATA.TUFT_PRODUCT.STITCH_RATE')\n .withCellRenderer((params: ICellRendererParams) => this.buildAgGridCellTextWithUnit(params.getValue(), Unit.PER_CENTIMETER))\n .withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnit(params.value, Unit.PER_CENTIMETER, this.l10nIntlService))\n .withCellClass('right')\n .build()\n ];\n }\n\n private getColumnDefsForListOfPlasticProducts(): ColDef[] {\n return this.plasticProductOverviewService.getColumnDefs(false).colDefs;\n }\n\n private getColumnDefsForListOfTools(): ColDef[] {\n return this.toolOverviewService.getColumnDefs(false).colDefs;\n }\n\n private gaugeComparator(valueA: Gauge, valueB: Gauge, _nodeA: RowNode, _nodeB: RowNode, _isInverted: boolean): number {\n const comparison = valueA.fractionalValue > valueB.fractionalValue ? 1 : -1;\n return valueA.fractionalValue === valueB.fractionalValue ? 0 : comparison;\n }\n\n private getValueForQualityTypeCell(qualityType: WeaveQualityType): string {\n return this.translate.instant(`TEXTILE_DATA.MACHINE_QUALITY.TYPES.${qualityType}`);\n }\n\n private buildAgGridCellTextWithUnit(value: number, defaultUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTextWithUnit(value, defaultUnit, this.l10nIntlService);\n }\n\n private buildAgGridCellTextWithoutUnit(value: number, fromUnit: Unit, toUnit: Unit): string {\n const conversionResult = convertUnit({\n from: {\n value,\n unit: fromUnit\n },\n to: toUnit\n });\n\n return LocaleUtils.formatNumber(conversionResult, this.l10nIntlService);\n }\n\n private buildAgGridCellTooltipWithUnit(value: number, defaultUnit: Unit, toUnit: Unit): string {\n return AgGridUtils.buildAgGridCellTooltipWithUnitConversion(value, defaultUnit, toUnit, this.l10nIntlService);\n }\n\n private initialiseColumnsDefsForListOfObjects(): void {\n switch (this.objectInput) {\n case AdvancedSearchObjectInput.MACHINE_QUALITY:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfMachineQualities();\n break;\n case AdvancedSearchObjectInput.COLORED_YARN_SET:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfColoredYarnSets();\n break;\n case AdvancedSearchObjectInput.MACHINE:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfMachines();\n break;\n case AdvancedSearchObjectInput.COLOR_SET:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfColorSets();\n break;\n case AdvancedSearchObjectInput.MAIN_COLOR:\n case AdvancedSearchObjectInput.BORDER_COLOR:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfColors();\n break;\n case AdvancedSearchObjectInput.ARTICLE:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfArticles();\n break;\n case AdvancedSearchObjectInput.CREEL:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfCreels();\n break;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfWeaveStructures();\n break;\n case AdvancedSearchObjectInput.MAIN_DESIGN:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfDesigns();\n break;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfWeftColoredYarnSets();\n break;\n case AdvancedSearchObjectInput.WEAVE_PRODUCT:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfWeaveProducts();\n break;\n case AdvancedSearchObjectInput.TUFT_PRODUCT:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfTuftProducts();\n break;\n case AdvancedSearchObjectInput.PLASTIC_PRODUCT:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfPlasticProducts();\n break;\n case AdvancedSearchObjectInput.TOOL:\n this.columnsDefsForListOfObjects = this.getColumnDefsForListOfTools();\n break;\n }\n }\n\n private calculateGridHeight(): void {\n const gridHeight = this.window.innerHeight - this.gridElement.nativeElement.getBoundingClientRect().y - this.actionsHeightInPx - this.minimumBottomMarginInPx;\n this.renderer.setStyle(this.gridElement.nativeElement, 'height', `${gridHeight}px`);\n }\n\n private onGridReadyEvent(): void {\n this.calculateGridHeight();\n }\n\n private getHeaderNameFromUnit(unit: Unit): string {\n return unit ? this.translate.instant(`GENERAL.UNIT.${EnumUtils.getKeyFromValue(Unit, unit)}`) : '';\n }\n\n private getGridIdentifier(): GridIdentifier {\n switch (this.objectInput) {\n case AdvancedSearchObjectInput.MACHINE_QUALITY:\n return GridIdentifier.ADVANCED_SEARCH_MACHINE_QUALITY;\n case AdvancedSearchObjectInput.COLORED_YARN_SET:\n return GridIdentifier.ADVANCED_SEARCH_COLORED_YARN_SET;\n case AdvancedSearchObjectInput.MACHINE:\n return GridIdentifier.ADVANCED_SEARCH_MACHINE;\n case AdvancedSearchObjectInput.COLOR_SET:\n return GridIdentifier.ADVANCED_SEARCH_COLOR_SET;\n case AdvancedSearchObjectInput.MAIN_COLOR:\n return GridIdentifier.ADVANCED_SEARCH_MAIN_COLOR;\n case AdvancedSearchObjectInput.BORDER_COLOR:\n return GridIdentifier.ADVANCED_SEARCH_BORDER_COLOR;\n case AdvancedSearchObjectInput.ARTICLE:\n return GridIdentifier.ADVANCED_SEARCH_ARTICLE;\n case AdvancedSearchObjectInput.CREEL:\n return GridIdentifier.ADVANCED_SEARCH_CREEL;\n case AdvancedSearchObjectInput.WEAVE_STRUCTURE:\n return GridIdentifier.ADVANCED_SEARCH_WEAVE_STRUCTURE;\n case AdvancedSearchObjectInput.MAIN_DESIGN:\n return GridIdentifier.ADVANCED_SEARCH_MAIN_DESIGN;\n case AdvancedSearchObjectInput.WEFT_COLORED_YARN_SET:\n return GridIdentifier.ADVANCED_SEARCH_WEFT_COLORED_YARN_SET;\n case AdvancedSearchObjectInput.WEAVE_PRODUCT:\n return GridIdentifier.ADVANCED_SEARCH_WEAVE_PRODUCT;\n case AdvancedSearchObjectInput.TUFT_PRODUCT:\n return GridIdentifier.ADVANCED_SEARCH_TUFT_PRODUCT;\n case AdvancedSearchObjectInput.PLASTIC_PRODUCT:\n return GridIdentifier.ADVANCED_SEARCH_PLASTIC_PRODUCT;\n case AdvancedSearchObjectInput.TOOL:\n return GridIdentifier.ADVANCED_SEARCH_TOOL;\n default:\n return undefined;\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {HttpClientModule} from '@angular/common/http';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {RouterModule} from '@angular/router';\nimport {BreadcrumbFormLinkerDirective} from '@application/directives/breadcrumb-form-linker.directive';\nimport {DataCyDirective} from '@application/directives/data-cy.directive';\nimport {HasPermissionDirective} from '@application/directives/has-permission.directive';\nimport {InputTimeDirective} from '@application/directives/input-time.directive';\nimport {RunEventsOutsideAngularDirective} from '@application/directives/run-events-outside-angular.directive';\nimport {DrawingImageUploadHelper} from '@application/helper/drawing/drawing-image-upload-helper';\nimport {GridActionButtonsHelper} from '@application/helper/grid-action-buttons-helper/grid-action-buttons-helper';\nimport {DurationFormatPipe} from '@application/pipes/duration-format.pipe';\nimport {HighlightSearchPipe} from '@application/pipes/highlight-search.pipe';\nimport {WeaveStructureColumnPipe} from '@application/pipes/weave-structure-column.pipe';\nimport {VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller';\nimport {COLOR_SETS} from '@infrastructure/http/color-set/color-sets';\nimport {HttpColorSetsService} from '@infrastructure/http/color-set/http-color-sets.service';\nimport {COLORED_YARN_SETS} from '@infrastructure/http/colored-yarn-set/colored-yarn-sets';\nimport {HttpColoredYarnSetsService} from '@infrastructure/http/colored-yarn-set/http-colored-yarn-sets.service';\nimport {FINISHING_TEMPLATES} from '@infrastructure/http/finishing-template/finishing-templates';\nimport {HttpFinishingTemplatesService} from '@infrastructure/http/finishing-template/http-finishing-templates.service';\nimport {FINISHINGS} from '@infrastructure/http/finishing/finishings';\nimport {HttpFinishingsService} from '@infrastructure/http/finishing/http-finishings.service';\nimport {HttpMachineQualitiesService} from '@infrastructure/http/machine-quality/http-machine-qualities.service';\nimport {MACHINE_QUALITIES} from '@infrastructure/http/machine-quality/machine-qualities';\nimport {HttpMachinesService} from '@infrastructure/http/machine/http-machines.service';\nimport {MACHINES} from '@infrastructure/http/machine/machines.interface';\nimport {GetPatternVisualisationByPatternId} from '@infrastructure/http/patterns/get-pattern-visualisation-by-pattern-id';\nimport {HttpPatternsService} from '@infrastructure/http/patterns/http-patterns.service';\nimport {PATTERNS} from '@infrastructure/http/patterns/patterns';\nimport {HttpWeaveProductsService} from '@infrastructure/http/weave-product/http-weave-products.service';\nimport {WEAVE_PRODUCT} from '@infrastructure/http/weave-product/weave-products.interface';\nimport {HttpWeaveStructuresService} from '@infrastructure/http/weave-structure/http-weave-structures.service';\nimport {WEAVE_STRUCTURES} from '@infrastructure/http/weave-structure/weave-structures';\nimport {HttpWeftColoredYarnSetsService} from '@infrastructure/http/weft-colored-yarn-set/http-weft-colored-yarn-sets.service';\nimport {WEFT_COLORED_YARN_SETS} from '@infrastructure/http/weft-colored-yarn-set/weft-colored-yarn-sets';\nimport {HttpYarnConsumptionService} from '@infrastructure/http/yarn-consumption/http-yarn-consumption.service';\nimport {YARN_CONSUMPTION} from '@infrastructure/http/yarn-consumption/yarn-consumption';\nimport {HttpYarnSetsService} from '@infrastructure/http/yarn-set/http-yarn-sets.service';\nimport {YARN_SETS} from '@infrastructure/http/yarn-set/yarn-sets';\nimport {REALTIME_YARN_CONSUMPTION} from '@infrastructure/signalr/yarn-consumption/realtime-yarn-consumption';\nimport {SignalrYarnConsumptionService} from '@infrastructure/signalr/yarn-consumption/signalr-yarn-consumption.service';\nimport {AmountSpecifierComponent} from '@presentation/components/amount-specifier/amount-specifier.component';\nimport {BackgroundJobsDialogComponent} from '@presentation/components/background-jobs/background-jobs-dialog.component';\nimport {BackgroundJobsGridComponent} from '@presentation/components/background-jobs/background-jobs-grid/background-jobs-grid.component';\nimport {BackgroundJobsOverviewStatusComponent} from '@presentation/components/background-jobs/background-jobs-overview-status/background-jobs-overview-status.component';\nimport {CardInfoComponent} from '@presentation/components/card-info/card-info.component';\nimport {ColorListPreviewComponent} from '@presentation/components/color-list-preview/color-list-preview.component';\nimport {ColoredYarnSetPreviewComponent} from '@presentation/components/colored-yarn-set-preview/colored-yarn-set-preview.component';\nimport {ConnectBaselineComponent} from '@presentation/components/connect-baseline/connect-baseline.component';\nimport {CreelMappingComponent} from '@presentation/components/creel-mapping/creel-mapping.component';\nimport {CreelMappingTableComponent} from '@presentation/components/creel-tables/creel-mapping-table/creel-mapping-table.component';\nimport {CreelPreviewTableComponent} from '@presentation/components/creel-tables/creel-preview-table/creel-preview-table.component';\nimport {DeclarationPreviewComponent} from '@presentation/components/declaration-preview/declaration-preview.component';\nimport {OrderLinesCustomSettingsDialogComponent} from '@presentation/components/dialog-button/dialog-data/order-lines-settings/order-lines-settings.component';\nimport {SwitchCommercialTechnicalUnitsCustomSettingsDialogComponent} from '@presentation/components/dialog-button/dialog-data/switch-commercial-technical-units/switch-commercial-technical-units.component';\nimport {DisabledFormInputComponent} from '@presentation/components/disabled-form-input/disabled-form-input.component';\nimport {DrawingConfigurationComponent} from '@presentation/components/drawing-configuration/drawing-configuration.component';\nimport {LoadDrawingImageDirective} from '@presentation/components/drawing-list/load-drawing-image.directive';\nimport {LoadImageLabelDirective} from '@presentation/components/finishing-and-finishing-template/image-label/load-image-label.directive';\nimport {OverviewListFinishingAndFinishingTemplateService} from '@presentation/components/finishing-and-finishing-template/overview/overview-list-finishing-and-finishing-template.service';\nimport {GridProductionStatusComponent} from '@presentation/components/grid-production-status/grid-production-status.component';\nimport {DesignPreviewComponent} from '@presentation/components/grid/design-preview/design-preview.component';\nimport {GridColorListPreviewComponent} from '@presentation/components/grid/grid-color-list-preview/grid-color-list-preview.component';\nimport {LabelPlaceholderComponent} from '@presentation/components/label-placeholder/label-placeholder.component';\nimport {LinkFormTextareaComponent} from '@presentation/components/link-form-textarea/link-form-textarea.component';\nimport {LoadingFileComponent} from '@presentation/components/loading-file/loading-file.component';\nimport {MoreItemsAvailableComponent} from '@presentation/components/more-items-available/more-items-available.component';\nimport {NameGenerationPatternNewComponent} from '@presentation/components/name-generation-pattern-new/name-generation-pattern-new.component';\nimport {NameSuggestionHintComponent} from '@presentation/components/name-generation-pattern-new/name-suggestion-hint/name-suggestion-hint.component';\nimport {PartValuesCellRendererComponent} from '@presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/part-values-cell-renderer.component';\nimport {PropertySelectCellRendererComponent} from '@presentation/components/name-generation-pattern-new/pattern-builder/form-cell-renderers/property-select-cell-renderer.component';\nimport {PatternBuilderComponent} from '@presentation/components/name-generation-pattern-new/pattern-builder/pattern-builder.component';\nimport {NameGenerationPatternComponent} from '@presentation/components/name-generation-pattern/name-generation-pattern.component';\nimport {SelectNameGenerationPatternComponent} from '@presentation/components/name-generation-pattern/select-name-generation-pattern/select-name-generation-pattern.component';\nimport {OnboardingDialogComponent} from '@presentation/components/onboarding-dialog/onboarding-dialog.component';\nimport {GridOrderLineStatusComponent} from '@presentation/components/order-lines-grid/grid-order-line-status/grid-order-line-status.component';\nimport {OrderLinesGridComponent} from '@presentation/components/order-lines-grid/order-lines-grid.component';\nimport {OverviewButtonCardComponent} from '@presentation/components/overview-button-card/overview-button-card.component';\nimport {PannableAndZoomablePatternPreviewComponent} from '@presentation/components/pattern-preview/pannable-and-zoomable-pattern-preview/pannable-and-zoomable-pattern-preview.component';\nimport {PatternPreviewComponent} from '@presentation/components/pattern-preview/pattern-preview.component';\nimport {SvgLoaderDirective} from '@presentation/components/pattern-preview/svg-loader.directive';\nimport {ThumbnailSvgLoaderDirective} from '@presentation/components/pattern-preview/thumbnail-svg-loader.directive';\nimport {PeriodSelectionComponent} from '@presentation/components/period-selection/period-selection.component';\nimport {ProgressSpinnerComponent} from '@presentation/components/progress-spinner/progress-spinner.component';\nimport {RepositionDialogComponent} from '@presentation/components/reposition-dialog/reposition-dialog.component';\nimport {RepositionTooltipComponent} from '@presentation/components/reposition-tooltip/reposition-tooltip.component';\nimport {AdvancedSearchSelectObjectComponent} from '@presentation/components/search-filters/advanced-search/advanced-search-select-object/advanced-search-select-object.component';\nimport {AdvancedSearchComponent} from '@presentation/components/search-filters/advanced-search/advanced-search.component';\nimport {AdvancedSearchDialogComponent} from '@presentation/components/search-filters/advanced-search/dialog/advanced-search-dialog.component';\nimport {SearchFiltersComponent} from '@presentation/components/search-filters/search-filters.component';\nimport {SelectBuggyComponent} from '@presentation/components/select-buggy/select-buggy.component';\nimport {SelectCreelComponent} from '@presentation/components/select-creel/select-creel.component';\nimport {SelectDataUnitSetupComponent} from '@presentation/components/select-data-unit-setup/select-data-unit-setup.component';\nimport {SelectDataUnitComponent} from '@presentation/components/select-data-unit/select-data-unit.component';\nimport {FinishingCutbarAfterLengthComponent} from '@presentation/components/select-finishing/finishing-cutbar-after-length/finishing-cutbar-after-length.component';\nimport {FinishingCutbarBeforeLengthComponent} from '@presentation/components/select-finishing/finishing-cutbar-before-length/finishing-cutbar-before-length.component';\nimport {FinishingLabelsIndicationComponent} from '@presentation/components/select-finishing/finishing-labels-indication/finishing-labels-indication.component';\nimport {FinishingTypeComponent} from '@presentation/components/select-finishing/finishing-type/finishing-type.component';\nimport {SelectFinishingComponent} from '@presentation/components/select-finishing/select-finishing.component';\nimport {SelectMachineQualityComponent} from '@presentation/components/select-machine-quality/select-machine-quality.component';\nimport {PathLayoutTemplateMismatchComponent} from '@presentation/components/select-path-layout-template/path-layout-template-mismatch/path-layout-template-mismatch.component';\nimport {SelectPathLayoutTemplateComponent} from '@presentation/components/select-path-layout-template/select-path-layout-template.component';\nimport {SelectPatternFieldComponent} from '@presentation/components/select-pattern-field/select-pattern-field.component';\nimport {AddPatternComponent} from '@presentation/components/select-pattern/add-pattern/add-pattern.component';\nimport {ContainsVisualisationDataPipe} from '@presentation/components/select-pattern/pattern-example/contains-visualisation-data.pipe';\nimport {PatternExampleComponent} from '@presentation/components/select-pattern/pattern-example/pattern-example.component';\nimport {SelectPatternComponent} from '@presentation/components/select-pattern/select-pattern.component';\nimport {SelectPossibleMachinesComponent} from '@presentation/components/select-possible-machines/select-possible-machines.component';\nimport {SelectRejectReasonComponent} from '@presentation/components/select-reject-reason/select-reject-reason.component';\nimport {SelectReportItemComponent} from '@presentation/components/select-report-item/select-report-item.component';\nimport {SelectResourceTypeBreakdownComponent} from '@presentation/components/select-resource-type-breakdown/select-resource-type-breakdown.component';\nimport {SelectRuleEntityComponent} from '@presentation/components/select-rule-entity/select-rule-entity.component';\nimport {SignTermsAndConditionsComponent} from '@presentation/components/sign-terms-and-conditons/sign-terms-and-conditions.component';\nimport {ThumbnailSelectedIndicatorComponent} from '@presentation/components/thumbnail-selected-indicator/thumbnail-selected-indicator.component';\nimport {UnlockInUseComponent} from '@presentation/components/unlock-in-use/unlock-in-use.component';\nimport {SelectAlertTypesComponent} from '@presentation/pages/settings/alerts/add/select-alert-types/select-alert-types.component';\nimport {SelectRecipientsComponent} from '@presentation/pages/settings/alerts/add/select-recipients/select-recipients.component';\nimport {MachineDocumentationDetailsComponent} from '@presentation/pages/texbot/machine-documentation/machine-documentation-details/machine-documentation-details.component';\nimport {DrawingLibraryImagePreviewComponent} from '@presentation/pages/texedit/drawing-library/drawing-library-image-preview/drawing-library-image-preview.component';\nimport {LoadTechnicalDatasheetImageDirective} from '@presentation/pages/texedit/technical-datasheet/technical-datasheet-list/load-technical-datasheet-image.directive';\nimport {SelectWeaveProductComponent} from '@presentation/pages/texfab/production-order-lite/add/select-weave-product/select-weave-product.component';\nimport {GridColorSetPreviewComponent} from '@presentation/pages/textile-data/color-set/overview/grid-color-set-preview/grid-color-set-preview.component';\nimport {GridColorPreviewComponent} from '@presentation/pages/textile-data/color/overview/grid-color-preview/grid-color-preview.component';\nimport {ColorGridPreviewComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/color-grid-preview/color-grid-preview.component';\nimport {GridColorsOfCreelPositionComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-colors-of-creel-position/grid-colors-of-creel-position.component';\nimport {GridYarnTypesOfCreelPositionComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/grid-yarn-types-of-creel-position.component';\nimport {YarnTypeGridPreviewComponent} from '@presentation/pages/textile-data/colored-yarn-set/add/grid-yarn-types-of-creel-position/yarn-type-grid-preview/yarn-type-grid-preview.component';\nimport {GridCreelPreviewComponent} from '@presentation/pages/textile-data/creel/overview/grid-creel-preview/grid-creel-preview.component';\nimport {GridImageComponent} from '@presentation/pages/textile-data/machine-quality/add/machine-quality-selvedges/select-image/grid-image/grid-image.component';\nimport {GridSelectPreviewComponent} from '@presentation/pages/textile-data/material-set/add/grid-select-preview/grid-select-preview.component';\nimport {GridYarnConsumptionComponent} from '@presentation/pages/textile-data/textile-data-detail/grid-yarn-consumption/grid-yarn-consumption.component';\nimport {TextileDataDetailComponent} from '@presentation/pages/textile-data/textile-data-detail/textile-data-detail.component';\nimport {TextileDataOverviewComponent} from '@presentation/pages/textile-data/textile-data-overview/textile-data-overview.component';\nimport {\n AutoFocusModule,\n BreadcrumbModule,\n CanShowErrorForFormControlModule,\n CapitalFirstLetterPipeModule,\n CommonFormsModule,\n DatepickerFormInputModule,\n DateTimePipe,\n DateTimePipeModule,\n DialogButtonModule,\n DialogHeaderComponent,\n DialogModule,\n DistanceSpecifierModule,\n FilterChipsComponent,\n FilterChipsModule,\n FilterModule,\n FooterModule,\n GridUtilsModule,\n HeaderModule,\n HexValuePipeModule,\n InputChipModule,\n InputL10nDecimalModule,\n LabelModule,\n LocalStorageModule,\n MessageContainerModule,\n MinutesFromNowPipeModule,\n MobilePageHeaderModule,\n ObjectSelectionModule,\n PatternModule,\n ProgressButtonModule,\n RadioToggleButtonModule,\n ResponsivenessModule,\n ReverseArrayPipeModule,\n SlideToggleModule,\n StatusBarModule,\n StringInputModule,\n TabsAndActionsHeaderComponent,\n TabsMenuCardModule,\n TabsMenuModule,\n TagModule,\n ToastModule,\n TranslationModule,\n ZoneInputModule\n} from '@vdw/angular-component-library';\nimport {AgGridModule} from 'ag-grid-angular';\nimport {MaterialModule} from '../material.module';\n\n@NgModule({\n declarations: [\n ColoredYarnSetPreviewComponent,\n GridYarnConsumptionComponent,\n CardInfoComponent,\n ColorListPreviewComponent,\n MoreItemsAvailableComponent,\n GridColorListPreviewComponent,\n PatternExampleComponent,\n SvgLoaderDirective,\n LoadDrawingImageDirective,\n LoadTechnicalDatasheetImageDirective,\n HasPermissionDirective,\n ProgressSpinnerComponent,\n TextileDataOverviewComponent,\n SelectPatternComponent,\n SelectPathLayoutTemplateComponent,\n SelectPatternFieldComponent,\n SelectBuggyComponent,\n SelectDataUnitSetupComponent,\n GridCreelPreviewComponent,\n TextileDataDetailComponent,\n GridColorsOfCreelPositionComponent,\n ColorGridPreviewComponent,\n GridYarnTypesOfCreelPositionComponent,\n GridYarnConsumptionComponent,\n YarnTypeGridPreviewComponent,\n RepositionDialogComponent,\n GridColorPreviewComponent,\n GridColorSetPreviewComponent,\n SearchFiltersComponent,\n AdvancedSearchDialogComponent,\n AdvancedSearchComponent,\n AdvancedSearchSelectObjectComponent,\n DisabledFormInputComponent,\n LoadingFileComponent,\n DataCyDirective,\n LoadImageLabelDirective,\n MachineDocumentationDetailsComponent,\n InputTimeDirective,\n SelectFinishingComponent,\n SelectRuleEntityComponent,\n FinishingCutbarAfterLengthComponent,\n FinishingCutbarBeforeLengthComponent,\n FinishingLabelsIndicationComponent,\n FinishingTypeComponent,\n RunEventsOutsideAngularDirective,\n PeriodSelectionComponent,\n DurationFormatPipe,\n RepositionTooltipComponent,\n HighlightSearchPipe,\n SelectMachineQualityComponent,\n OnboardingDialogComponent,\n BackgroundJobsOverviewStatusComponent,\n PathLayoutTemplateMismatchComponent,\n UnlockInUseComponent,\n CreelMappingTableComponent,\n CreelPreviewTableComponent,\n SelectCreelComponent,\n DesignPreviewComponent,\n DrawingLibraryImagePreviewComponent,\n SignTermsAndConditionsComponent,\n BackgroundJobsDialogComponent,\n BackgroundJobsGridComponent,\n AddPatternComponent,\n OrderLinesGridComponent,\n GridOrderLineStatusComponent,\n DrawingConfigurationComponent,\n AddPatternComponent,\n PatternPreviewComponent,\n PannableAndZoomablePatternPreviewComponent,\n ThumbnailSelectedIndicatorComponent,\n LabelPlaceholderComponent,\n AmountSpecifierComponent,\n GridImageComponent,\n CreelMappingComponent,\n OverviewButtonCardComponent,\n LinkFormTextareaComponent,\n ContainsVisualisationDataPipe,\n GridProductionStatusComponent,\n OverviewButtonCardComponent,\n SwitchCommercialTechnicalUnitsCustomSettingsDialogComponent,\n OrderLinesCustomSettingsDialogComponent,\n SelectPossibleMachinesComponent,\n SelectAlertTypesComponent,\n SelectRecipientsComponent,\n DeclarationPreviewComponent,\n SelectWeaveProductComponent,\n GridSelectPreviewComponent,\n NameGenerationPatternComponent,\n SelectNameGenerationPatternComponent,\n NameGenerationPatternNewComponent,\n NameSuggestionHintComponent,\n ThumbnailSvgLoaderDirective,\n SelectResourceTypeBreakdownComponent,\n SelectDataUnitComponent,\n SelectReportItemComponent,\n SelectRejectReasonComponent,\n BreadcrumbFormLinkerDirective,\n PatternBuilderComponent,\n PropertySelectCellRendererComponent,\n PartValuesCellRendererComponent,\n ConnectBaselineComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n HttpClientModule,\n ReactiveFormsModule,\n FormsModule,\n AgGridModule,\n VirtualScrollerModule,\n TranslationModule,\n CommonFormsModule,\n LabelModule,\n HeaderModule,\n GridUtilsModule,\n ToastModule,\n FilterModule,\n SlideToggleModule,\n ZoneInputModule,\n PatternModule,\n RadioToggleButtonModule,\n MinutesFromNowPipeModule,\n ReverseArrayPipeModule,\n CanShowErrorForFormControlModule,\n CapitalFirstLetterPipeModule,\n HexValuePipeModule,\n TagModule,\n AutoFocusModule,\n DatepickerFormInputModule,\n DialogButtonModule,\n DialogModule,\n DistanceSpecifierModule,\n InputL10nDecimalModule,\n FilterChipsModule,\n MessageContainerModule,\n MobilePageHeaderModule,\n TabsMenuModule,\n TabsMenuCardModule,\n ObjectSelectionModule,\n StringInputModule,\n FooterModule,\n ProgressButtonModule,\n StatusBarModule,\n RouterModule,\n LocalStorageModule.forRoot({prefix: 'vdwt-app'}),\n BreadcrumbModule,\n ResponsivenessModule,\n TabsAndActionsHeaderComponent,\n InputChipModule,\n DateTimePipeModule,\n DialogHeaderComponent\n ],\n providers: [\n {provide: MACHINE_QUALITIES, useClass: HttpMachineQualitiesService},\n {provide: MACHINES, useClass: HttpMachinesService},\n {provide: COLOR_SETS, useClass: HttpColorSetsService},\n {provide: YARN_SETS, useClass: HttpYarnSetsService},\n {provide: YARN_CONSUMPTION, useClass: HttpYarnConsumptionService},\n {provide: REALTIME_YARN_CONSUMPTION, useClass: SignalrYarnConsumptionService},\n {provide: PATTERNS, useClass: HttpPatternsService},\n {provide: COLORED_YARN_SETS, useClass: HttpColoredYarnSetsService},\n {provide: WEFT_COLORED_YARN_SETS, useClass: HttpWeftColoredYarnSetsService},\n {provide: WEAVE_STRUCTURES, useClass: HttpWeaveStructuresService},\n {provide: FINISHINGS, useClass: HttpFinishingsService},\n {provide: FINISHING_TEMPLATES, useClass: HttpFinishingTemplatesService},\n {provide: PATTERNS, useClass: HttpPatternsService},\n {provide: WEAVE_PRODUCT, useClass: HttpWeaveProductsService},\n DurationFormatPipe,\n HighlightSearchPipe,\n DrawingImageUploadHelper,\n WeaveStructureColumnPipe,\n DateTimePipe,\n GetPatternVisualisationByPatternId,\n OverviewListFinishingAndFinishingTemplateService,\n GridActionButtonsHelper\n ],\n exports: [\n ColoredYarnSetPreviewComponent,\n GridYarnConsumptionComponent,\n CardInfoComponent,\n AgGridModule,\n CommonModule,\n MaterialModule,\n HttpClientModule,\n ReactiveFormsModule,\n FormsModule,\n ColorListPreviewComponent,\n MoreItemsAvailableComponent,\n HeaderModule,\n FilterModule,\n SlideToggleModule,\n ZoneInputModule,\n GridColorListPreviewComponent,\n PatternExampleComponent,\n SvgLoaderDirective,\n LoadDrawingImageDirective,\n LoadTechnicalDatasheetImageDirective,\n HasPermissionDirective,\n ProgressSpinnerComponent,\n SelectPatternComponent,\n SelectPathLayoutTemplateComponent,\n SelectBuggyComponent,\n SelectDataUnitSetupComponent,\n TextileDataOverviewComponent,\n GridCreelPreviewComponent,\n TextileDataDetailComponent,\n ColorGridPreviewComponent,\n GridYarnTypesOfCreelPositionComponent,\n GridYarnConsumptionComponent,\n YarnTypeGridPreviewComponent,\n DeclarationPreviewComponent,\n RepositionDialogComponent,\n GridColorPreviewComponent,\n GridColorSetPreviewComponent,\n SearchFiltersComponent,\n AdvancedSearchDialogComponent,\n AdvancedSearchComponent,\n AdvancedSearchSelectObjectComponent,\n DisabledFormInputComponent,\n LoadingFileComponent,\n DataCyDirective,\n LoadImageLabelDirective,\n MachineDocumentationDetailsComponent,\n InputTimeDirective,\n SelectFinishingComponent,\n SelectRuleEntityComponent,\n RunEventsOutsideAngularDirective,\n PeriodSelectionComponent,\n VirtualScrollerModule,\n DurationFormatPipe,\n RepositionTooltipComponent,\n TranslationModule,\n HighlightSearchPipe,\n ContainsVisualisationDataPipe,\n SelectMachineQualityComponent,\n OnboardingDialogComponent,\n BackgroundJobsOverviewStatusComponent,\n PathLayoutTemplateMismatchComponent,\n UnlockInUseComponent,\n CreelMappingTableComponent,\n CreelPreviewTableComponent,\n SelectCreelComponent,\n DesignPreviewComponent,\n DrawingLibraryImagePreviewComponent,\n SignTermsAndConditionsComponent,\n BackgroundJobsDialogComponent,\n BackgroundJobsGridComponent,\n OrderLinesGridComponent,\n GridOrderLineStatusComponent,\n CommonFormsModule,\n LabelModule,\n DrawingConfigurationComponent,\n GridUtilsModule,\n PatternPreviewComponent,\n ThumbnailSelectedIndicatorComponent,\n LabelPlaceholderComponent,\n AmountSpecifierComponent,\n GridImageComponent,\n CreelMappingComponent,\n OverviewButtonCardComponent,\n LinkFormTextareaComponent,\n GridProductionStatusComponent,\n OverviewButtonCardComponent,\n SwitchCommercialTechnicalUnitsCustomSettingsDialogComponent,\n OrderLinesCustomSettingsDialogComponent,\n SelectPossibleMachinesComponent,\n SelectAlertTypesComponent,\n SelectRecipientsComponent,\n MinutesFromNowPipeModule,\n RadioToggleButtonModule,\n ReverseArrayPipeModule,\n CanShowErrorForFormControlModule,\n CapitalFirstLetterPipeModule,\n HexValuePipeModule,\n AutoFocusModule,\n DatepickerFormInputModule,\n DialogButtonModule,\n DialogModule,\n DistanceSpecifierModule,\n InputL10nDecimalModule,\n MobilePageHeaderModule,\n FilterChipsComponent,\n MessageContainerModule,\n TabsMenuModule,\n TabsMenuCardModule,\n ObjectSelectionModule,\n FooterModule,\n ProgressButtonModule,\n StatusBarModule,\n NameGenerationPatternComponent,\n NameGenerationPatternNewComponent,\n NameSuggestionHintComponent,\n SelectResourceTypeBreakdownComponent,\n SelectDataUnitComponent,\n SelectReportItemComponent,\n BreadcrumbModule,\n ResponsivenessModule,\n BreadcrumbFormLinkerDirective,\n StringInputModule,\n DateTimePipeModule,\n ConnectBaselineComponent,\n DialogHeaderComponent,\n TabsAndActionsHeaderComponent\n ]\n})\nexport class SharedModule {}\n","export const environment = {\n production: true,\n development: false,\n isDebugMode: false,\n helpUrl: 'https://texconnect.freshdesk.com/',\n siteIdHotjar: 5037707,\n useTexStateWithDynamicTemplates: true\n};\n","// IMPORTANT: THIS IS A GENERATED FILE AND SHOULD NOT BE EDITED OR CHECKED INTO VERSION CONTROL!\n/* eslint-disable */\nexport const VERSION = {\n \"dirty\": true,\n \"raw\": \"670a70da7c-dirty\",\n \"hash\": \"670a70da7c\",\n \"distance\": null,\n \"tag\": null,\n \"semver\": null,\n \"suffix\": \"670a70da7c-dirty\",\n \"semverString\": null,\n \"version\": \"5.43.0\"\n};\n","import {BaseError} from '@vdw/angular-component-library';\n\nexport class LoadRuntimeApplicationEnvironmentError extends BaseError {\n public constructor() {\n super('Something went terribly wrong and we could not load the application configuration, please retry a bit later or contact support.');\n }\n}\n","import {HttpBackend, HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {ApplicationEnvironment} from '@application/configuration/application-environment';\nimport {LoadRuntimeApplicationEnvironmentError} from '@application/configuration/load-runtime-application-environment-error';\nimport {RuntimeApplicationEnvironment} from '@application/configuration/runtime-application-environment';\nimport {VERSION} from '@environments/version';\nimport {catchError, firstValueFrom, map, tap} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpRuntimeApplicationEnvironmentService implements RuntimeApplicationEnvironment {\n private static readonly environmentUrl = '/env.json';\n private environment: ApplicationEnvironment;\n private httpClient: HttpClient;\n\n public constructor(httpHandler: HttpBackend) {\n this.httpClient = new HttpClient(httpHandler);\n }\n\n public loadEnvironment(): Promise {\n return firstValueFrom(\n this.httpClient.get(HttpRuntimeApplicationEnvironmentService.environmentUrl, {params: new HttpParams().append('v', VERSION.version)}).pipe(\n tap((environment: ApplicationEnvironment) => (this.environment = environment)),\n map(() => null),\n catchError((_: Error) => {\n throw new LoadRuntimeApplicationEnvironmentError();\n })\n )\n );\n }\n\n public getEnvironment(): ApplicationEnvironment {\n return this.environment;\n }\n}\n","import {DefaultHttpClient, HttpRequest, HttpResponse, MessageHeaders} from '@microsoft/signalr';\nimport {SignalrLogger} from '@vdw/angular-component-library';\n\nexport class CustomSignalrHttpClient extends DefaultHttpClient {\n public constructor(\n private readonly configureHeaders: (headers: MessageHeaders) => void,\n logger: SignalrLogger\n ) {\n super(logger);\n }\n\n public send(request: HttpRequest): Promise {\n this.configureHeaders(request.headers);\n return super.send(request);\n }\n}\n","import {inject, Injectable, Injector} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {RuntimeApplicationEnvironment} from '@application/configuration/runtime-application-environment';\nimport {GridIdentifier} from '@application/grids/grid-identifier.enum';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {MsalInterceptorConfiguration, MsalService} from '@azure/msal-angular';\nimport {AuthenticationResult, BrowserCacheLocation, InteractionType, IPublicClientApplication, LogLevel, PublicClientApplication} from '@azure/msal-browser';\nimport {environment} from '@environments/environment';\nimport {HttpGridSettingsService} from '@infrastructure/http/grid-settings/http-grid-settings.service';\nimport {CustomSignalrHttpClient} from '@infrastructure/signalr/custom-signalr-http-client';\nimport {MessageHeaders} from '@microsoft/signalr';\nimport {GridOptionsBuilderFactoryService, LanguageService, SignalrHubConnectionFactoryService, SignalrLogger, TranslateService} from '@vdw/angular-component-library';\nimport {L10nLoader} from 'angular-l10n';\nimport {firstValueFrom, map} from 'rxjs';\n\nexport function initializeApplicationEnvironment(applicationEnvironment: RuntimeApplicationEnvironment, injector: Injector): () => Promise {\n return (): Promise => {\n return applicationEnvironment.loadEnvironment().then(() => {\n return firstValueFrom(injector.get(MsalService).initialize());\n });\n };\n}\n\n@Injectable()\nexport class InitializeL10n implements L10nLoader {\n public constructor(private languageService: LanguageService) {}\n\n public init(): Promise {\n return this.languageService.initialize();\n }\n}\n\nexport function initializeNavigationHistory(): () => void {\n const navigationHistory = inject(NavigationHistoryService);\n\n return (): void => {\n navigationHistory.subscribeToRouterEvents();\n };\n}\n\nexport function initializeSignalrHubConnectionFactory(backendConfiguration: BackendConfiguration, msalService: MsalService, signalrLogger: SignalrLogger): SignalrHubConnectionFactoryService {\n return new SignalrHubConnectionFactoryService(\n signalrLogger,\n new CustomSignalrHttpClient((headers: MessageHeaders) => {\n headers['SubscriptionId'] = backendConfiguration.getSubscriptionId();\n headers['CompanyId'] = backendConfiguration.getCompanyId();\n headers['BrowserInstanceId'] = backendConfiguration.getBrowserInstanceId();\n }, signalrLogger),\n () => {\n const authenticationresult = msalService\n .acquireTokenSilent({\n scopes: backendConfiguration.getAuthenticationScopes(),\n account: msalService.instance.getAllAccounts()[0]\n })\n .pipe(map((result: AuthenticationResult) => result.accessToken));\n\n return firstValueFrom(authenticationresult);\n },\n (url: string) =>\n `${url}?subscriptionId=${backendConfiguration.getSubscriptionId()}&companyId=${backendConfiguration.getCompanyId()}&browserInstanceId=${backendConfiguration.getBrowserInstanceId()}`\n );\n}\n\nexport function initializeGridOptionsBuilderFactory(translateService: TranslateService, router: Router, gridSettingsService: HttpGridSettingsService): GridOptionsBuilderFactoryService {\n return new GridOptionsBuilderFactoryService(\n translateService,\n router,\n (identifier: GridIdentifier, columnState: Record) => gridSettingsService.save({key: identifier, value: JSON.stringify(columnState)}),\n (identifier: GridIdentifier) => gridSettingsService.get(identifier)\n );\n}\n\nexport function initializeMSALInstance(backendConfiguration: BackendConfiguration): IPublicClientApplication {\n return new PublicClientApplication({\n auth: {\n clientId: backendConfiguration.getAuthenticationClientId(),\n authority: backendConfiguration.getAuthenticationAuthority(),\n redirectUri: backendConfiguration.getRedirectURL(),\n postLogoutRedirectUri: backendConfiguration.getRedirectURL(),\n navigateToLoginRequestUrl: false\n },\n cache: {\n cacheLocation: BrowserCacheLocation.LocalStorage\n },\n system: {\n allowNativeBroker: false,\n loggerOptions: {\n logLevel: environment.production ? LogLevel.Warning : LogLevel.Trace,\n piiLoggingEnabled: false\n }\n }\n });\n}\n\nexport function initializeMSALInterceptorConfig(backendConfiguration: BackendConfiguration): MsalInterceptorConfiguration {\n const protectedResourceMap = new Map();\n protectedResourceMap.set('https://*', backendConfiguration.getAuthenticationScopes());\n\n return {\n interactionType: InteractionType.Redirect,\n protectedResourceMap\n };\n}\n","import {ActivatedRouteSnapshot, BaseRouteReuseStrategy} from '@angular/router';\n\nexport class CustomRouteReuseStrategy extends BaseRouteReuseStrategy {\n public override shouldReuseRoute(future: ActivatedRouteSnapshot, current: ActivatedRouteSnapshot): boolean {\n if (future.routeConfig === current.routeConfig && future.data.reuse) {\n return false;\n }\n return future.routeConfig === current.routeConfig;\n }\n}\n","import {BackgroundStatus} from '@domain/background-jobs/background-status';\nimport {BackgroundTaskAction} from '@domain/background-jobs/background-task-action';\nimport {Subscription} from '@domain/profile/subscription';\nimport {moment, TimeUtils, TimezoneUtils} from '@vdw/angular-component-library';\n\nexport class BackgroundTask {\n private _id: string;\n private _action: BackgroundTaskAction;\n private _startTime: Date;\n private _endTime: Date;\n private _status: BackgroundStatus;\n\n public constructor(id: string, action: BackgroundTaskAction, startTime: Date, endTime: Date, status: BackgroundStatus) {\n this._id = id;\n this._action = action;\n this._startTime = startTime;\n this._endTime = endTime;\n this._status = status;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get action(): BackgroundTaskAction {\n return this._action;\n }\n\n public get startTime(): Date {\n return this._startTime;\n }\n\n public get endTime(): Date {\n return this._endTime;\n }\n\n public get durationInMs(): number {\n return moment(this._endTime).diff(this._startTime, TimeUtils.MILLISECONDS_UNIT);\n }\n\n public get status(): BackgroundStatus {\n return this._status;\n }\n\n public static fromJSON(backgroundTaskJSON: any, subscription: Subscription): BackgroundTask {\n const timezoneCode: string = subscription.timeZone.code;\n const startTime = TimezoneUtils.convertToDateWithCurrentOffset(backgroundTaskJSON.startTime, timezoneCode);\n const endTime = TimezoneUtils.convertToDateWithCurrentOffset(backgroundTaskJSON.endTime, timezoneCode);\n\n return new BackgroundTask(backgroundTaskJSON.id, BackgroundTaskAction[`${backgroundTaskJSON.action}`], startTime, endTime, BackgroundStatus[`${backgroundTaskJSON.status}`]);\n }\n}\n","import {BackgroundJobType} from '@domain/background-jobs/background-job-type';\nimport {BackgroundStatus} from '@domain/background-jobs/background-status';\nimport {BackgroundTask} from '@domain/background-jobs/background-task';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AssertionUtils, moment, TimeUtils, TimezoneUtils} from '@vdw/angular-component-library';\nimport {find, isEqual, isNil, map} from 'lodash-es';\nimport {BackgroundTaskAction} from './background-task-action';\n\nexport class BackgroundJob {\n private _id: string;\n private _jobType: BackgroundJobType;\n private _name: string;\n private _startTime: Date;\n private _endTime: Date;\n private _status: BackgroundStatus;\n private _tasks: BackgroundTask[];\n private _errorMessage: string;\n private _numberOfRetries: number;\n\n public constructor(\n id: string,\n jobType: BackgroundJobType,\n name: string,\n startTime: Date,\n endTime: Date,\n status: BackgroundStatus,\n tasks: BackgroundTask[],\n errorMessage: string,\n numberOfRetries: number\n ) {\n this._id = id;\n this._jobType = jobType;\n this._name = name;\n this._startTime = startTime;\n this._endTime = endTime;\n this._status = status;\n this._tasks = tasks;\n this._errorMessage = errorMessage;\n this._numberOfRetries = numberOfRetries;\n }\n\n public get id(): string {\n return this._id;\n }\n\n public get jobType(): BackgroundJobType {\n return this._jobType;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get startTime(): Date {\n return this._startTime;\n }\n\n public get endTime(): Date {\n return this._endTime;\n }\n\n public get durationInMs(): number {\n return moment(this._endTime).diff(this._startTime, TimeUtils.MILLISECONDS_UNIT);\n }\n\n public get status(): BackgroundStatus {\n return this._status;\n }\n\n public get tasks(): BackgroundTask[] {\n return this._tasks;\n }\n\n public get errorMessage(): string {\n return this._errorMessage;\n }\n\n public get numberOfRetries(): number {\n return this._numberOfRetries;\n }\n\n public static fromJSON(backgroundJobJSON: any, subscription: Subscription): BackgroundJob {\n const timezoneCode: string = subscription.timeZone.code;\n const startTime = TimezoneUtils.convertToDateWithCurrentOffset(backgroundJobJSON.startTime, timezoneCode);\n const endTime = TimezoneUtils.convertToDateWithCurrentOffset(backgroundJobJSON.endTime, timezoneCode);\n\n return new BackgroundJob(\n backgroundJobJSON.id,\n BackgroundJobType[`${backgroundJobJSON.jobType}`],\n backgroundJobJSON.name,\n startTime,\n endTime,\n BackgroundStatus[`${backgroundJobJSON.status}`],\n map(backgroundJobJSON.tasks, (backgroundTaskJSON: any) => BackgroundTask.fromJSON(backgroundTaskJSON, subscription)),\n backgroundJobJSON.errorMessage,\n backgroundJobJSON.numberOfRetries\n );\n }\n\n public getActiveTask(): BackgroundTask {\n let result: BackgroundTask;\n\n if (this.hasCompleted()) {\n result = null;\n } else if (this.hasFailed()) {\n result = this.getFailedTask();\n } else if (this.hasCancelled()) {\n result = this.getCancelledTask();\n } else {\n result = find(this.tasks, ['status', BackgroundStatus.STARTED]);\n\n if (isNil(result)) {\n result = find(this.tasks, ['status', BackgroundStatus.NOT_STARTED]);\n }\n }\n\n return result;\n }\n\n public canRetry(): boolean {\n let result = false;\n\n if (this.numberOfRetries >= 3) {\n return false;\n }\n\n const hasJobFailed = this.hasFailed();\n const hasJobBeenCancelled = this.hasCancelled();\n\n if (hasJobFailed || hasJobBeenCancelled) {\n if (this.isJobTypeProcessSingleBmp() || this.isJobTypeGenerateScheduleZip()) {\n result = true;\n } else if (this.isJobTypeCompleteOrder()) {\n const task = hasJobFailed ? this.getFailedTask() : this.getCancelledTask();\n result = !isNil(task) && !isEqual(task.action, BackgroundTaskAction.CREATE_ORDER);\n }\n }\n\n return result;\n }\n\n public hasCompleted(): boolean {\n return isEqual(this.status, BackgroundStatus.COMPLETED);\n }\n\n public hasErrorMessage(): boolean {\n return !AssertionUtils.isEmpty(this.errorMessage);\n }\n\n public canBeCanceled(): boolean {\n return isEqual(this._status, BackgroundStatus.STARTED) || isEqual(this._status, BackgroundStatus.NOT_STARTED);\n }\n\n public hasFailed(): boolean {\n return isEqual(this.status, BackgroundStatus.FAILED);\n }\n\n private getFailedTask(): BackgroundTask {\n return find(this.tasks, ['status', BackgroundStatus.FAILED]);\n }\n\n private getCancelledTask(): BackgroundTask {\n return find(this.tasks, ['status', BackgroundStatus.CANCELLED]);\n }\n\n private hasCancelled(): boolean {\n return isEqual(this.status, BackgroundStatus.CANCELLED);\n }\n\n private isJobTypeCompleteOrder(): boolean {\n return isEqual(this.jobType, BackgroundJobType.COMPLETE_ORDER);\n }\n\n private isJobTypeProcessSingleBmp(): boolean {\n return isEqual(this.jobType, BackgroundJobType.PROCESS_SINGLE_BMP);\n }\n\n private isJobTypeGenerateScheduleZip(): boolean {\n return this.jobType === BackgroundJobType.GENERATE_SCHEDULE_ZIP;\n }\n}\n","export class BackgroundJobGlobalStatusUpdate {\n private _amountOfStartedJobs: number;\n private _amountOfFailedJobs: number;\n private _amountOfCompletedJobs: number;\n\n public constructor(amountOfStartedJobs: number, amountOfFailedJobs: number, amountOfCompletedJobs: number) {\n this._amountOfStartedJobs = amountOfStartedJobs;\n this._amountOfFailedJobs = amountOfFailedJobs;\n this._amountOfCompletedJobs = amountOfCompletedJobs;\n }\n\n public static fromJSON(backgroundJobGlobalStatusUpdateJSON: any): BackgroundJobGlobalStatusUpdate {\n return new BackgroundJobGlobalStatusUpdate(\n backgroundJobGlobalStatusUpdateJSON.amountOfStartedJobs,\n backgroundJobGlobalStatusUpdateJSON.amountOfFailedJobs,\n backgroundJobGlobalStatusUpdateJSON.amountOfCompletedJobs\n );\n }\n\n public get amountOfStartedJobs(): number {\n return this._amountOfStartedJobs;\n }\n\n public get amountOfFailedJobs(): number {\n return this._amountOfFailedJobs;\n }\n\n public get amountOfCompletedJobs(): number {\n return this._amountOfCompletedJobs;\n }\n\n public get icon(): string {\n let icon = 'process';\n if (this._amountOfFailedJobs > 0) {\n icon = 'process-error';\n } else if (this._amountOfStartedJobs > 0) {\n icon = 'process-working';\n } else if (this._amountOfCompletedJobs > 0) {\n icon = 'process-done';\n }\n return icon;\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {BackgroundJob} from '@domain/background-jobs/background-job';\nimport {BackgroundJobGlobalStatusUpdate} from '@domain/background-jobs/background-job-global-status-update';\nimport {Subscription} from '@domain/profile/subscription';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {BackgroundJobs} from '@infrastructure/http/background-jobs/background-jobs';\nimport {map} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {map as rxjsMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpBackgroundJobsService implements BackgroundJobs {\n private httpClient: HttpClient;\n private backendConfiguration: BackendConfiguration;\n\n public constructor(\n @Inject(AUTHENTICATION) private authentication: Authentication,\n httpClient: HttpClient,\n backendConfiguration: BackendConfiguration\n ) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getAll(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getWorkerEndpoint()}jobs/recent-and-active`).pipe(\n rxjsMap((backgroundJobsJSON: any) => {\n const currentSubscription: Subscription = this.authentication.getCurrentSubscription();\n return map(backgroundJobsJSON, (backgroundJobJSON: any) => {\n return BackgroundJob.fromJSON(backgroundJobJSON, currentSubscription);\n });\n })\n );\n }\n\n public retry(backgroundJob: BackgroundJob): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getWorkerEndpoint()}jobs/${backgroundJob.id}/retry`, {});\n }\n\n public getGlobalStatus(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getWorkerEndpoint()}jobs/status`).pipe(\n rxjsMap((backgroundJobGlobalStatusUpdate: any) => {\n return BackgroundJobGlobalStatusUpdate.fromJSON(backgroundJobGlobalStatusUpdate);\n })\n );\n }\n\n public cancelJob(jobId: string): Observable {\n return this.httpClient.post(`${this.backendConfiguration.getWorkerEndpoint()}jobs/${jobId}/cancel`, {});\n }\n}\n","import {CommercialDimensions} from '@domain/commercial-dimensions';\nimport {OverviewListCreelPosition} from '@domain/textile-data/creel/overview-list-creel-position';\nimport {OverviewListColorSet} from '@presentation/pages/textile-data/color-set/overview/overview-list-color-set';\nimport {OverviewListFinishing} from '@presentation/pages/textile-data/finishing/overview/overview-list-finishing';\nimport {find, isNil, map} from 'lodash-es';\nimport {MappingForDesign} from './mapping-for-design';\n\nexport class DrawingRecolorInformation {\n private _code: string;\n private _image: string;\n private _shape: string;\n private _colorSet: OverviewListColorSet;\n private _mainColorsCreelPosition: OverviewListCreelPosition;\n private _borderColorsCreelPosition: OverviewListCreelPosition;\n private _commercialDimensionsInMm: CommercialDimensions;\n private _mappingForDesign: MappingForDesign[];\n private _finishing: OverviewListFinishing;\n\n public constructor(\n code: string,\n shape: string,\n image: string,\n colorSet: OverviewListColorSet,\n mainColorsCreelPosition: OverviewListCreelPosition,\n borderColorsCreelPosition: OverviewListCreelPosition,\n commercialDimensionsInMm: CommercialDimensions,\n mappingForDesign: MappingForDesign[] = [],\n finishing?: OverviewListFinishing\n ) {\n this._code = code;\n this._image = image;\n this._shape = shape;\n this._colorSet = colorSet;\n this._mainColorsCreelPosition = mainColorsCreelPosition;\n this._borderColorsCreelPosition = borderColorsCreelPosition;\n this._commercialDimensionsInMm = commercialDimensionsInMm;\n this._mappingForDesign = mappingForDesign;\n this._finishing = finishing;\n }\n\n public get code(): string {\n return this._code;\n }\n\n public get image(): string {\n return this._image;\n }\n\n public get shape(): string {\n return this._shape;\n }\n\n public get mainColorsCreelPosition(): OverviewListCreelPosition {\n return this._mainColorsCreelPosition;\n }\n\n public get colorSet(): OverviewListColorSet {\n return this._colorSet;\n }\n\n public get borderColorsCreelPosition(): OverviewListCreelPosition {\n return this._borderColorsCreelPosition;\n }\n\n public get commercialDimensionsInMm(): CommercialDimensions {\n return this._commercialDimensionsInMm;\n }\n\n public get finishing(): OverviewListFinishing {\n return this._finishing;\n }\n\n public get mappingForDesign(): MappingForDesign[] {\n return this._mappingForDesign;\n }\n\n public static fromJSON(drawingRecolorInformationJSON: any): DrawingRecolorInformation {\n const colorSet: OverviewListColorSet = OverviewListColorSet.fromJSON(drawingRecolorInformationJSON.colorSet);\n const mainColorsCreelPosition: OverviewListCreelPosition = find(colorSet.creelPositions, {position: drawingRecolorInformationJSON.mainColorPosition});\n const borderColorsCreelPosition: OverviewListCreelPosition = find(colorSet.creelPositions, {position: drawingRecolorInformationJSON.borderColorPosition});\n const mappingForDesign: MappingForDesign[] = map(drawingRecolorInformationJSON.mappingForDesign, (mappingForDesignJSON: any) => MappingForDesign.fromJSON(mappingForDesignJSON));\n\n const commercialDimensions: CommercialDimensions = {\n widthInMM: drawingRecolorInformationJSON.commercialDimensions.widthInMM,\n heightInMM: drawingRecolorInformationJSON.commercialDimensions.heightInMM\n };\n\n const finishing: OverviewListFinishing = !isNil(drawingRecolorInformationJSON.finishing) ? OverviewListFinishing.fromJSON(drawingRecolorInformationJSON.finishing) : null;\n\n return new DrawingRecolorInformation(\n drawingRecolorInformationJSON.code,\n drawingRecolorInformationJSON.shape,\n drawingRecolorInformationJSON.image,\n colorSet,\n mainColorsCreelPosition,\n borderColorsCreelPosition,\n commercialDimensions,\n mappingForDesign,\n finishing\n );\n }\n}\n","import {MappingForDesign} from '@domain/production-schedule/mapping-for-design';\r\nimport {AssertionUtils} from '@vdw/angular-component-library';\r\n\r\nexport class UploadDrawingInfo {\r\n private _id: string;\r\n private _threadByThread?: boolean;\r\n private _nrColumnsForWeftSelection?: number;\r\n private _designMap: MappingForDesign[];\r\n\r\n public constructor(id: string, threadByThread?: boolean, nrColumnsForWeftSelection?: number, designMap: MappingForDesign[] = []) {\r\n this._id = id;\r\n this._threadByThread = threadByThread;\r\n this._nrColumnsForWeftSelection = nrColumnsForWeftSelection;\r\n this._designMap = designMap;\r\n }\r\n\r\n public get id(): string {\r\n return this._id;\r\n }\r\n\r\n public get threadByThread(): boolean {\r\n return this._threadByThread;\r\n }\r\n\r\n public get nrColumnsForWeftSelection(): number {\r\n return this._nrColumnsForWeftSelection;\r\n }\r\n\r\n public get designMap(): MappingForDesign[] {\r\n return this._designMap;\r\n }\r\n\r\n public static fromJSON(uploadDrawingJSON: any): UploadDrawingInfo {\r\n let designMap: MappingForDesign[] = [];\r\n\r\n if (AssertionUtils.isNullOrUndefined(uploadDrawingJSON.designMap)) {\r\n designMap = uploadDrawingJSON.designMap.map((designMapJSON: any) => MappingForDesign.fromJSON(designMapJSON));\r\n }\r\n\r\n return new UploadDrawingInfo(uploadDrawingJSON.id, uploadDrawingJSON.threadByThread, uploadDrawingJSON.nrColumnsForWeftSelection, designMap);\r\n }\r\n}\r\n","import {IdName} from '@domain/id-name';\nimport {ObjectUtils} from '@vdw/angular-component-library';\n\nexport class GroupedDrawing {\n private _quality: IdName;\n private _colorSet: IdName;\n private _commercialWidthInCM: number;\n private _technicalWidthInPx: number;\n private _mainColor: IdName;\n private _borderColor: IdName;\n private _shape: IdName;\n private _drawingIds: number[];\n private _configurationIds: number[];\n\n public constructor(\n quality: IdName,\n colorSet: IdName,\n commercialWidthInCM: number,\n technicalWidthInPx: number,\n mainColor: IdName,\n borderColor: IdName,\n shape: IdName,\n drawingIds: number[],\n configurationIds: number[]\n ) {\n this._quality = quality;\n this._colorSet = colorSet;\n this._commercialWidthInCM = commercialWidthInCM;\n this._technicalWidthInPx = technicalWidthInPx;\n this._mainColor = mainColor;\n this._borderColor = borderColor;\n this._shape = shape;\n this._drawingIds = drawingIds;\n this._configurationIds = configurationIds;\n }\n\n public static fromJSON(groupedDrawingJSON: any): GroupedDrawing {\n return new GroupedDrawing(\n ObjectUtils.tryGetValue(groupedDrawingJSON.quality, new IdName(null, '')),\n ObjectUtils.tryGetValue(groupedDrawingJSON.colorSet, new IdName(null, '')),\n ObjectUtils.tryGetValue(groupedDrawingJSON.commercialWidthInCM?.value, ''),\n ObjectUtils.tryGetValue(groupedDrawingJSON.technicalWidthInPx?.value, ''),\n ObjectUtils.tryGetValue(groupedDrawingJSON.mainColor, new IdName(null, '')),\n ObjectUtils.tryGetValue(groupedDrawingJSON.borderColor, new IdName(null, '')),\n ObjectUtils.tryGetValue(groupedDrawingJSON.shape, new IdName(null, '')),\n groupedDrawingJSON.drawings?.map((drawing: any) => parseInt(drawing.id)),\n groupedDrawingJSON.configurations?.map(Number)\n );\n }\n\n public get quality(): IdName {\n return this._quality;\n }\n\n public set quality(value: IdName) {\n this._quality = value;\n }\n\n public get colorSet(): IdName {\n return this._colorSet;\n }\n\n public set colorSet(value: IdName) {\n this._colorSet = value;\n }\n\n public get commercialWidthInCM(): number {\n return this._commercialWidthInCM;\n }\n\n public set commercialWidthInCM(value: number) {\n this._commercialWidthInCM = value;\n }\n\n public get technicalWidthInPx(): number {\n return this._technicalWidthInPx;\n }\n\n public set technicalWidthInPx(value: number) {\n this._technicalWidthInPx = value;\n }\n\n public get mainColor(): IdName {\n return this._mainColor;\n }\n\n public set mainColor(value: IdName) {\n this._mainColor = value;\n }\n\n public get borderColor(): IdName {\n return this._borderColor;\n }\n\n public set borderColor(value: IdName) {\n this._borderColor = value;\n }\n\n public get shape(): IdName {\n return this._shape;\n }\n\n public set shape(value: IdName) {\n this._shape = value;\n }\n\n public get drawingIds(): number[] {\n return this._drawingIds;\n }\n\n public set drawingIds(value: number[]) {\n this._drawingIds = value;\n }\n\n public get configurationIds(): number[] {\n return this._configurationIds;\n }\n\n public set configurationIds(value: number[]) {\n this._configurationIds = value;\n }\n}\n","import {HttpClient, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {AdvancedSearchUtils} from '@application/helper/advanced-search-utils';\nimport {convertJSONToDrawing} from '@application/helper/drawing/convert-json-to-drawing';\nimport {DimensionsInPx} from '@domain/dimensions-in-px';\nimport {Drawing} from '@domain/production-schedule/drawing';\nimport {DrawingConfigurationWithColorAndYarnSet} from '@domain/production-schedule/drawing-configuration-with-color-and-yarn-set';\nimport {DrawingImage} from '@domain/production-schedule/drawing-image';\nimport {DrawingInfo} from '@domain/production-schedule/drawing-info.interface';\nimport {DrawingRecolorInformation} from '@domain/production-schedule/drawing-recolor-information';\nimport {DrawingShapeAbbreviation} from '@domain/production-schedule/drawing-shape-abbreviation';\nimport {DrawingType} from '@domain/production-schedule/drawing-type.enum';\nimport {PropertyValue} from '@domain/property-value';\nimport {TargetForListOfDrawingsEnum} from '@domain/target-for-list-of-drawings.enum';\nimport {ColoredYarnSetPosition} from '@domain/textile-data/creel/colored-yarn-set-position';\nimport {CreelMap} from '@domain/textile-data/creel/creel-map';\nimport {UploadDrawingInfo} from '@domain/textile-data/drawing/upload-drawing-info';\nimport {PlaceholderCategory} from '@domain/textile-data/finishing-and-finishing-template/placeholder-category';\nimport {PlaceholderComponent} from '@domain/textile-data/finishing-and-finishing-template/placeholder-component';\nimport {Drawings} from '@infrastructure/http/drawing/drawings';\nimport {GroupedDrawing} from '@presentation/pages/texfab/production-schedule/add/drawing-library/views/drawings-grouped-view/grouped-drawing';\nimport {AssertionUtils, Conflict, GridModel, NotImplementedError} from '@vdw/angular-component-library';\nimport {filter, includes, isNil, map} from 'lodash-es';\nimport {forkJoin, from, Observable, throwError} from 'rxjs';\nimport {retry, map as rxjsMap, switchMap} from 'rxjs/operators';\n\n@Injectable()\nexport class HttpDrawingsService implements Drawings {\n public static LOAD_CONFIGURATIONS_HTTP_PARAMETER_NAME = 'load-configurations';\n public static VIEW_MODE_HTTP_PARAMETER_NAME = 'view-mode';\n private httpClient: HttpClient;\n private _uploadQueue: DrawingImage[] = [];\n private backendConfiguration: BackendConfiguration;\n\n public constructor(httpClient: HttpClient, backendConfiguration: BackendConfiguration) {\n this.httpClient = httpClient;\n this.backendConfiguration = backendConfiguration;\n }\n\n public getAll(): Observable {\n return throwError(() => new NotImplementedError());\n }\n\n public getAllWithoutImageData(target: TargetForListOfDrawingsEnum, filters: PropertyValue[] = []): Observable {\n const params = new HttpParams().set(HttpDrawingsService.VIEW_MODE_HTTP_PARAMETER_NAME, 'list').set(HttpDrawingsService.LOAD_CONFIGURATIONS_HTTP_PARAMETER_NAME, false).set('target', target);\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}drawings/get`, AdvancedSearchUtils.getJsonBodyForAdvancedSearchFilters(filters), {params}).pipe(\n rxjsMap((drawingsJSON: any[]) => {\n return drawingsJSON.map(convertJSONToDrawing);\n })\n );\n }\n\n public getAllWithoutImageDataFromGridModel(\n target: TargetForListOfDrawingsEnum,\n gridModel: GridModel,\n loadConfigurations: boolean = false,\n viewMode: string = 'list',\n exclude?: string\n ): Observable {\n const params = new HttpParams()\n .set(HttpDrawingsService.VIEW_MODE_HTTP_PARAMETER_NAME, viewMode)\n .set(HttpDrawingsService.LOAD_CONFIGURATIONS_HTTP_PARAMETER_NAME, loadConfigurations)\n .set('target', target)\n .set('exclude', exclude ?? '');\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}drawings/get`, gridModel.toJSON(), {params}).pipe(\n rxjsMap((drawingsJSON: any[]) => {\n return drawingsJSON.map(convertJSONToDrawing);\n })\n );\n }\n\n public getSlice(\n startIndex: number,\n count: number,\n viewMode: string,\n loadConfiguration: boolean,\n target: TargetForListOfDrawingsEnum,\n filters: PropertyValue[] = [],\n sort?: {sort: string; colId: string}\n ): Observable {\n const params = new HttpParams()\n .set(HttpDrawingsService.VIEW_MODE_HTTP_PARAMETER_NAME, viewMode)\n .set(HttpDrawingsService.LOAD_CONFIGURATIONS_HTTP_PARAMETER_NAME, loadConfiguration)\n .set('target', target)\n .set('start', startIndex)\n .set('count', count)\n .set('sort', sort ? sort.colId : 'dateModified')\n .set('direction', sort ? sort.sort : 'DESC');\n\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}drawings/get`, AdvancedSearchUtils.getJsonBodyForAdvancedSearchFilters(filters), {params}).pipe(\n rxjsMap((drawingsJSON: any) => {\n return drawingsJSON.map(convertJSONToDrawing);\n })\n );\n }\n\n public getById(id: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/${id}`).pipe(rxjsMap((drawingJSON: any) => convertJSONToDrawing(drawingJSON)));\n }\n\n public getDrawing(drawingImageId: string, drawingImageSignature: string): Observable {\n const params = new HttpParams().set('id', drawingImageId).set('s', drawingImageSignature);\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/image`, {params, responseType: 'blob'}).pipe(retry(2));\n }\n\n public save(drawing: Drawing): Observable {\n return throwError(() => new NotImplementedError());\n }\n\n public update(drawing: Drawing): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint()}drawings/${drawing.id}`, drawing.toJSON());\n }\n\n public delete(id: number): Observable {\n return this.httpClient.delete(`${this.backendConfiguration.getEndpoint()}drawings/${id}`);\n }\n\n public deleteMultiple(drawingIds: number[]): Observable {\n return this.httpClient.request('delete', `${this.backendConfiguration.getEndpoint()}drawings`, {body: drawingIds}).pipe(\n rxjsMap((response: number[]) => {\n return response;\n })\n );\n }\n\n public getPossibleValues(columnIdentifier: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/${columnIdentifier}/possible-values`).pipe(rxjsMap((response: string[]) => response));\n }\n\n public getDrawingShapes(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}drawings/shapes`).pipe(\n rxjsMap((response: string[]) => {\n return response;\n })\n );\n }\n\n public getListOfCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint(2)}drawings/custom-settings`).pipe(\n rxjsMap((customSettings: PropertyValue[]) => {\n customSettings.forEach((property: PropertyValue) => {\n if (property.propertyName === 'placeholderPartsForDrawingName') {\n property.propertyValue = property.propertyValue.map((placeholderPartJSON: any) => {\n return PlaceholderComponent.fromJSON(placeholderPartJSON);\n });\n } else if (property.propertyName === 'shapeAbbreviations') {\n property.possiblePropertyValues = property.propertyValue.map((propertyValue: any) => {\n return DrawingShapeAbbreviation.fromJSON(propertyValue);\n });\n }\n });\n\n return customSettings;\n })\n );\n }\n\n public saveCustomSettings(customSettings: PropertyValue[]): Observable {\n const body = customSettings.map((propertyValue: PropertyValue) => {\n const result: PropertyValue = {\n propertyName: propertyValue.propertyName,\n propertyValue: propertyValue.propertyValue,\n possiblePropertyValues: undefined\n };\n\n if (propertyValue.propertyName === 'placeholderPartsForDrawingName') {\n result.propertyValue = propertyValue.propertyValue.map((placeholderComponent: PlaceholderComponent) => {\n return placeholderComponent.toFullJSON();\n });\n } else if (propertyValue.propertyName === 'shapeAbbreviations') {\n result.possiblePropertyValues = propertyValue.possiblePropertyValues.map((shapeAbbreviation: DrawingShapeAbbreviation) => {\n return shapeAbbreviation.toJSON();\n });\n } else if (propertyValue.propertyName === 'customShape') {\n result.possiblePropertyValues = propertyValue.possiblePropertyValues.map((customShape: DrawingShapeAbbreviation) => {\n return customShape.toJSON();\n });\n }\n\n return result;\n });\n\n return this.httpClient.put(`${this.backendConfiguration.getEndpoint(2)}drawings/custom-settings`, body);\n }\n\n public addImageToUploadQueue(drawingImage: DrawingImage): void {\n this._uploadQueue.push(drawingImage);\n }\n\n public clearUploadQueue(): void {\n this._uploadQueue = [];\n }\n\n public removeDrawingImagesFromUploadQueue(namesOfDrawingImagesToRemove: string[]): DrawingImage[] {\n this._uploadQueue = filter(this._uploadQueue, (drawingImage: DrawingImage) => !includes(namesOfDrawingImagesToRemove, drawingImage.name));\n return this._uploadQueue;\n }\n\n public getUploadQueue(): DrawingImage[] {\n return this._uploadQueue;\n }\n\n public uploadDrawingImages(drawingImages: DrawingImage[]): Observable {\n const pvdFiles = drawingImages.filter((drawingImage: DrawingImage) => drawingImage.type === DrawingType.PVD);\n drawingImages = drawingImages.filter((drawingImage: DrawingImage) => drawingImage.type !== DrawingType.PVD);\n\n return forkJoin(\n map(drawingImages, (drawingImage: DrawingImage) => {\n const pvdFile = pvdFiles.find((pvd: DrawingImage) => pvd.name === drawingImage.name);\n const formDataToUpload = new FormData();\n formDataToUpload.append('file', drawingImage.file, drawingImage.file.name);\n if (pvdFile) {\n formDataToUpload.append('pvd', pvdFile.file, pvdFile.file.name);\n }\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint(2)}drawings/images`, formDataToUpload).pipe(\n rxjsMap((response: any[]) => {\n drawingImage.uploadDrawingInfo = response.map((responseElement: any) => UploadDrawingInfo.fromJSON(responseElement))[0];\n drawingImage.id = drawingImage.uploadDrawingInfo.id;\n return drawingImage;\n })\n );\n })\n );\n }\n\n public deleteDrawingImages(drawingImagesIds: string[]): Observable {\n return this.httpClient.request('delete', `${this.backendConfiguration.getEndpoint()}drawings/images`, {body: drawingImagesIds});\n }\n\n public getRecoloredImageConfiguration(\n imageId: string,\n machineQualityId: number,\n colorSetId: number,\n coloredYarnSetId: number,\n mappingForCurrentPositionOnMachine: CreelMap,\n target: TargetForListOfDrawingsEnum,\n dimensions: {\n input: DimensionsInPx;\n output?: DimensionsInPx;\n },\n orderLineId?: number,\n position?: ColoredYarnSetPosition,\n finishingId?: number,\n numberOfWeftSelectionColumns?: number,\n threadByThread?: boolean\n ): Observable {\n if (isNil(dimensions.output)) {\n dimensions.output = dimensions.input;\n }\n return this.httpClient\n .put(`${this.backendConfiguration.getEndpoint()}drawings/images/${imageId}/recolored`, {\n qualityId: machineQualityId,\n colorSetId,\n coloredYarnSetId,\n target,\n mappingForCurrentPositionOnMachine: !isNil(mappingForCurrentPositionOnMachine) ? mappingForCurrentPositionOnMachine.creelPositions : null,\n heightInPx: dimensions.input.heightInPx,\n widthInPx: dimensions.input.widthInPx,\n outputHeightInPx: dimensions.output.heightInPx,\n outputWidthInPx: dimensions.output.widthInPx,\n orderLineId,\n position: !isNil(position) ? ColoredYarnSetPosition[position] : undefined,\n finishingId,\n nrColumnsForWeftSelection: numberOfWeftSelectionColumns,\n processThreadByThread: threadByThread\n })\n .pipe(\n rxjsMap((drawingRecolorInformationJSON: any) => {\n return DrawingRecolorInformation.fromJSON(drawingRecolorInformationJSON);\n })\n );\n }\n\n public getRecoloredImage(imageId: string, machineQualityId: number, colorSetId: number, dimensionsInPx: DimensionsInPx): Observable {\n return this.httpClient.put(\n `${this.backendConfiguration.getEndpoint()}drawings/images/${imageId}/recolored/image`,\n {\n qualityId: machineQualityId,\n colorSetId,\n heightInPx: dimensionsInPx.heightInPx,\n widthInPx: dimensionsInPx.widthInPx\n },\n {responseType: 'blob'}\n );\n }\n\n public getRecoloredPathLabelImage(\n imageId: string,\n machineQualityId: number,\n colorSetId: number,\n mappingForCurrentPositionOnMachine: CreelMap,\n {widthInPx, heightInPx}: DimensionsInPx,\n position: ColoredYarnSetPosition,\n creelName: string,\n machineId: number,\n freePatternId: number\n ): Observable {\n return this.httpClient\n .put(\n `${this.backendConfiguration.getEndpoint()}drawings/pathlabel/${imageId}`,\n {\n qualityId: machineQualityId,\n colorSetId,\n mappingForCurrentPositionOnMachine: !isNil(mappingForCurrentPositionOnMachine) ? mappingForCurrentPositionOnMachine.creelPositions : null,\n position: ColoredYarnSetPosition[position],\n heightInPx,\n widthInPx,\n creelName,\n machineId,\n freePatternId\n },\n {responseType: 'blob'}\n )\n .pipe(\n switchMap((blob: Blob) => {\n return from(\n new Promise((resolve: (value: string) => void) => {\n const reader = new FileReader();\n reader.onloadend = (): void => resolve(reader.result as string);\n reader.readAsDataURL(blob);\n })\n );\n })\n );\n }\n\n public hasAlreadyAdjustedCustomSettings(): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/custom-settings/already-adjusted`).pipe(\n rxjsMap((response: {alreadyAdjustedCustomSettings: boolean}) => {\n return response.alreadyAdjustedCustomSettings;\n })\n );\n }\n\n public isIdentifierAvailable(name: string): Observable {\n const params = new HttpParams().set('name', name);\n\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/check-name`, {params}).pipe(\n rxjsMap((response: {drawingNameAvailable: boolean}) => {\n return response.drawingNameAvailable;\n })\n );\n }\n\n public saveAll(drawings: Drawing[], overwriteExistingDrawings: boolean): Observable {\n const drawingsJSON: JSON[] = map(drawings, (drawing: Drawing) => drawing.toJSON());\n const endpoint: string = overwriteExistingDrawings ? '/overwrite' : '';\n return this.httpClient.post(`${this.backendConfiguration.getEndpoint()}drawings${endpoint}`, drawingsJSON).pipe(rxjsMap((response: {ids: number[]}) => response.ids));\n }\n\n public processDrawingConfigurationIntoEpDrawing(\n imageId: string,\n drawingName: string,\n machineQualityId: number,\n colorSetId: number,\n dimensionsInPx: DimensionsInPx,\n finishingId: number,\n machineId: number\n ): Observable {\n const body = {\n imageId,\n machineQualityId,\n colorSetId,\n ...dimensionsInPx,\n name: drawingName,\n finishingId,\n machineId\n };\n\n return this.httpClient.post(`${this.backendConfiguration.getAggregatorEndpoint()}processing`, body);\n }\n\n public downloadFile(imageId: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/download?id=${imageId}`, {responseType: 'arraybuffer'});\n }\n\n public downloadPVDFile(yarnConsumptionId: number): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getProductionOrderEndpoint()}smart-creel-files/${yarnConsumptionId}/file`, {responseType: 'arraybuffer'});\n }\n\n public getConflicts(id: number): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getAggregatorEndpoint()}drawings/${id}/conflicts`)\n .pipe(rxjsMap((conflictsJSON: any) => map(conflictsJSON, (conflictJSON: any) => Conflict.fromJSON(conflictJSON))));\n }\n\n public getCategoriesWithComponents(): Observable {\n return this.httpClient\n .get(`${this.backendConfiguration.getEndpoint()}drawings/custom-settings/categories-with-components`)\n .pipe(rxjsMap((placeholderCategoriesJSON: any) => map(placeholderCategoriesJSON, (placeholderCategoryJSON: any) => PlaceholderCategory.fromJSON(placeholderCategoryJSON))));\n }\n\n public getDrawingInfoByName(dimensionsInPx: DimensionsInPx, id: string, drawingName: string): Observable {\n return this.httpClient.get(`${this.backendConfiguration.getEndpoint()}drawings/configuration-suggestion/${dimensionsInPx.widthInPx}/${dimensionsInPx.heightInPx}/${id}/${drawingName}`).pipe(\n rxjsMap((drawingInfoJSON: any) => {\n const configurations = map(drawingInfoJSON.configurations, (configuration: any) => DrawingConfigurationWithColorAndYarnSet.fromJSON(configuration));\n\n return AssertionUtils.isEmpty(configurations)\n ? null\n : {\n shape: drawingInfoJSON.shape,\n configurations,\n code: drawingInfoJSON.drawingCode\n };\n })\n );\n }\n\n public getGroupedDrawings(gridModel: GridModel, groupedBy: string[]): Observable {\n return this.httpClient\n .post(`${this.backendConfiguration.getEndpoint()}drawings/summary`, {\n groupedBy,\n sortModel: gridModel.sortModel,\n filterModel: gridModel.filterModel\n })\n .pipe(rxjsMap((groupedDrawingsJSON: any) => groupedDrawingsJSON.map((groupedDrawingJSON: any) => GroupedDrawing.fromJSON(groupedDrawingJSON))));\n }\n}\n","import {KeyValue} from '@angular/common';\nimport {HttpClient} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {map, Observable} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class HttpGridSettingsService {\n public constructor(\n private readonly httpClient: HttpClient,\n private readonly backendConfiguration: BackendConfiguration\n ) {}\n\n public get(key: string): Observable> {\n return this.httpClient.get(`${this.backendConfiguration.getSettingsEndpoint(2)}ag-grid-local-storages/${key}`).pipe(map((gridSettingJSON: any) => JSON.parse(gridSettingJSON.value)));\n }\n\n public save(gridSetting: KeyValue): Observable {\n return this.httpClient.put(`${this.backendConfiguration.getSettingsEndpoint(2)}ag-grid-local-storages`, gridSetting).pipe(map((response: {key: string}) => response.key));\n }\n}\n","export enum MediaType {\n SVG = 'svg',\n BMP = 'bmp',\n PNG = 'png'\n}\n","import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nexport const CONNECTIVITY_TOAST = new InjectionToken('ConnectivityToast');\n\nexport interface ConnectivityToast {\n didRequestEnd: Observable;\n\n show(): void;\n\n hide(): void;\n\n requestEnded(): void;\n}\n","import {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class HttpRequestManagerService {\n private cancelPendingRequestsSubject: Subject = new Subject();\n\n public cancelPendingRequests(): void {\n this.cancelPendingRequestsSubject.next();\n }\n\n public onCancelPendingRequests(): Observable {\n return this.cancelPendingRequestsSubject.asObservable();\n }\n}\n","import {HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest} from '@angular/common/http';\nimport {Inject, Injectable, Injector} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {ErrorMessageHelper} from '@application/helper/error-message-helper';\nimport {getFileExtension} from '@application/helper/get-file-extension';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {MediaType} from '@domain/media-type';\nimport {Subscription} from '@domain/profile/subscription';\nimport {environment} from '@environments/environment';\nimport {HttpRequestManagerService} from '@infrastructure/http/http-request-manager.service';\nimport {CONNECTIVITY_TOAST, ConnectivityToast} from '@presentation/components/connectivity-toast/connectivity-toast';\nimport {\n AppInsightsLoggingService,\n ArrayUtils,\n AssertionUtils,\n BackendError,\n BackendErrorSeverity,\n EnumUtils,\n SignalrHubConnectionFactoryService,\n TranslateService,\n UnhandledBackendError,\n UuidUtils\n} from '@vdw/angular-component-library';\nimport {EMPTY, Observable, throwError, timer} from 'rxjs';\nimport {catchError, finalize, map, retry, switchMap, takeUntil} from 'rxjs/operators';\nimport {AUTHENTICATION} from './authentication/authentication';\nimport {CANCEL_REQUEST} from './cancel-request-context';\nimport Timeout = NodeJS.Timeout;\n\n@Injectable()\nexport class InterceptedHttp implements HttpInterceptor {\n private readonly assetsPath: string = 'assets';\n private readonly timeoutDurationForSlowConnection = 1000;\n\n private connectivityToastTimeout: Timeout;\n private canShowConnectivityToast = true;\n private requests: HttpRequest[] = [];\n\n public constructor(\n @Inject(CONNECTIVITY_TOAST) private readonly connectivityToast: ConnectivityToast,\n private readonly backendConfiguration: BackendConfiguration,\n private readonly errorMessageHelper: ErrorMessageHelper,\n private readonly translate: TranslateService,\n private readonly httpRequestManagerService: HttpRequestManagerService,\n private readonly injector: Injector,\n private readonly navigationService: NavigationService,\n private readonly appInsightsLoggingService: AppInsightsLoggingService\n ) {}\n\n public intercept(request: HttpRequest, next: HttpHandler): Observable> {\n if (this.canIntercept(request)) {\n const authentication = this.injector.get(AUTHENTICATION);\n const signalrHubConnectionFactoryService = this.injector.get(SignalrHubConnectionFactoryService);\n\n const requestId = UuidUtils.generateV4Uuid();\n const userId = authentication.getCurrentUserId();\n\n this.setRequestIdAndUserIdOnErrorLoggingScope(requestId, userId);\n\n const headers = {\n Accept: 'security/json, application/json',\n SubscriptionId: this.backendConfiguration.getSubscriptionId(),\n CompanyId: this.backendConfiguration.getCompanyId(),\n ConnectionId: signalrHubConnectionFactoryService.getConnectionId(),\n BrowserInstanceId: this.backendConfiguration.getBrowserInstanceId(),\n 'x-requestid': requestId\n };\n\n if (\n !request.url.includes('drawings/image') &&\n !request.url.includes('finishingtemplates/label-images/image') &&\n !request.url.includes('speedtest') &&\n !request.url.includes('training/manage') &&\n !request.url.includes('manage/export-wvsx') &&\n !request.url.endsWith('/xml') &&\n !request.url.endsWith('/xslt') &&\n !request.url.includes('weavestructures/manage') &&\n !request.url.includes('machinegroups/floorplan')\n ) {\n headers['Content-Type'] = 'application/json';\n }\n\n if (request.url.includes('speedtest')) {\n headers['ngsw-bypass'] = 'true';\n }\n\n request = request.clone({\n url: request.url,\n setHeaders: headers\n });\n\n return this.handleRequest(next, request, headers, authentication.getCurrentSubscription());\n } else {\n return next.handle(request);\n }\n }\n\n private setRequestIdAndUserIdOnErrorLoggingScope(requestId: string, userId: string): void {\n if (!environment.isDebugMode) {\n this.setTagOnErrorLoggingScope('request_id', requestId);\n this.setTagOnErrorLoggingScope('user_id', userId);\n }\n }\n\n private setTagOnErrorLoggingScope(key: string, value: string): void {\n value = value.trim();\n\n if (!AssertionUtils.isEmpty(value)) {\n this.appInsightsLoggingService.setTag(key, value);\n }\n }\n\n private canIntercept(request: HttpRequest): boolean {\n const isAsset = request.url.includes(this.assetsPath);\n\n return !isAsset && !this.isMediaUrl(request.url) && !this.isMediaContent(request.url);\n }\n\n private handleRequest(next: HttpHandler, request: HttpRequest, headers: any, subscription: Subscription): Observable {\n this.checkForSlowConnection(request);\n\n return next.handle(request).pipe(\n (source: Observable>) => {\n return request.context.get(CANCEL_REQUEST) ? source.pipe(takeUntil(this.httpRequestManagerService.onCancelPendingRequests())) : source;\n },\n\n retry({\n delay: (error: HttpErrorResponse, attempt: number) => {\n if (error.status === 503 && attempt <= this.backendConfiguration.getRetryAttempts503()) {\n return timer(500);\n }\n const isDemoSubscription = headers.SubscriptionId === '37ed5ea1-be18-47a4-b461-4952e43aca95';\n if ((isDemoSubscription && ![404, 409].includes(error.status)) || this.navigationService.checkIsSwitchingSubscription(subscription)) {\n return EMPTY;\n }\n throw error;\n }\n }),\n\n catchError((error: HttpErrorResponse) => {\n const severity = this.getErrorSeverity(request);\n\n if (error.error instanceof Blob) {\n return this.handleBlobError(error);\n }\n\n if (error.status === 400) {\n return throwError(() => new UnhandledBackendError(severity, this.translate.instant('GENERAL.ERRORS.BACKEND.BAD_REQUEST'), error.error ?? null));\n }\n if (error.status === 403) {\n return throwError(() => new UnhandledBackendError(severity, this.translate.instant('GENERAL.ERRORS.BACKEND.ACCESS_DENIED')));\n }\n if (error.status === 501) {\n return throwError(() => new UnhandledBackendError(severity, this.translate.instant('GENERAL.ERRORS.BACKEND.NOT_IMPLEMENTED')));\n }\n\n if (!AssertionUtils.isNullOrUndefined(error?.error?.errorCode)) {\n try {\n return this.errorMessageHelper.getErrorMessageFromBackendError(error.error).pipe(\n map((errorMessage: string) => {\n throw new BackendError(severity, errorMessage, error.error);\n })\n );\n } catch {}\n }\n if (error.status === 404) {\n return throwError(() => new UnhandledBackendError(severity, this.translate.instant('GENERAL.ERRORS.STATUSCODE.NOT_FOUND.TITLE'), error));\n }\n\n return throwError(() => new UnhandledBackendError(severity, this.translate.instant('GENERAL.ERRORS.BACKEND.UNAVAILABLE'), error));\n }),\n\n finalize(() => {\n this.requests = ArrayUtils.pull(this.requests, request);\n\n if (this.canIntercept(request) && this.requests.length === 0) {\n this.connectivityToast.requestEnded();\n clearTimeout(this.connectivityToastTimeout);\n\n this.canShowConnectivityToast = true;\n }\n })\n );\n }\n\n private handleBlobError(error: HttpErrorResponse): Observable {\n return this.blobToString(error.error).pipe(\n switchMap((errorText: any) => {\n const errorResponse = JSON.parse(errorText);\n return throwError(() => errorResponse);\n }),\n catchError((err: any) => {\n return throwError(() => ({name: 'Unhandled error', message: err.ErrorCode}));\n })\n );\n }\n\n private blobToString(blob: Blob): Observable {\n return new Observable((observer: any) => {\n const reader = new FileReader();\n\n reader.onload = (): void => {\n observer.next(reader.result as string);\n observer.complete();\n };\n\n reader.onerror = (): void => {\n observer.error(new Error('Failed to read the Blob'));\n };\n\n reader.readAsText(blob);\n });\n }\n\n private getErrorSeverity(request: HttpRequest): BackendErrorSeverity {\n let result = BackendErrorSeverity.FATAL;\n const regexDrawing = /drawings\\/image\\?id=/;\n const regexRecoloredDrawing = /drawings\\/images\\/[^\\/? ]*\\/recolored\\?/;\n\n if (regexDrawing.test(request.url) || regexRecoloredDrawing.test(request.url)) {\n result = BackendErrorSeverity.INFO;\n }\n return result;\n }\n\n private isMediaUrl(url: string): boolean {\n const fileExtension = getFileExtension(url);\n return !AssertionUtils.isEmpty(fileExtension) && EnumUtils.getEnumValues(MediaType).includes(fileExtension);\n }\n\n private isMediaContent(url: string): boolean {\n return url.startsWith('data:image');\n }\n\n private checkForSlowConnection(request: HttpRequest): void {\n if (this.canIntercept(request)) {\n this.requests.push(request);\n\n if (this.canShowConnectivityToast) {\n clearTimeout(this.connectivityToastTimeout);\n\n this.canShowConnectivityToast = false;\n\n this.connectivityToastTimeout = setTimeout(() => {\n this.connectivityToast.show();\n }, this.timeoutDurationForSlowConnection);\n }\n }\n }\n}\n","export function getFileExtension(fileName: string): string {\n return fileName.lastIndexOf('.') !== -1 ? fileName.substring(fileName.lastIndexOf('.') + 1) : '';\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {EventExecutedSuccessfullyUpdate} from '@domain/event-executed-successfully-update';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {SignalrEvent} from './signalr-event.interface';\n\n@Injectable()\nexport class SignalrEventService implements SignalrEvent {\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public getEventExecutedSuccessfullyUpdates(): Observable {\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(\n `${this.backendConfiguration.getMachineOverviewHubEndPoint()}machineoverview`,\n 'OnEventExecutedSuccessfully'\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {BackgroundJobGlobalStatusUpdate} from '@domain/background-jobs/background-job-global-status-update';\nimport {RealtimeBackgroundJobs} from '@infrastructure/signalr/jobs/realtime-background-jobs';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {Observable} from 'rxjs';\nimport {map} from 'rxjs/operators';\n\n@Injectable()\nexport class SignalrBackgroundJobService implements RealtimeBackgroundJobs {\n public constructor(\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public getJobGlobalStatusChanged(): Observable {\n return this.signalrHubConnectionFactoryService\n .getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnJobGlobalStatusChanged')\n .pipe(map((updateForBackgroundJobGlobalStatus: any) => BackgroundJobGlobalStatusUpdate.fromJSON(updateForBackgroundJobGlobalStatus)));\n }\n}\n","import {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\n\nexport const REALTIME_SUBSCRIPTIONS = new InjectionToken('RealtimeSubscriptions');\n\nexport interface RealtimeSubscriptions {\n getSubscriptionCacheCleared(): Observable;\n}\n","import {Inject, Injectable} from '@angular/core';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {SignalrHubConnectionFactoryService} from '@vdw/angular-component-library';\nimport {Observable, of} from 'rxjs';\nimport {RealtimeSubscriptions} from './realtime-subscriptions';\n\n@Injectable()\nexport class SignalrSubscriptionService implements RealtimeSubscriptions {\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly backendConfiguration: BackendConfiguration,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService\n ) {}\n\n public getSubscriptionCacheCleared(): Observable {\n if (!this.authentication.isAuthenticated()) {\n return of();\n }\n return this.signalrHubConnectionFactoryService.getSignalrHubEvents(`${this.backendConfiguration.getNotificationsHubEndPoint()}notifications`, 'OnSubscriptionCacheCleared');\n }\n}\n","import {OverlayRef} from '@angular/cdk/overlay';\nimport {isNil} from 'lodash-es';\n\nexport class ConnectivityToastRef {\n private readonly overlayRef: OverlayRef;\n\n public constructor(overlayRef: OverlayRef) {\n this.overlayRef = overlayRef;\n }\n\n public close(): void {\n this.overlayRef.dispose();\n }\n\n public isVisible(): boolean {\n return !isNil(this.overlayRef?.overlayElement);\n }\n}\n","import {animate, AnimationTriggerMetadata, sequence, state, style, transition, trigger} from '@angular/animations';\n\nexport enum ToastAnimationState {\n DEFAULT = 'default',\n CLOSING = 'closing'\n}\n\nexport function slideDownUpAnimation(): AnimationTriggerMetadata {\n const marginTop = (pixels: number): any => {\n return {'margin-top': `${pixels}px`};\n };\n const timings = '250ms ease';\n return trigger('slideDownUpAnimation', [\n state(ToastAnimationState.DEFAULT, style(marginTop(8))),\n transition('void => *', [style(marginTop(-58)), sequence([animate(timings, style(marginTop(16))), animate(timings, style(marginTop(8)))])]),\n transition(`${ToastAnimationState.DEFAULT} => ${ToastAnimationState.CLOSING}`, [style(marginTop(8)), animate(timings, style(marginTop(-58)))])\n ]);\n}\n","import {AnimationEvent} from '@angular/animations';\nimport {Component, ElementRef, Inject, OnDestroy, OnInit, Renderer2} from '@angular/core';\nimport {Event, NavigationEnd, Router, RouterEvent} from '@angular/router';\nimport {slideDownUpAnimation, ToastAnimationState} from '@presentation/components/connectivity-toast/animations/connectivty-toast.animation';\nimport {ConnectivityToast, CONNECTIVITY_TOAST} from '@presentation/components/connectivity-toast/connectivity-toast';\nimport {BaseComponent} from '@vdw/angular-component-library';\nimport {isEqual} from 'lodash-es';\nimport {filter, takeUntil} from 'rxjs/operators';\nimport Timeout = NodeJS.Timeout;\n\n@Component({\n templateUrl: './connectivity-toast.component.html',\n styleUrls: ['./connectivity-toast.component.scss'],\n animations: [slideDownUpAnimation()]\n})\nexport class ConnectivityToastComponent extends BaseComponent implements OnInit, OnDestroy {\n public animationState = ToastAnimationState.DEFAULT;\n\n private connectivityToastTimeout: Timeout;\n private readonly elementRef: ElementRef;\n private readonly renderer: Renderer2;\n private readonly router: Router;\n\n public constructor(\n @Inject(CONNECTIVITY_TOAST) private readonly connectivityToast: ConnectivityToast,\n elementRef: ElementRef,\n renderer: Renderer2,\n router: Router\n ) {\n super();\n this.elementRef = elementRef;\n this.renderer = renderer;\n this.router = router;\n }\n\n public ngOnInit(): void {\n this.initialiseComponent();\n\n this.connectivityToast.didRequestEnd.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.setAnimationStateToClosing();\n });\n }\n\n public ngOnDestroy(): void {\n clearTimeout(this.connectivityToastTimeout);\n }\n\n public onSlideAnimationFinished(event: AnimationEvent): void {\n const isToStateClosing = isEqual(event.toState, ToastAnimationState.CLOSING);\n const isAnimationStateClosing = isEqual(this.animationState, ToastAnimationState.CLOSING);\n\n if (isToStateClosing && isAnimationStateClosing) {\n this.connectivityToast.hide();\n }\n }\n\n private initialiseComponent(): void {\n this.subscribeToRouteEventChanges();\n this.attachClickEvent();\n }\n\n private attachClickEvent(): void {\n this.renderer.listen(this.elementRef.nativeElement, 'click', () => {\n this.setAnimationStateToClosing();\n });\n }\n\n private subscribeToRouteEventChanges(): void {\n this.router.events\n .pipe(\n filter((event: RouterEvent | Event): boolean => event instanceof NavigationEnd),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.setAnimationStateToClosing();\n });\n }\n\n private setAnimationStateToClosing(): void {\n this.animationState = ToastAnimationState.CLOSING;\n }\n}\n","
\n \n

{{ 'GENERAL.PLEASE_WAIT' | bmsTranslate }}

\n
\n","import {GlobalPositionStrategy, Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {Injectable, Injector} from '@angular/core';\nimport {ConnectivityToast} from '@presentation/components/connectivity-toast/connectivity-toast';\nimport {ConnectivityToastRef} from '@presentation/components/connectivity-toast/connectivity-toast-ref';\nimport {ConnectivityToastComponent} from '@presentation/components/connectivity-toast/connectivity-toast.component';\nimport {Observable, Subject} from 'rxjs';\n\n@Injectable()\nexport class ConnectivityToastService implements ConnectivityToast {\n public didRequestEnd: Observable;\n\n private connectivityToastRef: ConnectivityToastRef;\n private readonly overlay: Overlay;\n private readonly parentInjector: Injector;\n private readonly didRequestEndSubject = new Subject();\n\n public constructor(overlay: Overlay, parentInjector: Injector) {\n this.overlay = overlay;\n this.parentInjector = parentInjector;\n this.didRequestEnd = this.didRequestEndSubject.asObservable();\n }\n\n public show(): void {\n if (!this.connectivityToastRef?.isVisible()) {\n const positionStrategy: GlobalPositionStrategy = this.overlay.position().global().top('0px').centerHorizontally();\n\n const overlayRef: OverlayRef = this.overlay.create({positionStrategy});\n this.connectivityToastRef = new ConnectivityToastRef(overlayRef);\n\n const injector = Injector.create({providers: [], parent: this.parentInjector});\n const componentPortal: ComponentPortal = new ComponentPortal(ConnectivityToastComponent, null, injector);\n\n overlayRef.attach(componentPortal);\n }\n }\n\n public hide(): void {\n if (this.connectivityToastRef?.isVisible()) {\n this.connectivityToastRef.close();\n }\n }\n\n public requestEnded(): void {\n this.didRequestEndSubject.next();\n }\n}\n","import {OverlayModule} from '@angular/cdk/overlay';\nimport {NgModule} from '@angular/core';\nimport {CONNECTIVITY_TOAST} from '@presentation/components/connectivity-toast/connectivity-toast';\nimport {ConnectivityToastComponent} from '@presentation/components/connectivity-toast/connectivity-toast.component';\nimport {ConnectivityToastService} from '@presentation/components/connectivity-toast/connectivity-toast.service';\nimport {TranslationModule} from '@vdw/angular-component-library';\nimport {MaterialModule} from '../../../material.module';\n\n@NgModule({\n imports: [OverlayModule, MaterialModule, TranslationModule],\n declarations: [ConnectivityToastComponent],\n providers: [\n {\n provide: CONNECTIVITY_TOAST,\n useClass: ConnectivityToastService\n }\n ]\n})\nexport class ConnectivityToastModule {}\n","import {Injectable} from '@angular/core';\nimport {Company} from '@domain/profile/company';\nimport {Subscription} from '@domain/profile/subscription';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class NavigationContextService {\n public companies: Company[];\n public subscriptions: Subscription[];\n}\n","\n","import {Component, Input} from '@angular/core';\nimport {UUID} from 'crypto';\nimport {ColorConstants} from '../../common/colors-variables.generated';\n\n@Component({\n selector: 'vdw-account-switch',\n templateUrl: './account-switch.component.html',\n styleUrls: ['./account-switch.component.scss']\n})\nexport class AccountSwitchComponent {\n @Input() public showExpanded = false;\n\n @Input() public set name(name: string) {\n if (this._name !== name) {\n this._name = name;\n this.firstCharacter = name.charAt(0).toUpperCase();\n }\n }\n\n public get name(): string {\n return this._name;\n }\n\n @Input() public set id(id: UUID) {\n if (this._id !== id) {\n this._id = id;\n this.backgroundColor = this.colorPalette[Number.parseInt(id.charAt(0), 16) % this.colorPalette.length];\n }\n }\n\n public firstCharacter: string;\n public backgroundColor: string;\n\n private _id: string;\n public _name: string;\n private colorPalette = [ColorConstants.PRIMARY_AQUA_400, ColorConstants.PRIMARY_TEAL_400, ColorConstants.PRIMARY_YELLOW_400, ColorConstants.PRIMARY_PINK_400, ColorConstants.PRIMARY_PURPLE_400];\n}\n","
\n @if (navigationContext.companies) {\n @for (company of navigationContext.companies; track company.id) {\n
\n
{{ company.name }}
\n @for (subscription of getSubscriptions(company); track subscription.id) {\n \n }\n
\n }\n } @else {\n \n }\n
\n\n
\n \n \n \n
\n","import {AfterViewInit, Component, Inject, OnDestroy, OnInit, ViewContainerRef} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {RUNTIME_APPLICATION_ENVIRONMENT, RuntimeApplicationEnvironment} from '@application/configuration/runtime-application-environment';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {Company} from '@domain/profile/company';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {HoverDialogBuilderService, MenuTreeViewContextService, SignalrHubConnectionFactoryService, WINDOW} from '@vdw/angular-component-library';\nimport {NavigationContextService} from '../navigation-context-service/navigation-context.service';\n\n@Component({\n selector: 'app-account-switcher-dialog',\n templateUrl: './account-switcher-dialog.component.html',\n styleUrls: ['./account-switcher-dialog.component.scss']\n})\nexport class AccountSwitcherDialogComponent implements OnInit, AfterViewInit, OnDestroy {\n private activeSubscription: Subscription;\n\n public constructor(\n private readonly router: Router,\n @Inject(WINDOW) private readonly window: Window,\n private readonly viewContainerRef: ViewContainerRef,\n private readonly backendConfiguration: BackendConfiguration,\n private readonly navigationService: NavigationService,\n protected readonly navigationContext: NavigationContextService,\n private readonly hoverDialogService: HoverDialogBuilderService,\n private readonly menuTreeViewContext: MenuTreeViewContextService,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly signalrHubConnectionFactoryService: SignalrHubConnectionFactoryService,\n @Inject(RUNTIME_APPLICATION_ENVIRONMENT) private readonly runtimeEnvironment: RuntimeApplicationEnvironment\n ) {}\n\n public ngOnInit(): void {\n this.activeSubscription = this.authentication.getCurrentSubscription();\n }\n\n public getSubscriptions(company: Company): Subscription[] {\n return this.navigationContext.subscriptions.filter((sub: Subscription) => sub.company?.id === company?.id);\n }\n\n public ngAfterViewInit(): void {\n this.hoverDialogService.registerElement(this.viewContainerRef.element.nativeElement, false);\n }\n\n public ngOnDestroy(): void {\n this.hoverDialogService.setHovered(this.viewContainerRef.element.nativeElement, false);\n }\n\n public isActiveSubscription(subscriptionId: string): boolean {\n return this.activeSubscription.id === subscriptionId;\n }\n\n public subscriptionClicked(subscriptionId: string, companyId: string): void {\n const subscription = this.navigationContext.subscriptions.find((sub: Subscription) => sub.id === subscriptionId);\n this.signalrHubConnectionFactoryService.disconnectAll();\n\n this.backendConfiguration.setCompanyId(companyId);\n this.backendConfiguration.setSubscriptionId(subscriptionId);\n this.authentication.setCurrentSubscription(subscription);\n\n this.signalrHubConnectionFactoryService.connectAll();\n\n this.navigationService.setIsSwitchingSubscription();\n\n this.window.location.reload();\n }\n\n public profileClicked(): void {\n this.menuTreeViewContext.setActive(null);\n this.router.navigateByUrl(RouteUtils.paths.profile.absolutePath);\n }\n\n public logoutClicked(): void {\n this.authentication.logout();\n }\n\n public manageSubscriptionsClicked(): void {\n this.window.open(this.runtimeEnvironment.getEnvironment().creditsUrl);\n }\n}\n","import {Location} from '@angular/common';\nimport {ChangeDetectorRef, Inject, Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {MobileNavigationBarActionItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-action-item';\nimport {MobileNavigationBarExternalLinkItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-external-link-item';\nimport {MobileNavigationBarItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-item';\nimport {MobileNavigationBarRouteLinkItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-route-link-item';\nimport {DialogBuilderFactoryService, WINDOW} from '@vdw/angular-component-library';\nimport {Observable, Subject, takeUntil} from 'rxjs';\nimport {NavigationSearchService} from '../navigation-search.service';\n\n@Injectable({providedIn: 'root'})\nexport class MobileNavigationComponentService {\n public constructor(\n @Inject(WINDOW) private readonly window: Window,\n private readonly router: Router,\n private readonly location: Location,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly navigationSearchService: NavigationSearchService\n ) {}\n\n public chooseMenuItem(event: MouseEvent, navigationBarItem: MobileNavigationBarItem, changeDetectorRef: ChangeDetectorRef, unSubscribeOnViewDestroy: Subject): any {\n if (navigationBarItem instanceof MobileNavigationBarRouteLinkItem) {\n this.router.navigateByUrl(navigationBarItem.path);\n this.navigationSearchService.notifySearchClosed();\n } else if (navigationBarItem instanceof MobileNavigationBarExternalLinkItem) {\n this.window.open(navigationBarItem.path);\n this.navigationSearchService.notifySearchClosed();\n } else if (navigationBarItem instanceof MobileNavigationBarActionItem) {\n const changed = navigationBarItem.executeCommand({dialog: this.dialogBuilderFactoryService, event, changeDetectorRef});\n\n navigationBarItem.active = true;\n if (changed instanceof Observable) {\n changed.pipe(takeUntil(unSubscribeOnViewDestroy)).subscribe(() => (navigationBarItem.active = false));\n }\n }\n }\n\n public isActive(item: MobileNavigationBarItem): boolean {\n if (this.location.isCurrentPathEqualTo((item as MobileNavigationBarRouteLinkItem).path)) {\n return true;\n }\n\n if (item instanceof MobileNavigationBarActionItem) {\n return item.active;\n }\n\n const currentBasePath = this.location.path().split('/')[1];\n const endOfNavigationItemPath = (item as MobileNavigationBarRouteLinkItem).path?.split('/').slice(-1)[0];\n return currentBasePath && endOfNavigationItemPath ? currentBasePath === endOfNavigationItemPath : false;\n }\n}\n","
\n
\n
\n \n
\n
\n
\n
\n \n
\n \n
\n
\n","import {ChangeDetectorRef, Component, ElementRef, Inject, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {MobileNavigationBarItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-item';\nimport {MobileNavigationService} from '@application/services/navigation/mobile-navigation.service';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {\n ArrowPosition,\n BaseComponent,\n DialogBuilder,\n DialogBuilderFactoryService,\n MenuItemEntry,\n RESPONSIVENESS_VIEW_MODE,\n ResponsivenessViewMode,\n TranslateService\n} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs/operators';\nimport {AccountSwitcherDialogComponent} from '../account-switcher-dialog/account-switcher-dialog.component';\nimport {SideNavigationStateService} from '../side-navigation-state.service';\nimport {MobileNavigationComponentService} from './mobile-navigation-component.service';\n\n@Component({\n selector: 'app-mobile-navigation-sidebar',\n templateUrl: './mobile-navigation-sidebar.component.html',\n styleUrls: ['./mobile-navigation-sidebar.component.scss']\n})\nexport class MobileNavigationSidebarComponent extends BaseComponent implements OnInit, OnDestroy {\n @ViewChild('accountSwitch') private readonly accountSwitcher: ElementRef;\n\n public navigationBarItems: MobileNavigationBarItem[];\n public accountSwitcherActive = false;\n public subscriptionId: string;\n public subscriptionName: string;\n\n private dialogBuilder: DialogBuilder;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode,\n private readonly sideNavigationStateService: SideNavigationStateService,\n private readonly navigationComponentService: MobileNavigationComponentService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly mobileNavigationService: MobileNavigationService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n const startSubscription = this.authentication.getCurrentSubscription();\n this.subscriptionId = startSubscription.id;\n this.subscriptionName = startSubscription.name;\n\n this.responsivenessViewMode.observeDeviceChanges().subscribe(() => (this.navigationBarItems = this.mobileNavigationService.getNavigationBarItems(this.authentication.getCurrentSubscription())));\n\n this.authentication\n .currentSubscriptionChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((subscription: Subscription) => {\n this.subscriptionId = subscription.id;\n this.subscriptionName = subscription.name;\n this.navigationBarItems = this.mobileNavigationService.getNavigationBarItems(subscription);\n });\n }\n\n public ngOnDestroy(): void {\n this.dialogBuilder?.close();\n super.ngOnDestroy();\n }\n\n public accountSwitcherClicked(): void {\n if (this.accountSwitcherActive) {\n this.dialogBuilder?.close();\n return;\n }\n\n this.accountSwitcherActive = true;\n this.dialogBuilder = this.dialogBuilderFactoryService\n .getBuilder()\n .withCustomBackdrop('no-opacity')\n .withWidth(`${this.accountSwitcher.nativeElement.clientWidth}px`)\n .withMaxWidth('100vw')\n .withClass('bms-theme');\n\n this.dialogBuilder\n .openAtElement(this.accountSwitcher.nativeElement, ArrowPosition.TOP, AccountSwitcherDialogComponent, {}, this.changeDetectorRef, false, null, 0)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.accountSwitcherActive = false));\n }\n\n public getMenuItemEntryFromNavigationBarItem(navigationBarItem: MobileNavigationBarItem): MenuItemEntry {\n return {navigationKey: this.translate.instant(navigationBarItem.name), icon: navigationBarItem.icon};\n }\n\n public chooseMenuItem(event: MouseEvent, navigationBarItem: MobileNavigationBarItem): void {\n this.navigationComponentService.chooseMenuItem(event, navigationBarItem, this.changeDetectorRef, this.unSubscribeOnViewDestroy);\n }\n\n public closeNavigation(): void {\n this.sideNavigationStateService.changeNavigationStateToClosed();\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({\n name: 'badgeLabel'\n})\nexport class BadgeLabelPipe implements PipeTransform {\n public transform(value: number): string {\n if (value === 0) {\n return '';\n } else if (value > 9) {\n return '+9';\n }\n return value?.toString();\n }\n}\n","\n \n \n \n\n","import {ChangeDetectorRef, Component, Inject, OnInit} from '@angular/core';\nimport {Subscription} from '@domain/profile/subscription';\nimport {Authentication, AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {BaseComponent} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {MobileNavigationBarItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-item';\nimport {MobileNavigationBarRouteLinkItem} from '@application/helper/mobile-navigation/mobile-navigation-bar-route-link-item';\nimport {MobileNavigationBarItemSize} from '@application/helper/mobile-navigation/mobile-navigation-bar-item-size.enum';\nimport {MobileNavigationComponentService} from './mobile-navigation-component.service';\nimport {MobileNavigationService} from '@application/services/navigation/mobile-navigation.service';\n\n@Component({\n selector: 'app-navigation-mobile',\n templateUrl: './navigation-mobile.component.html',\n styleUrls: ['./navigation-mobile.component.scss']\n})\nexport class NavigationMobileComponent extends BaseComponent implements OnInit {\n public quickAccessNavBarItems: MobileNavigationBarItem[];\n private currentSubscription: Subscription;\n\n public constructor(\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly mobileNavigationService: MobileNavigationService,\n private readonly navigationComponentService: MobileNavigationComponentService,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.currentSubscription = this.authentication.getCurrentSubscription();\n this.setNavBarItems();\n\n this.authentication\n .currentSubscriptionChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((currentSubscription: Subscription) => {\n this.currentSubscription = currentSubscription;\n this.setNavBarItems();\n });\n }\n\n private setNavBarItems(): void {\n this.quickAccessNavBarItems = this.mobileNavigationService.getQuickAccessBarItems(this.currentSubscription);\n }\n\n public isSmallItem(item: MobileNavigationBarItem): boolean {\n return item.size === MobileNavigationBarItemSize.SMALL;\n }\n\n public isActive(item: MobileNavigationBarItem): boolean {\n return this.navigationComponentService.isActive(item);\n }\n\n public chooseMenuItem(event: MouseEvent, navigationBarItem: MobileNavigationBarItem): any {\n if (navigationBarItem.id === 'search' && !this.isSearchAvailable()) {\n return;\n }\n this.navigationComponentService.chooseMenuItem(event, navigationBarItem, this.changeDetectorRef, this.unSubscribeOnViewDestroy);\n }\n\n public isSearchAvailable(item?: MobileNavigationBarItem): boolean {\n const activeNavigationBarItem = this.getCurrentActiveNavigationItem();\n\n return (activeNavigationBarItem as MobileNavigationBarRouteLinkItem)?.canSearch || (item && this.isActive(item) && item.id === 'search');\n }\n\n private getCurrentActiveNavigationItem(): MobileNavigationBarItem {\n return this.quickAccessNavBarItems.find((navigationBarItem: MobileNavigationBarItem) => this.isActive(navigationBarItem));\n }\n}\n","import {Component, Inject, ViewContainerRef} from '@angular/core';\nimport {BACKGROUND_JOBS, BackgroundJobs} from '@infrastructure/http/background-jobs/background-jobs';\nimport {REALTIME_BACKGROUND_JOBS, RealtimeBackgroundJobs} from '@infrastructure/signalr/jobs/realtime-background-jobs';\nimport {DialogBuilderFactoryService, HoverDialogBuilderService, TranslateService} from '@vdw/angular-component-library';\nimport {BaseBackgroundJobsComponent} from './base-background-jobs.component';\n\n@Component({\n templateUrl: './background-jobs-dialog.component.html',\n styleUrls: ['./background-jobs-dialog.component.scss']\n})\nexport class BackgroundJobsDialogComponent extends BaseBackgroundJobsComponent {\n public constructor(\n @Inject(BACKGROUND_JOBS) backgroundJobs: BackgroundJobs,\n @Inject(REALTIME_BACKGROUND_JOBS) realtimeBackgroundJobs: RealtimeBackgroundJobs,\n dialogBuilderFactoryService: DialogBuilderFactoryService,\n translate: TranslateService,\n viewContainerRef: ViewContainerRef,\n hoverDialogService: HoverDialogBuilderService\n ) {\n super(backgroundJobs, realtimeBackgroundJobs, dialogBuilderFactoryService, translate);\n\n hoverDialogService.registerElement(viewContainerRef.element.nativeElement, false);\n }\n}\n","\n \n \n \n
\n \n
\n
\n
\n","
\n
\n \n
\n
\n \n
\n \n
\n
\n
\n","import {ChangeDetectorRef, Component, ElementRef, Inject, OnDestroy, OnInit, Optional, ViewChild} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {Router} from '@angular/router';\nimport {NavigationId} from '@application/helper/routing/navigation-id.enum';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteData} from '@application/helper/routing/route-data.interface';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {Subscription} from '@domain/profile/subscription';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {BackgroundJobsDialogComponent} from '@presentation/components/background-jobs/background-jobs-dialog.component';\nimport {\n ApplicationLayoutService,\n ArrowPosition,\n AssertionUtils,\n BaseComponent,\n DialogBuilder,\n DialogBuilderFactoryService,\n LocalStorageService,\n MenuItemEntry,\n MenuTreeViewContextService\n} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {AccountSwitcherDialogComponent} from '../account-switcher-dialog/account-switcher-dialog.component';\nimport {SubscriptionFavoritedItemsData} from './subscription-favorited-items-data.interface';\n\n@Component({\n selector: 'app-navigation',\n templateUrl: './navigation.component.html',\n styleUrls: ['./navigation.component.scss']\n})\nexport class NavigationComponent extends BaseComponent implements OnInit, OnDestroy {\n public isDialog: boolean;\n public processActive: boolean;\n public subscriptionId: string;\n public subscriptionName: string;\n public processEntry: MenuItemEntry;\n public accountSwitcherActive: boolean;\n\n public readonly SIDEBAR_ICON_WIDTH_IN_PX = 18;\n\n private readonly MAX_NESTED_LEVEL = 2;\n private readonly ACCOUNT_SWITCH_WIDTH_MARGIN = 8;\n private readonly FAVORITED_KEY = 'favoritedItems';\n private readonly ACCOUNT_SWITCH_DIALOG_WIDTH = 240;\n\n private dialogBuilder: DialogBuilder;\n\n @ViewChild('processItem') public processItem: ElementRef;\n @ViewChild('accountSwitch') public accountSwitcher: ElementRef;\n\n public constructor(\n private readonly router: Router,\n private readonly localStorage: LocalStorageService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n public readonly navigationService: NavigationService,\n @Optional() private readonly dialog: MatDialogRef,\n private readonly menuTreeViewContext: MenuTreeViewContextService,\n public readonly applicationLayoutService: ApplicationLayoutService,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n this.isDialog = !AssertionUtils.isNullOrUndefined(this.dialog?.id);\n }\n\n public ngOnInit(): void {\n const startSubscription = this.authentication.getCurrentSubscription();\n this.subscriptionId = startSubscription.id;\n this.subscriptionName = startSubscription.name;\n\n if (this.isDialog) {\n this.processEntry = this.navigationService.composeProcessItem();\n this.processEntry.shouldHide = !startSubscription.hasPermission(this.processEntry.requiredPermission);\n return;\n }\n\n this.initializeSubscription(startSubscription, false);\n\n this.authentication\n .currentSubscriptionChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((subscription: Subscription) => this.initializeSubscription(subscription, true));\n\n this.menuTreeViewContext.itemFavorited.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((entry: MenuItemEntry) => this.setFavorited(entry));\n }\n\n public initializeSubscription(subscription: Subscription, changes: boolean): void {\n if (changes && subscription.id === this.subscriptionId) {\n return;\n }\n\n this.subscriptionId = subscription.id;\n this.subscriptionName = subscription.name;\n\n this.processEntry = this.navigationService.composeProcessItem();\n this.processEntry.shouldHide = !subscription.hasPermission(this.processEntry.requiredPermission);\n\n if (!AssertionUtils.isEmpty(this.applicationLayoutService.menuItems) && !changes) {\n return;\n }\n\n const orderItems = NavigationUtils.getMultiNavigationData([\n NavigationId.PRODUCTION_SCHEDULE_MODULE,\n NavigationId.TUFT_PRODUCTION_ORDER_MODULE,\n NavigationId.PLASTIC_PRODUCTION_ORDER_MODULE,\n NavigationId.WEAVING_PRODUCTION_ORDER_MODULE\n ]);\n\n const filteredOrderItems = orderItems.filter((item: RouteData) => subscription.hasPermission(item.requiredPermission));\n\n if (filteredOrderItems.length === 1) {\n filteredOrderItems[0].navigationKey = 'PRODUCTION_ORDER.PRODUCTION_ORDER';\n }\n\n const productItems = NavigationUtils.getMultiNavigationData([NavigationId.TUFT_PRODUCT_MODULE, NavigationId.WEAVE_PRODUCT_MODULE, NavigationId.PLASTIC_PRODUCT_MODULE]);\n\n const filteredProductItems = productItems.filter((item: RouteData) => subscription.hasPermission(item.requiredPermission));\n\n if (filteredProductItems.length === 1) {\n filteredProductItems[0].navigationKey = 'TEXTILE_DATA.PLASTIC_PRODUCT.PRODUCT';\n }\n\n this.applicationLayoutService.setMenuItems(this.navigationService.composeMenuItems(subscription));\n\n const flattenedItems = this.applicationLayoutService.getFlattenedMenuItems();\n const filteredFlattenedItems = flattenedItems?.filter((item: MenuItemEntry) => AssertionUtils.isNullOrUndefined(item.shouldHide)) ?? [];\n\n for (const entry of filteredFlattenedItems) {\n entry.shouldHide = !subscription.hasPermission(entry.requiredPermission);\n }\n\n this.processMenuItems(flattenedItems);\n\n if (changes) {\n const route = this.navigationService.getDefaultRoute(subscription);\n const active = flattenedItems.find((item: MenuItemEntry) => item.route === route);\n\n this.menuTreeViewContext.setActive(active);\n this.applicationLayoutService.getMenuItemPath(active)?.forEach((entry: MenuItemEntry) => (entry.isExpanded = true));\n this.setFavouriteItems(flattenedItems);\n return;\n }\n\n const possibleEntries = flattenedItems?.filter((entry: MenuItemEntry) => this.router.url?.startsWith(entry.route));\n\n if (!AssertionUtils.isEmpty(possibleEntries)) {\n const active = possibleEntries.reduce((first: MenuItemEntry, second: MenuItemEntry) => (this.router.url.split(first.route).length > this.router.url.split(second.route).length ? first : second));\n\n this.menuTreeViewContext.setActive(active);\n this.applicationLayoutService.getMenuItemPath(active)?.forEach((entry: MenuItemEntry) => (entry.isExpanded = true));\n }\n\n this.setFavouriteItems(flattenedItems);\n }\n\n public accountSwitcherClicked(): void {\n if (this.accountSwitcherActive) {\n this.dialogBuilder?.close();\n return;\n }\n\n this.accountSwitcherActive = true;\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n\n const sidebarWidth = this.isDialog ? this.ACCOUNT_SWITCH_DIALOG_WIDTH : this.localStorage.get('sidebar-width');\n this.dialogBuilder = this.isDialog ? this.dialogBuilder.withoutBackdrop() : this.dialogBuilder.withCustomBackdrop('no-opacity');\n\n this.dialogBuilder\n .withWidth(`${sidebarWidth - this.ACCOUNT_SWITCH_WIDTH_MARGIN}px`)\n .withClass('bms-theme')\n .withAutoHeight(true)\n .withMaxHeight('calc(100vh - 124px)')\n .openAtElement(this.accountSwitcher.nativeElement, ArrowPosition.TOP, AccountSwitcherDialogComponent, {}, this.changeDetectorRef, false, null, 0)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.accountSwitcherActive = false));\n }\n\n public processClicked(): void {\n if (this.processActive) {\n this.dialogBuilder?.close();\n return;\n }\n\n this.processActive = true;\n this.dialogBuilder = this.dialogBuilderFactoryService.getBuilder();\n this.dialogBuilder = this.isDialog ? this.dialogBuilder.withoutBackdrop() : this.dialogBuilder;\n\n this.dialogBuilder\n .openAtElement(this.processItem.nativeElement, ArrowPosition.LEFT, BackgroundJobsDialogComponent, {}, this.changeDetectorRef)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.processActive = false));\n }\n\n public setFavorited(item: MenuItemEntry): void {\n const favorites = this.applicationLayoutService.menuItems[0].childEntries;\n\n if (favorites.includes(item) && !item.isFavorited) {\n this.applicationLayoutService.menuItems[0].childEntries = favorites.filter((entry: MenuItemEntry) => item.navigationKey !== entry.navigationKey);\n } else if (!favorites.includes(item) && item.isFavorited) {\n favorites.push(item);\n }\n\n this.applicationLayoutService.hideFavorites = AssertionUtils.isEmpty(this.applicationLayoutService.menuItems[0].childEntries);\n\n const storedFavorites = this.localStorage.get(this.FAVORITED_KEY);\n\n if (!AssertionUtils.isNullOrUndefined(storedFavorites) && storedFavorites.length > 0) {\n const currentFavorites = storedFavorites.find((favoritedItem: SubscriptionFavoritedItemsData) => favoritedItem.subscriptionId === this.subscriptionId);\n\n if (!AssertionUtils.isNullOrUndefined(currentFavorites)) {\n currentFavorites.favoritedItems = this.applicationLayoutService.menuItems[0].childEntries;\n this.localStorage.set(this.FAVORITED_KEY, storedFavorites);\n } else {\n storedFavorites.push({subscriptionId: this.subscriptionId, favoritedItems: this.applicationLayoutService.menuItems[0].childEntries});\n this.localStorage.set(this.FAVORITED_KEY, storedFavorites);\n }\n } else {\n this.localStorage.set(this.FAVORITED_KEY, [{subscriptionId: this.subscriptionId, favoritedItems: this.applicationLayoutService.menuItems[0].childEntries}]);\n }\n }\n\n public ngOnDestroy(): void {\n this.dialogBuilder?.close();\n super.ngOnDestroy();\n }\n\n public shouldHideEntry(entry: MenuItemEntry, index: number): boolean {\n return (index === 0 && this.applicationLayoutService.hideFavorites) || (index !== 0 && entry.childEntries.every((child: MenuItemEntry) => child.shouldHide));\n }\n\n private processMenuItems(entries: MenuItemEntry[]): void {\n for (let i = 0; i < this.MAX_NESTED_LEVEL; i++) {\n this.processEmptyNavigationItems(entries);\n this.processSingularNestedItems(entries);\n }\n\n this.processEmptyNavigationItems(entries);\n }\n\n private processEmptyNavigationItems(entries: MenuItemEntry[]): void {\n const emptyItems = entries.filter((entry: MenuItemEntry) => (AssertionUtils.isNullOrUndefined(entry.route) && entry.childEntries?.every((child: MenuItemEntry) => child.shouldHide)) ?? false);\n\n for (const emptyItem of emptyItems) {\n const parent = this.applicationLayoutService.findParentEntry(emptyItem);\n\n if (!AssertionUtils.isNullOrUndefined(parent)) {\n parent.childEntries = parent.childEntries.filter((child: MenuItemEntry) => child.navigationKey !== emptyItem.navigationKey);\n }\n }\n }\n\n private processSingularNestedItems(entries: MenuItemEntry[]): void {\n const singularNestedItems = entries?.filter(\n (entry: MenuItemEntry) =>\n !AssertionUtils.isNullOrUndefined(this.applicationLayoutService.findParentEntry(entry)) &&\n entry.childEntries?.filter((child: MenuItemEntry) => child.shouldHide === false && !AssertionUtils.isNullOrUndefined(child.route))?.length === 1\n );\n\n if (AssertionUtils.isEmpty(singularNestedItems)) {\n return;\n }\n\n for (const singularNestedItem of singularNestedItems) {\n const parent = this.applicationLayoutService.findParentEntry(singularNestedItem);\n const item = singularNestedItem.childEntries.find((entry: MenuItemEntry) => entry.shouldHide === false);\n\n const index = parent?.childEntries?.findIndex((entry: MenuItemEntry) => entry.route === singularNestedItem.route);\n const rootIndex = this.applicationLayoutService.menuItems.findIndex((entry: MenuItemEntry) => entry.navigationKey === singularNestedItem.navigationKey);\n\n if (!AssertionUtils.isNullOrUndefined(parent) && index !== -1) {\n singularNestedItem.childEntries.forEach((childItem: MenuItemEntry) => (childItem.shouldHide = true));\n singularNestedItem.childEntries = [];\n singularNestedItem.route = item.route;\n singularNestedItem.navigationKey = item.navigationKey;\n } else if (rootIndex !== -1) {\n this.applicationLayoutService.menuItems[rootIndex].childEntries.forEach((childItem: MenuItemEntry) => (childItem.shouldHide = true));\n this.applicationLayoutService.menuItems[rootIndex].childEntries = [];\n this.applicationLayoutService.menuItems[rootIndex].route = item.route;\n this.applicationLayoutService.menuItems[rootIndex].navigationKey = item.navigationKey;\n }\n }\n }\n\n private setFavouriteItems(flattenedItems: MenuItemEntry[]): void {\n const storedFavorites = this.localStorage.get(this.FAVORITED_KEY) ?? [];\n\n if (!AssertionUtils.isEmpty(storedFavorites) && Array.isArray(storedFavorites)) {\n const currentFavorites = storedFavorites.find((favoritedItem: SubscriptionFavoritedItemsData) => favoritedItem.subscriptionId === this.subscriptionId);\n\n if (!AssertionUtils.isNullOrUndefined(currentFavorites) && currentFavorites.favoritedItems.length > 0) {\n const favoriteLinks = currentFavorites.favoritedItems.map((item: MenuItemEntry) => item.route).filter((route: string) => !AssertionUtils.isNullOrUndefined(route));\n const favorites = flattenedItems.filter((item: MenuItemEntry) => favoriteLinks.includes(item.route) && item.shouldHide === false);\n favorites.forEach((item: MenuItemEntry) => (item.isFavorited = true));\n\n this.applicationLayoutService.menuItems[0].childEntries = favorites;\n\n this.applicationLayoutService.hideFavorites = AssertionUtils.isEmpty(favorites);\n } else {\n this.applicationLayoutService.hideFavorites = true;\n }\n }\n }\n}\n","import {AfterViewInit, ChangeDetectorRef, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {NavigationState} from '@domain/navigation/navigation-state.enum';\nimport {ApplicationLayoutService, AssertionUtils, BaseComponent} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {NavigationComponent} from '../navigation-component/navigation.component';\nimport {SideNavigationStateService} from '../side-navigation-state.service';\n\n@Component({\n selector: 'app-navigation-hover-area',\n templateUrl: './navigation-hover-area.component.html',\n styleUrls: ['./navigation-hover-area.component.scss']\n})\nexport class NavigationHoverAreaComponent extends BaseComponent implements OnInit, AfterViewInit {\n public hoverEntered: boolean;\n public sidebarOpened: boolean;\n public viewInitialized: boolean;\n @ViewChild('hoverArea') public hoverArea: ElementRef;\n\n private readonly HOVER_TIMEOUT = 100;\n\n public constructor(\n private readonly changeDetectorRef: ChangeDetectorRef,\n public readonly applicationLayoutService: ApplicationLayoutService,\n private readonly sideNavigationState: SideNavigationStateService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.sidebarOpened = this.getSidebarOpened(this.sideNavigationState.getCurrentNavigationState());\n this.sideNavigationState.onNavigationStateChanged.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((state: NavigationState) => (this.sidebarOpened = this.getSidebarOpened(state)));\n }\n\n public ngAfterViewInit(): void {\n setTimeout(() => {\n this.viewInitialized = true;\n }, 200);\n }\n\n public areaEntered(): void {\n this.hoverEntered = true;\n\n setTimeout(() => {\n if (this.hoverEntered) {\n this.applicationLayoutService.openHoverDialog(this.applicationLayoutService.sidebarHoverButton, [this.hoverArea.nativeElement], {}, NavigationComponent, this.changeDetectorRef);\n }\n }, this.HOVER_TIMEOUT);\n }\n\n public areaLeft(): void {\n this.hoverEntered = false;\n }\n\n private getSidebarOpened(state: NavigationState): boolean {\n return AssertionUtils.isNullOrUndefined(this.applicationLayoutService.matDrawer)\n ? state === NavigationState.OPEN\n : this.applicationLayoutService.isDrawerOpened() && this.applicationLayoutService.matDrawer.mode === 'side';\n }\n}\n","
\n","
\n
\n
\n

{{ 'NEW_UPDATE_DIALOG.DIALOG_BAR_TITLE' | bmsTranslateAsync: {version: changelogs[0]?.version} | async }}

\n

{{ date }}

\n
\n
\n @for (changelog of changelogs; track $index) {\n
\n
{{ 'NEW_UPDATE_DIALOG.NEW_FEATURES_LIST_TITLE' | bmsTranslateAsync: {version: changelog.version} | async }}
\n\n
\n @for (type of getChanges(changelog.version); track $index) {\n
\n

{{ 'CLIENT_VERSION.CHANGES_TYPE.' + (type | uppercase) | bmsTranslateAsync | async }}

\n
    \n @for (change of getChangesOfType(changelog.version, type); track $index) {\n
  • \n

    {{ change }}

    \n
  • \n }\n
\n
\n }\n
\n
\n }\n
\n
\n\n \n
\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {SwUpdate} from '@angular/service-worker';\nimport {DateTimeFormat, DateTimePipe, LocalStorageService, WINDOW} from '@vdw/angular-component-library';\nimport {forEach, isEmpty, isEqual, isNil} from 'lodash-es';\nimport {DateTime} from 'luxon';\nimport {ChangeLog} from './changelog';\n\n@Component({\n templateUrl: './new-update-available.component.html',\n styleUrls: ['./new-update-available.component.scss']\n})\nexport class NewUpdateAvailableComponent {\n public readonly changelogs: ChangeLog[] = [];\n public date: string;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: ChangeLog[],\n private readonly swUpdate: SwUpdate,\n private readonly localStorageService: LocalStorageService,\n @Inject(WINDOW) private readonly window: Window,\n private readonly dateTimePipe: DateTimePipe\n ) {\n this.changelogs = data;\n this.setDate();\n }\n\n public getChangesOfType(version: string, type: string): string[] {\n let changesOfType: string[] = [];\n forEach(this.changelogs, (changelog: ChangeLog) => {\n if (isEqual(version, changelog.version)) {\n changesOfType = isNil(changelog) || isNil(changelog.changes) ? [] : changelog.changes[type];\n }\n });\n return changesOfType;\n }\n\n public updateApp(): void {\n this.localStorageService.set('new-update-activation-timestamp', `${new Date().getTime()}`);\n\n this.swUpdate.activateUpdate().then(() => this.window.location.reload());\n }\n\n public getChanges(version: string): string[] {\n const types = ['added', 'changed', 'deprecated', 'removed', 'fixed', 'security'];\n const changesTypes: string[] = [];\n forEach(this.changelogs, (changelog: ChangeLog) => {\n forEach(types, (type: string) => {\n if (isEqual(version, changelog.version) && !isNil(changelog) && !isNil(changelog.changes) && !isEmpty(changelog.changes[type])) {\n changesTypes.push(type);\n }\n });\n });\n return changesTypes;\n }\n\n private setDate(): void {\n const isoDate = this.changelogs[0].changes?.date;\n this.date = isoDate ? this.dateTimePipe.transform(DateTime.fromISO(isoDate), DateTimeFormat.DATE_HUGE) : '';\n }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Inject, Injectable} from '@angular/core';\nimport {SwUpdate, VersionDetectedEvent, VersionInstallationFailedEvent, VersionReadyEvent} from '@angular/service-worker';\nimport {VERSION} from '@environments/version';\nimport {ChangeLog} from '@presentation/components/new-update-available/changelog';\nimport {NewUpdateAvailableComponent} from '@presentation/components/new-update-available/new-update-available.component';\nimport {AssertionUtils, DialogBuilderFactoryService, LocalStorageService, WINDOW} from '@vdw/angular-component-library';\nimport {filter, isEqual} from 'lodash-es';\nimport {interval, partition, Subscription} from 'rxjs';\nimport {filter as rxjsFilter, mergeMap, tap} from 'rxjs/operators';\nimport semverCompare from 'semver-compare';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class UpdateService {\n private readonly INTERVAL_TO_CHECK_FOR_UPDATES = 300000;\n private readonly MAX_DELAY_TO_RELOAD = 5000;\n private intervalSubscription: Subscription;\n private dialogOpen = false;\n\n public constructor(\n private readonly swUpdate: SwUpdate,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService,\n private readonly httpClient: HttpClient,\n private readonly localStorageService: LocalStorageService,\n @Inject(WINDOW) private readonly window: Window\n ) {}\n\n public checkForUpdates(): void {\n const startTime = new Date().getTime();\n\n const swUpdateAvailable = this.swUpdate.versionUpdates.pipe(\n rxjsFilter((event: VersionReadyEvent | VersionDetectedEvent | VersionInstallationFailedEvent) => event.type === 'VERSION_READY'),\n mergeMap(() => this.httpClient.get('/changelog.json'))\n );\n\n const [updateOnStartup, updateOnInterval] = partition(swUpdateAvailable, () => {\n const elapsedTime = new Date().getTime() - startTime;\n return elapsedTime <= this.MAX_DELAY_TO_RELOAD;\n });\n\n updateOnStartup.pipe(tap(() => this.localStorageService.set('new-update-activation-timestamp', `${new Date().getTime()}`))).subscribe(() => this.window.location.reload());\n\n updateOnInterval.pipe(rxjsFilter(() => !this.dialogOpen)).subscribe({\n next: (changelogs: ChangeLog[]) => this.showNewUpdateDialog(this.getNewerVersionsChangeLog(changelogs)),\n error: () => {\n this.intervalSubscription?.unsubscribe();\n this.dialogOpen = false;\n }\n });\n\n this.pollForUpdates();\n }\n\n private getNewerVersionsChangeLog(changelogs: ChangeLog[]): ChangeLog[] {\n return filter(changelogs, (changelog: ChangeLog) => {\n return isEqual(semverCompare(changelog.version, VERSION.version), 1);\n });\n }\n\n private pollForUpdates(): void {\n if (this.swUpdate.isEnabled) {\n this.swUpdate.checkForUpdate();\n\n this.intervalSubscription = interval(this.INTERVAL_TO_CHECK_FOR_UPDATES).subscribe(() => {\n this.swUpdate.checkForUpdate();\n });\n }\n }\n\n private showNewUpdateDialog(changelogs: ChangeLog[]): void {\n if (!AssertionUtils.isNullOrUndefined(changelogs) && !AssertionUtils.isEmpty(changelogs)) {\n this.dialogOpen = true;\n this.dialogBuilderFactoryService\n .getBuilder()\n .withAutoFocus()\n .withClass('new-update-dialog')\n .openDialog(NewUpdateAvailableComponent, changelogs)\n .subscribe({\n error: () => {\n this.intervalSubscription?.unsubscribe();\n this.dialogOpen = false;\n }\n });\n }\n }\n}\n","import {ChangeDetectorRef, Component, OnInit} from '@angular/core';\nimport {Event, NavigationEnd, Router, RouterEvent} from '@angular/router';\nimport {NavigationUtils} from '@application/helper/routing/navigation-utils';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationBreadcrumbsService} from '@application/services/navigation-breadcrumbs/navigation-breadcrumbs.service';\nimport {AssertionUtils, BaseComponent, BreadcrumbItem, MenuItemEntry, TranslateService} from '@vdw/angular-component-library';\nimport {filter, takeUntil} from 'rxjs';\n\n@Component({\n selector: 'app-navigation-breadcrumbs',\n templateUrl: './navigation-breadcrumbs.component.html'\n})\nexport class NavigationBreadcrumbsComponent extends BaseComponent implements OnInit {\n private readonly ADD_URL = '/add';\n private readonly EDIT_URL = '/edit';\n\n public breadcrumbItems: BreadcrumbItem[] = [];\n\n public constructor(\n private readonly router: Router,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly navigationBreadcrumbsService: NavigationBreadcrumbsService,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n public readonly disablePredicate = (breadcrumb: BreadcrumbItem): boolean => {\n const route = (breadcrumb.data.route as string)?.split('/')?.filter((path: string) => path !== '');\n const isKnownPath = !AssertionUtils.isNullOrUndefined(route) ? RouteUtils.isKnownPath(route) : false;\n const isNewKnownPath = !AssertionUtils.isNullOrUndefined(breadcrumb.data.id) && !AssertionUtils.isNullOrUndefined(NavigationUtils.getRoute(breadcrumb.data.id));\n return AssertionUtils.isNullOrUndefined(breadcrumb.data.route) || breadcrumb.data.route === this.router.url || (!isKnownPath && !isNewKnownPath);\n };\n\n public ngOnInit(): void {\n this.setBreadcrumbs();\n this.subscribeToRouteEventChanges();\n this.subscribeToNameChanges();\n this.subscribeToIsUsingBreadcrumbsDirectiveChanges();\n }\n\n public onBreadcrumbItemsChanged(breadcrumbItems: BreadcrumbItem | BreadcrumbItem[]): void {\n if (breadcrumbItems instanceof Array) {\n this.router.navigateByUrl(breadcrumbItems[breadcrumbItems.length - 1].data.route);\n } else {\n this.router.navigateByUrl(breadcrumbItems.data.route);\n }\n }\n\n private subscribeToRouteEventChanges(): void {\n this.router.events\n .pipe(\n filter((event: RouterEvent | Event): boolean => event instanceof NavigationEnd),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => this.setBreadcrumbs());\n }\n\n private setBreadcrumbs(): void {\n let url = this.router.url;\n const splitUrl = this.router.url.split('/');\n\n if (this.router.url.includes(this.ADD_URL) || this.router.url.includes(this.EDIT_URL)) {\n const urlToTrim = this.router.url.includes(this.ADD_URL) ? this.ADD_URL : this.EDIT_URL;\n url = this.router.url.substring(0, this.router.url.indexOf(urlToTrim));\n } else if (this.isCustomSettingsPage()) {\n const urlToTrim = '/settings';\n url = this.router.url.substring(0, this.router.url.startsWith(urlToTrim) ? this.router.url.lastIndexOf(urlToTrim) : this.router.url.indexOf(urlToTrim));\n } else if (Number(splitUrl[splitUrl.length - 1])) {\n url = this.router.url.substring(0, this.router.url.indexOf(`/${splitUrl[splitUrl.length - 1]}`));\n }\n\n let activeMenuItems = this.navigationBreadcrumbsService.findChildEntryByPath(this.navigationBreadcrumbsService.menuItems, url);\n\n if (this.isCustomSettingsPage()) {\n activeMenuItems.push({navigationKey: this.translate.instant('SETTINGS.MENU_NAME'), route: this.router.url});\n }\n\n this.breadcrumbItems = activeMenuItems?.map((activeMenuItem: MenuItemEntry) => {\n return {key: activeMenuItem.navigationKey, data: activeMenuItem} as BreadcrumbItem;\n });\n }\n\n private isCustomSettingsPage(): boolean {\n return this.router.url !== RouteUtils.paths.settings.absolutePath && this.router.url.endsWith('settings');\n }\n\n private isAddOrEditRoute(): boolean {\n return this.router.url.includes(this.ADD_URL) || this.router.url.includes(this.EDIT_URL);\n }\n\n private subscribeToNameChanges(): void {\n this.navigationBreadcrumbsService.onNameChangedSubject.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((name: string) => {\n const NEW_TRANSLATION_KEY = this.translate.instant('GENERAL.NEW');\n const currentActiveMenuItem = this.getCurrentActiveBreadcrumbItem();\n\n if (this.router.url.includes(this.ADD_URL)) {\n currentActiveMenuItem.key = name ? `${NEW_TRANSLATION_KEY}: ` : `${NEW_TRANSLATION_KEY}`;\n currentActiveMenuItem.data.newName = name;\n } else {\n currentActiveMenuItem.key = name;\n }\n\n this.changeDetectorRef.detectChanges();\n });\n }\n\n private subscribeToIsUsingBreadcrumbsDirectiveChanges(): void {\n this.navigationBreadcrumbsService.isUsingBreadcrumbFormLinkerSubject.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((isUsingBreadcrumbsDirective: boolean) => {\n if (isUsingBreadcrumbsDirective && this.isAddOrEditRoute() && AssertionUtils.isNullOrUndefined(this.getCurrentActiveBreadcrumbItem())) {\n this.breadcrumbItems?.push({key: this.translate.instant('GENERAL.NEW'), data: {route: this.router.url}} as BreadcrumbItem);\n }\n });\n }\n\n private getCurrentActiveBreadcrumbItem(): BreadcrumbItem {\n return this.breadcrumbItems.find((item: BreadcrumbItem) => item.data.route === this.router.url);\n }\n}\n","\n","
\n
\n \n
\n
\n \n
\n
\n \n \n \n
\n
\n \n \n \n \n \n
\n
\n","import {AfterViewInit, ChangeDetectorRef, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatIconButton} from '@angular/material/button';\nimport {Router} from '@angular/router';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationState} from '@domain/navigation/navigation-state.enum';\nimport {ApplicationMaintenance} from '@domain/profile/application-maintenance';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {environment} from '@environments/environment';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {NotificationsComponent} from '@presentation/pages/notifications/notifications.component';\nimport {NotificationsService} from '@presentation/pages/notifications/notifications.service';\nimport {\n ApplicationLayoutService,\n AssertionUtils,\n BaseComponent,\n HoverDialogBuilderService,\n MenuTreeViewContextService,\n RESPONSIVENESS_VIEW_MODE,\n ResponsivenessViewMode\n} from '@vdw/angular-component-library';\nimport moment from 'moment';\nimport {takeUntil} from 'rxjs';\nimport {NavigationComponent} from '../navigation-component/navigation.component';\nimport {SideNavigationStateService} from '../side-navigation-state.service';\n\n@Component({\n selector: 'app-navigation-header',\n templateUrl: './navigation-header.component.html',\n styleUrls: ['./navigation-header.component.scss']\n})\nexport class NavigationHeaderComponent extends BaseComponent implements OnInit, AfterViewInit {\n private readonly MAX_NOTIFICATIONS_VALUE = 99;\n public readonly notificationsComponent = NotificationsComponent;\n public readonly SETTINGS_PERMISSION = Permission.SETTINGS_SHOW_ICON;\n\n public unreadNotifications: string;\n public hasSettingsPermission: boolean;\n public maintenanceNotification: ApplicationMaintenance = null;\n\n @ViewChild('sidebarButton') public sidebarButton: MatIconButton;\n\n public constructor(\n private readonly router: Router,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly sideNavigationState: SideNavigationStateService,\n private readonly notificationService: NotificationsService,\n private readonly menuTreeViewContext: MenuTreeViewContextService,\n public readonly applicationLayoutService: ApplicationLayoutService,\n private readonly hoverDialogBuilderService: HoverDialogBuilderService,\n private readonly backendConfiguration: BackendConfiguration,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly viewMode: ResponsivenessViewMode\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setUnreadNotifications();\n this.setMaintenanceNotifications();\n this.hasSettingsPermission = this.authentication.getCurrentSubscription()?.hasPermission(Permission.SETTINGS_SHOW_ICON) ?? false;\n\n this.authentication\n .currentSubscriptionChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((subscription: Subscription) => {\n this.setUnreadNotifications(subscription);\n this.hasSettingsPermission = subscription?.hasPermission(Permission.SETTINGS_SHOW_ICON) ?? false;\n });\n\n this.authentication\n .currentSubscriptionChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((subscription: Subscription) => this.setUnreadNotifications(subscription));\n\n this.applicationLayoutService.sidebarIcon = this.getSidebarIcon();\n }\n\n public ngAfterViewInit(): void {\n this.applicationLayoutService.sidebarHoverButton = this.sidebarButton?._elementRef?.nativeElement;\n }\n\n public hasNoUnreadNotifications(): boolean {\n return AssertionUtils.isNullOrUndefined(this.unreadNotifications) || this.unreadNotifications === '0';\n }\n\n public helpClicked(): void {\n window.open(environment.helpUrl);\n }\n\n public settingsClicked(): void {\n this.menuTreeViewContext.setActive(null);\n this.router.navigate([RouteUtils.paths.settings.absolutePath]);\n }\n\n public sidebarEnter(): void {\n setTimeout(() => {\n this.applicationLayoutService.openHoverDialog(this.applicationLayoutService.sidebarHoverButton, [], {}, NavigationComponent, this.changeDetectorRef);\n });\n }\n\n public sidebarButtonClicked(): void {\n this.applicationLayoutService.toggle();\n\n if (this.applicationLayoutService.matDrawer?.mode === 'side') {\n this.sideNavigationState.getCurrentNavigationState() === NavigationState.OPEN ? this.sideNavigationState.changeNavigationStateToClosed() : this.changeNavigationStateToOpen();\n } else if (this.applicationLayoutService.isDrawerOpened()) {\n this.hoverDialogBuilderService.closeHoverDialog();\n }\n\n this.applicationLayoutService.sidebarIcon = this.getSidebarIcon();\n }\n\n public canShowMaintenanceNotification(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.maintenanceNotification);\n }\n\n private getSidebarIcon(): string {\n const keyboardIcon = 'solid-keyboard-double-arrow-left';\n if (AssertionUtils.isNullOrUndefined(this.applicationLayoutService.matDrawer) || !this.viewMode.isDesktop) {\n return this.sideNavigationState.getCurrentNavigationState() === NavigationState.OPEN ? keyboardIcon : 'solid-menu';\n }\n\n return this.applicationLayoutService.isDrawerOpened() ? keyboardIcon : 'solid-menu';\n }\n\n private setUnreadNotifications(subscription: Subscription = null): void {\n subscription ??= this.authentication.getCurrentSubscription();\n\n if (subscription?.hasPermission(Permission.ALERT_VIEW_NOTIFICATIONS)) {\n this.notificationService.unreadCount\n ?.pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((count: number) => (this.unreadNotifications = count > this.MAX_NOTIFICATIONS_VALUE ? `${this.MAX_NOTIFICATIONS_VALUE}+` : `${count}`));\n }\n }\n\n private changeNavigationStateToOpen(): void {\n this.hoverDialogBuilderService.closeHoverDialog();\n this.sideNavigationState.changeNavigationStateToOpen();\n }\n\n private setMaintenanceNotifications(): void {\n const applicationMaintenance = this.backendConfiguration.getApplicationMaintenance();\n\n if (!AssertionUtils.isNullOrUndefined(applicationMaintenance)) {\n const {start, end} = applicationMaintenance;\n const startDate = moment(start);\n const endDate = moment(end);\n const now = moment();\n const daysBetweenNowAndStartOfMaintenance = startDate.diff(now, 'days');\n const minDaysToShowMaintenanceNotification = 7;\n const shouldShowMaintenanceNotification = daysBetweenNowAndStartOfMaintenance <= minDaysToShowMaintenanceNotification && !now.isAfter(endDate);\n if (shouldShowMaintenanceNotification) {\n this.maintenanceNotification = applicationMaintenance;\n }\n }\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ApplicationLayoutService} from '@vdw/angular-component-library';\nimport {NavigationHeaderComponent} from '../navigation-header/navigation-header.component';\nimport {NavigationComponent} from '../navigation-component/navigation.component';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ApplicationLayoutRegisterService {\n public constructor(private readonly applicationLayoutService: ApplicationLayoutService) {}\n\n public registerElements(): void {\n this.applicationLayoutService.sidebarType = NavigationComponent;\n this.applicationLayoutService.navigationHeaderType = NavigationHeaderComponent;\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

{{ 'OVERLAY.ROTATE_DEVICE' | bmsTranslate }}

\n
\n
\n","import {ChangeDetectorRef, Component, EventEmitter, Inject, OnInit, ViewChild} from '@angular/core';\nimport {MatDialog} from '@angular/material/dialog';\nimport {MatIconRegistry} from '@angular/material/icon';\nimport {MatDrawer, MatDrawerMode} from '@angular/material/sidenav';\nimport {MatSnackBar} from '@angular/material/snack-bar';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {Event, NavigationEnd, NavigationStart, Router, RouterEvent} from '@angular/router';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationService} from '@application/services/navigation/navigation.service';\nimport {NavigationState} from '@domain/navigation/navigation-state.enum';\nimport {Company} from '@domain/profile/company';\nimport {Permission} from '@domain/profile/permission.enum';\nimport {Subscription} from '@domain/profile/subscription';\nimport {environment} from '@environments/environment';\nimport Hotjar from '@hotjar/browser';\nimport {AUTHENTICATION, Authentication} from '@infrastructure/http/authentication/authentication';\nimport {HttpRequestManagerService} from '@infrastructure/http/http-request-manager.service';\nimport {CompanySubscriptions} from '@infrastructure/http/profile/company-subscriptions';\nimport {PROFILE, Profile} from '@infrastructure/http/profile/profile';\nimport {SignalrSubscriptionService} from '@infrastructure/signalr/subscription/signalr-subscription.service';\nimport {UpdateService} from '@infrastructure/update/update.service';\nimport {ApplicationLayoutRegisterService} from '@presentation/navigation/application-layout-register-service/application-layout-register.service';\nimport {NavigationContextService} from '@presentation/navigation/navigation-context-service/navigation-context.service';\nimport {SideNavigationStateService} from '@presentation/navigation/side-navigation-state.service';\nimport {\n AppInsightsLoggingService,\n ApplicationLayoutService,\n AssertionUtils,\n BackendError,\n BaseComponent,\n Icon,\n ICONS,\n IconSet,\n LanguageService,\n LocalStorageService,\n moment,\n ResizeElementDirective,\n RESPONSIVENESS_VIEW_MODE,\n ResponsivenessViewMode,\n SOLID_ICONS,\n SolidIcon,\n ToastService,\n TranslateService,\n UuidUtils\n} from '@vdw/angular-component-library';\nimport {NGXLogger, NgxLoggerLevel} from 'ngx-logger';\nimport {filter, switchMap, takeUntil, tap} from 'rxjs/operators';\n\n@Component({\n selector: 'app-root',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent extends BaseComponent implements OnInit {\n public sideNavInitialized: boolean;\n public notifications: string[] = [];\n public drawerInitialized = new EventEmitter();\n public resizeDirective: ResizeElementDirective;\n public isAuthenticated: boolean;\n\n private companies: Company[] = [];\n private subscriptions: Subscription[] = [];\n\n private readonly HOTJAR_VERSION = 6;\n\n @ViewChild('drawer')\n public set drawer(value: MatDrawer) {\n if (!AssertionUtils.isNullOrUndefined(value)) {\n this.applicationLayoutService.matDrawer = value;\n this.drawerInitialized.emit();\n }\n }\n\n public constructor(\n private readonly router: Router,\n private readonly translate: TranslateService,\n @Inject(PROFILE) private readonly profile: Profile,\n private readonly iconRegistry: MatIconRegistry,\n private readonly sanitizer: DomSanitizer,\n @Inject(AUTHENTICATION) private readonly authentication: Authentication,\n private readonly dialog: MatDialog,\n private readonly sideNavigationState: SideNavigationStateService,\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode,\n private readonly subscriptionSignalr: SignalrSubscriptionService,\n private readonly languageService: LanguageService,\n private readonly updateService: UpdateService,\n private readonly httpRequestManagerService: HttpRequestManagerService,\n private readonly localStorage: LocalStorageService,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly backendConfiguration: BackendConfiguration,\n private readonly logger: NGXLogger,\n private readonly toastService: ToastService,\n private readonly matSnackBar: MatSnackBar,\n public readonly applicationLayoutService: ApplicationLayoutService,\n private readonly applicationLayoutRegistering: ApplicationLayoutRegisterService,\n public readonly appInsightsLoggingService: AppInsightsLoggingService,\n private readonly navigationContext: NavigationContextService,\n private readonly navigationService: NavigationService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.setUpIcons();\n this.calculateDpi();\n this.updateSideNavState();\n this.subscribeToApplicationUpdates();\n this.subscribeToApplicationUpdateApplied();\n this.subscribeToRouterEvents();\n this.subscribeToMediaChanges();\n this.validateCurrentSubscription();\n this.checkForExperimentalLanguageUsage();\n this.subscribeToAuthenticationChanges();\n this.setLoggerLevel();\n this.setBrowserInstanceId();\n this.setUpHotjar();\n this.setupApplicationInsightsLogging();\n this.resetSwitchingSubscriptions();\n\n this.applicationLayoutRegistering.registerElements();\n }\n\n public isSideNavCollapsed(): boolean {\n return this.sideNavigationState.getCurrentNavigationState() === NavigationState.CLOSED;\n }\n\n public getMode(): MatDrawerMode {\n return this.isTablet() ? 'over' : 'side';\n }\n\n public canShowMenu(): boolean {\n const isDefaultRoute = this.router.url === '/';\n const isLoginRoute = this.router.url.startsWith(RouteUtils.paths.login.absolutePath);\n const isLoadingMachineTechnicalWeaveSettingsFile = this.router.url.startsWith(RouteUtils.paths.loadingFile.absolutePath);\n\n return !isDefaultRoute && !isLoginRoute && this.isAuthenticated && !isLoadingMachineTechnicalWeaveSettingsFile;\n }\n\n public canShowMobileNavigation(): boolean {\n return this.isPhone() && this.isAuthenticated && !this.router.url.startsWith(RouteUtils.paths.login.absolutePath);\n }\n\n public toggleSideNav(): void {\n this.sideNavigationState.getCurrentNavigationState() === NavigationState.OPEN ? this.sideNavigationState.changeNavigationStateToClosed() : this.sideNavigationState.changeNavigationStateToOpen();\n }\n\n public getSideNavStateIcon(): string {\n return this.isSideNavCollapsed() ? 'chevron-right' : 'chevron-left';\n }\n\n public onOpenedChange(): void {\n this.sideNavInitialized = true;\n }\n\n public isTablet(): boolean {\n return this.responsivenessViewMode.isTablet;\n }\n\n public isPhone(): boolean {\n return this.responsivenessViewMode.isPhone;\n }\n\n private showUsedBackendSnackbar(): void {\n if (this.authentication.getCurrentSubscription()?.hasPermission(Permission.ACCESS_ALL)) {\n const message = `Backend URL: ${this.backendConfiguration.getEndpoint()}`;\n this.matSnackBar.open(message, 'close', {duration: 5000});\n }\n }\n\n private updateSideNavState(): void {\n if (this.responsivenessViewMode.isPhone && this.isSideNavOpen()) {\n this.sideNavigationState.changeNavigationStateToClosed();\n }\n }\n\n private setUpIcons(): void {\n SOLID_ICONS.forEach((icon: SolidIcon) => this.iconRegistry.addSvgIcon(icon.name, this.sanitizer.bypassSecurityTrustResourceUrl(icon.path)));\n\n const icons: IconSet[] = ICONS;\n icons.forEach((iconSet: IconSet) => {\n iconSet.icons.forEach((icon: Icon) => {\n this.iconRegistry.addSvgIcon(icon.name, this.sanitizer.bypassSecurityTrustResourceUrl(icon.path));\n });\n });\n }\n\n private calculateDpi(): void {\n const div = document.createElement('div');\n div.style.height = '1in';\n div.style.width = '1in';\n div.style.top = '-100%';\n div.style.left = '-100%';\n div.style.position = 'absolute';\n\n document.body.appendChild(div);\n\n const result = div.offsetHeight;\n\n document.body.removeChild(div);\n\n this.localStorage.set('dpi', result);\n }\n\n private subscribeToApplicationUpdates(): void {\n this.updateService.checkForUpdates();\n }\n\n private reloadPage(): void {\n window.location.reload();\n }\n\n private subscribeToSubscriptionSignalr(): void {\n this.subscriptionSignalr\n .getSubscriptionCacheCleared()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.toastService.showWarning(\n {\n tapToDismiss: false,\n timeOut: 10000,\n extendedTimeOut: 10000,\n title: this.translate.instant('NEW_MACHINE_TYPE_ADDED_TOAST.TITLE'),\n message: this.translate.instant('NEW_MACHINE_TYPE_ADDED_TOAST.MESSAGE')\n },\n this.translate.instant('NEW_MACHINE_TYPE_ADDED_TOAST.BUTTON_TEXT'),\n this.reloadPage\n );\n });\n }\n\n private subscribeToApplicationUpdateApplied(): void {\n if (this.canShowNewUpdateAppliedToast()) {\n this.toastService.showNewUpdateApplied({\n tapToDismiss: false,\n timeOut: 10000,\n extendedTimeOut: 10000,\n title: this.translate.instant('NEW_UPDATE_APPLIED_TOAST.TITLE'),\n message: this.translate.instant('NEW_UPDATE_APPLIED_TOAST.MESSAGE')\n });\n }\n this.localStorage.remove('new-update-activation-timestamp');\n }\n\n private canShowNewUpdateAppliedToast(): boolean {\n let result = false;\n\n const lastNewUpdateActivationTimestampString = this.localStorage.get('new-update-activation-timestamp');\n if (!AssertionUtils.isEmpty(lastNewUpdateActivationTimestampString)) {\n const now = moment();\n const lastUpdate = moment(Number(lastNewUpdateActivationTimestampString));\n const duration = moment.duration(now.diff(lastUpdate));\n result = duration.asSeconds() <= 30;\n }\n\n return result;\n }\n\n private isSideNavOpen(): boolean {\n return this.sideNavigationState.getCurrentNavigationState() === NavigationState.OPEN;\n }\n\n private subscribeToRouterEvents(): void {\n this.router.events\n .pipe(\n filter((event: Event | RouterEvent): boolean => event instanceof NavigationStart || event instanceof NavigationEnd),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((event: RouterEvent) => {\n if (event instanceof NavigationStart) {\n this.dialog.closeAll();\n this.httpRequestManagerService.cancelPendingRequests();\n } else if (!this.responsivenessViewMode.isDesktop && event instanceof NavigationEnd && this.isSideNavOpen()) {\n this.sideNavigationState.changeNavigationStateToClosed();\n }\n });\n }\n\n private subscribeToMediaChanges(): void {\n this.responsivenessViewMode\n .observeDeviceChanges()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.updateSideNavState();\n });\n }\n\n private validateCurrentSubscription(): void {\n this.authentication.validateCurrentSubscription();\n }\n\n private checkForExperimentalLanguageUsage(): void {\n const activeLanguage = this.languageService.getActiveLanguage();\n\n if (this.languageService.isExperimentalLanguage(activeLanguage)) {\n const experimentalLanguageConfirmed = this.localStorage.get(`experimentalLanguage-${activeLanguage}`);\n if (!experimentalLanguageConfirmed) {\n this.notifyUserAboutExperimentalLanguage(activeLanguage);\n }\n }\n }\n\n private subscribeToAuthenticationChanges(): void {\n this.isAuthenticated = this.authentication.isAuthenticated();\n\n this.authentication\n .currentAuthenticatedChanges()\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n tap((authenticated: boolean) => this.authenticatedChanges(authenticated)),\n filter(() => this.isAuthenticated),\n switchMap(() => this.profile.getSubscriptions().pipe(filter((subscriptions: CompanySubscriptions) => !AssertionUtils.isNullOrUndefined(subscriptions))))\n )\n .subscribe({\n next: (companySubscriptions: CompanySubscriptions) => {\n this.companies = companySubscriptions.companies.sort((first: Company, second: Company) => first.name.localeCompare(second.name));\n this.subscriptions = companySubscriptions.subscriptions.sort((first: Subscription, second: Subscription) => first.name.localeCompare(second.name));\n\n this.navigationContext.companies = this.companies;\n this.navigationContext.subscriptions = this.subscriptions;\n },\n error: (error: BackendError) => {\n this.authentication.resetLocalStorageToDefaults();\n throw error;\n }\n });\n }\n\n private notifyUserAboutExperimentalLanguage(activeLanguage: string): void {\n const url = `${environment.helpUrl}support/tickets/new`;\n this.translate.get('PROFILE.LANGUAGE_SETTINGS.EXPERIMENTAL_LANGUAGE_CAUTION', {url}, activeLanguage).subscribe((translation: string) => {\n const toast = this.toastService.showInfo({tapToDismiss: true, timeOut: 0, message: translation});\n\n toast?.onTap.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.localStorage.set(`experimentalLanguage-${activeLanguage}`, true);\n });\n });\n }\n\n private setLoggerLevel(): void {\n if (!AssertionUtils.isNullOrUndefined(this.localStorage.get('loggerLevel'))) {\n this.logger.updateConfig({level: NgxLoggerLevel[`${this.localStorage.get('loggerLevel')}`]});\n }\n }\n\n private setBrowserInstanceId(): void {\n const browserInstanceId = UuidUtils.generateV4Uuid();\n this.backendConfiguration.setBrowserInstanceId(browserInstanceId);\n }\n\n private setUpHotjar(): void {\n if (!AssertionUtils.isNullOrUndefined(environment.siteIdHotjar)) {\n Hotjar.init(environment.siteIdHotjar, this.HOTJAR_VERSION);\n }\n }\n\n private setupApplicationInsightsLogging(): void {\n const applicationInsightsKey = this.backendConfiguration.getApplicationInsightsInstrumentationKey();\n if (!AssertionUtils.isNullOrUndefined(applicationInsightsKey)) {\n this.appInsightsLoggingService.init(applicationInsightsKey);\n }\n }\n\n private authenticatedChanges(authenticated: boolean): void {\n this.isAuthenticated = authenticated;\n this.changeDetectorRef.detectChanges();\n this.showUsedBackendSnackbar();\n if (authenticated) {\n this.subscribeToSubscriptionSignalr();\n }\n }\n\n private resetSwitchingSubscriptions(): void {\n this.navigationService.removeIsSwitchingSubscription();\n }\n}\n","import {AfterViewInit, Component, ElementRef, OnInit, ViewChild} from '@angular/core';\nimport {ApplicationLayoutService, AssertionUtils, BaseComponent, LocalStorageService, ResizeElementDirective} from '@vdw/angular-component-library';\nimport {takeUntil} from 'rxjs';\nimport {AppComponent} from '../../../app.component';\n\n@Component({\n selector: 'app-navigation-resizer',\n templateUrl: './navigation-resizer.component.html',\n styleUrls: ['./navigation-resizer.component.scss']\n})\nexport class NavigationResizerComponent extends BaseComponent implements OnInit, AfterViewInit {\n @ViewChild('resizer') public resizer: ElementRef;\n @ViewChild(ResizeElementDirective) public resizeDirective: ResizeElementDirective;\n\n public readonly SIDEBAR_MIN_WIDTH = 240;\n public readonly SIDEBAR_MAX_WIDTH = 600;\n\n private cachedResizeValue: number;\n private cachedSidebarWidth: number;\n private drawerElement: HTMLElement;\n private drawerContent: HTMLElement;\n\n public constructor(\n private readonly appComponent: AppComponent,\n private readonly localStorage: LocalStorageService,\n public readonly applicationLayoutService: ApplicationLayoutService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.appComponent.drawerInitialized.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => this.init());\n }\n\n public ngAfterViewInit(): void {\n this.appComponent.resizeDirective = this.resizeDirective;\n }\n\n public init(): void {\n if (!AssertionUtils.isNullOrUndefined(this.applicationLayoutService.matDrawer)) {\n this.drawerElement = this.applicationLayoutService.matDrawer._content.nativeElement.parentElement;\n this.drawerContent = this.applicationLayoutService.matDrawer._container?._content?.getElementRef()?.nativeElement;\n\n this.cachedSidebarWidth = this.localStorage.get('sidebar-width') ?? this.SIDEBAR_MIN_WIDTH;\n this.localStorage.set('sidebar-width', this.cachedSidebarWidth);\n\n if (!AssertionUtils.isNullOrUndefined(this.drawerElement)) {\n this.drawerElement.style.width = `${this.cachedSidebarWidth}px`;\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.resizer)) {\n this.resizer.nativeElement.style.left = `${this.cachedSidebarWidth - this.resizer.nativeElement.clientWidth / 2}px`;\n }\n\n if (!this.isSideNavCollapsed() && !AssertionUtils.isNullOrUndefined(this.drawerContent)) {\n this.drawerContent.style.marginLeft = `${this.cachedSidebarWidth}px`;\n }\n }\n }\n\n public onResize(event: MouseEvent): void {\n this.cachedResizeValue = event.x;\n if (!AssertionUtils.isNullOrUndefined(this.drawerElement)) {\n this.drawerElement.style.width = `${event.x}px`;\n this.drawerContent.style.marginLeft = `${event.x}px`;\n }\n this.resizer.nativeElement.style.left = `${event.x - this.resizer.nativeElement.clientWidth / 2}px`;\n\n event.stopPropagation();\n }\n\n public onResizeEnd(): void {\n if (this.cachedSidebarWidth !== this.cachedResizeValue && !AssertionUtils.isNullOrUndefined(this.cachedResizeValue)) {\n this.cachedSidebarWidth = this.cachedResizeValue;\n this.localStorage.set('sidebar-width', this.cachedResizeValue);\n }\n }\n\n public resizeEntered(): void {\n this.applicationLayoutService.resizeHovered = true;\n }\n\n public resizeLeft(): void {\n this.applicationLayoutService.resizeHovered = false;\n }\n\n public isSideNavCollapsed(): boolean {\n return this.appComponent.isSideNavCollapsed();\n }\n}\n","\n","import {HTTP_INTERCEPTORS} from '@angular/common/http';\nimport {APP_INITIALIZER, ErrorHandler, INJECTOR, NgModule} from '@angular/core';\nimport {provideLuxonDateAdapter} from '@angular/material-luxon-adapter';\nimport {MAT_RIPPLE_GLOBAL_OPTIONS} from '@angular/material/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {MAT_FORM_FIELD_DEFAULT_OPTIONS} from '@angular/material/form-field';\nimport {BrowserModule} from '@angular/platform-browser';\nimport {BrowserAnimationsModule} from '@angular/platform-browser/animations';\nimport {ActivatedRouteSnapshot, Router, RouteReuseStrategy, RouterModule} from '@angular/router';\nimport {ServiceWorkerModule} from '@angular/service-worker';\nimport {GetPossiblePropertyValuesOfList} from '@application/command/get-possible-property-values-of-list';\nimport {BackendConfiguration} from '@application/configuration/backend-configuration';\nimport {HttpRuntimeApplicationEnvironmentService} from '@application/configuration/http-runtime-application-environment.service';\nimport {\n initializeApplicationEnvironment,\n initializeGridOptionsBuilderFactory,\n InitializeL10n,\n initializeMSALInstance,\n initializeMSALInterceptorConfig,\n initializeNavigationHistory,\n initializeSignalrHubConnectionFactory\n} from '@application/configuration/initialize-application';\nimport {RUNTIME_APPLICATION_ENVIRONMENT} from '@application/configuration/runtime-application-environment';\nimport {ErrorMessageHelper} from '@application/helper/error-message-helper';\nimport {CustomRouteReuseStrategy} from '@application/helper/routing/custom-route-reuse-strategy';\nimport {RouteUtils} from '@application/helper/routing/route-utils';\nimport {NavigationHistoryService} from '@application/navigation-history/navigation-history.service';\nimport {BadgeLabelPipe} from '@application/pipes/badge-label.pipe';\nimport {\n MSAL_GUARD_CONFIG,\n MSAL_INSTANCE,\n MSAL_INTERCEPTOR_CONFIG,\n MsalBroadcastService,\n MsalGuardConfiguration,\n MsalInterceptor,\n MsalModule,\n MsalRedirectComponent,\n MsalService\n} from '@azure/msal-angular';\nimport {InteractionType} from '@azure/msal-browser';\nimport {environment} from '@environments/environment';\nimport {AUTHENTICATION} from '@infrastructure/http/authentication/authentication';\nimport {HttpAuthenticationService} from '@infrastructure/http/authentication/http-authentication.service';\nimport {BACKGROUND_JOBS} from '@infrastructure/http/background-jobs/background-jobs';\nimport {HttpBackgroundJobsService} from '@infrastructure/http/background-jobs/http-background-jobs.service';\nimport {DRAWINGS} from '@infrastructure/http/drawing/drawings';\nimport {HttpDrawingsService} from '@infrastructure/http/drawing/http-drawings.service';\nimport {HttpGridSettingsService} from '@infrastructure/http/grid-settings/http-grid-settings.service';\nimport {InterceptedHttp} from '@infrastructure/http/intercepted.http';\nimport {HttpProfileService} from '@infrastructure/http/profile/http-profile.service';\nimport {PROFILE} from '@infrastructure/http/profile/profile';\nimport {ONBOARDING} from '@infrastructure/onboarding/onboarding';\nimport {OnboardingService} from '@infrastructure/onboarding/onboarding.service';\nimport {SIGNALR_EVENT} from '@infrastructure/signalr/events/signalr-event.interface';\nimport {SignalrEventService} from '@infrastructure/signalr/events/signalr-event.service';\nimport {REALTIME_BACKGROUND_JOBS} from '@infrastructure/signalr/jobs/realtime-background-jobs';\nimport {SignalrBackgroundJobService} from '@infrastructure/signalr/jobs/signalr-background-job.service';\nimport {SignalrMachineService} from '@infrastructure/signalr/machine/signalr-machine.service';\nimport {REALTIME_SUBSCRIPTIONS} from '@infrastructure/signalr/subscription/realtime-subscriptions';\nimport {SignalrSubscriptionService} from '@infrastructure/signalr/subscription/signalr-subscription.service';\nimport {ConnectivityToastModule} from '@presentation/components/connectivity-toast/connectivity-toast.module';\nimport {LoggerComponent} from '@presentation/components/logger/logger.component';\nimport {NewUpdateAvailableComponent} from '@presentation/components/new-update-available/new-update-available.component';\nimport {AccountSwitcherDialogComponent} from '@presentation/navigation/account-switcher-dialog/account-switcher-dialog.component';\nimport {MobileNavigationSidebarComponent} from '@presentation/navigation/mobile-navigation/mobile-navigation-sidebar.component';\nimport {NavigationMobileComponent} from '@presentation/navigation/mobile-navigation/navigation-mobile.component';\nimport {NavigationBreadcrumbsComponent} from '@presentation/navigation/navigation-breadcrumbs/navigation-breadcrumbs.component';\nimport {NavigationComponent} from '@presentation/navigation/navigation-component/navigation.component';\nimport {NavigationHeaderComponent} from '@presentation/navigation/navigation-header/navigation-header.component';\nimport {NavigationHoverAreaComponent} from '@presentation/navigation/navigation-hover-area/navigation-hover-area.component';\nimport {NavigationResizerComponent} from '@presentation/navigation/navigation-resizer/navigation-resizer.component';\nimport {NotificationsModule} from '@presentation/pages/notifications/notifications.module';\nimport {NotificationsService} from '@presentation/pages/notifications/notifications.service';\nimport {UnauthorizedPageComponent} from '@presentation/pages/status-codes/401/unauthorized-page.component';\nimport {NotFoundPageComponent} from '@presentation/pages/status-codes/404/not-found-page.component';\nimport {SharedModule} from '@shared/shared.module';\nimport {\n AccountSwitchModule,\n ApplicationLayoutModule,\n ENVIRONMENT,\n GlobalErrorHandler,\n GridOptionsBuilderFactoryService,\n LanguageService,\n MenuTreeViewModule,\n ProgressSpinnerModule,\n ReloadRequiredModule,\n ResizeElementModule,\n SignalrHubConnectionFactoryService,\n SignalrLogger,\n TranslateService,\n TranslationHandler,\n TranslationLoader,\n WINDOW_PROVIDERS\n} from '@vdw/angular-component-library';\nimport {L10nIntlModule, L10nTranslationModule} from 'angular-l10n';\nimport {map} from 'lodash-es';\nimport {INGXLoggerConfig, LoggerModule, NgxLoggerLevel} from 'ngx-logger';\nimport {AppComponent} from './app.component';\nimport {externalUrlProvider, routes} from './app.routing';\n\nconst loggerConfig: INGXLoggerConfig = {\n level: environment.production ? NgxLoggerLevel.WARN : NgxLoggerLevel.TRACE,\n serverLogLevel: NgxLoggerLevel.OFF\n};\n\n@NgModule({\n declarations: [\n LoggerComponent,\n AppComponent,\n MobileNavigationSidebarComponent,\n NavigationComponent,\n NavigationMobileComponent,\n NavigationHeaderComponent,\n NavigationBreadcrumbsComponent,\n AccountSwitcherDialogComponent,\n UnauthorizedPageComponent,\n NotFoundPageComponent,\n NewUpdateAvailableComponent,\n BadgeLabelPipe,\n NavigationHoverAreaComponent,\n NavigationResizerComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n RouterModule.forRoot(routes, {onSameUrlNavigation: 'reload'}),\n L10nIntlModule,\n L10nTranslationModule.forRoot(\n {\n format: 'language',\n defaultLocale: {language: LanguageService.DEFAULT_LANGUAGE},\n keySeparator: '.',\n providers: [{name: 'app', asset: './assets/i18n'}],\n schema: map(LanguageService.AVAILABLE_LANGUAGES, (language: string) => {\n return {locale: {language}};\n })\n },\n {\n loader: InitializeL10n,\n translationLoader: TranslationLoader,\n translationHandler: TranslationHandler\n }\n ),\n ReloadRequiredModule,\n SharedModule,\n ServiceWorkerModule.register('ngsw-worker.js', {enabled: environment.production || environment.development}),\n ConnectivityToastModule,\n LoggerModule.forRoot(loggerConfig),\n NotificationsModule,\n MenuTreeViewModule,\n AccountSwitchModule,\n ApplicationLayoutModule,\n MsalModule,\n ResizeElementModule,\n ProgressSpinnerModule\n ],\n providers: [\n {provide: ErrorHandler, useClass: GlobalErrorHandler},\n {provide: RouteReuseStrategy, useClass: CustomRouteReuseStrategy},\n {provide: RUNTIME_APPLICATION_ENVIRONMENT, useClass: HttpRuntimeApplicationEnvironmentService},\n {provide: PROFILE, useClass: HttpProfileService},\n {provide: SIGNALR_EVENT, useClass: SignalrEventService},\n {provide: ONBOARDING, useClass: OnboardingService},\n {provide: BACKGROUND_JOBS, useClass: HttpBackgroundJobsService},\n {provide: REALTIME_BACKGROUND_JOBS, useClass: SignalrBackgroundJobService},\n {provide: REALTIME_SUBSCRIPTIONS, useClass: SignalrSubscriptionService},\n {provide: DRAWINGS, useClass: HttpDrawingsService},\n {provide: MAT_DIALOG_DATA, useValue: {}},\n GetPossiblePropertyValuesOfList,\n BackendConfiguration,\n SignalrMachineService,\n SignalrSubscriptionService,\n ErrorMessageHelper,\n NotificationsService,\n NavigationHistoryService,\n {\n provide: externalUrlProvider,\n useValue: (route: ActivatedRouteSnapshot): void => {\n const externalUrl = route.data['externalUrl'];\n window.open(externalUrl, '_blank');\n }\n },\n WINDOW_PROVIDERS,\n {\n provide: APP_INITIALIZER,\n useFactory: initializeApplicationEnvironment,\n multi: true,\n deps: [RUNTIME_APPLICATION_ENVIRONMENT, INJECTOR]\n },\n {\n provide: APP_INITIALIZER,\n useFactory: initializeNavigationHistory,\n multi: true\n },\n {\n provide: MAT_RIPPLE_GLOBAL_OPTIONS,\n useValue: {disabled: true, animation: {enterDuration: 0, exitDuration: 0}, centered: true}\n },\n {provide: ENVIRONMENT, useValue: environment},\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {floatLabel: 'always'}\n },\n {\n provide: MSAL_INTERCEPTOR_CONFIG,\n useFactory: initializeMSALInterceptorConfig,\n deps: [BackendConfiguration]\n },\n {\n provide: MSAL_INSTANCE,\n useFactory: initializeMSALInstance,\n deps: [BackendConfiguration]\n },\n {\n provide: MSAL_GUARD_CONFIG,\n useValue: {interactionType: InteractionType.Redirect, loginFailedRoute: RouteUtils.paths.login.absolutePath} as MsalGuardConfiguration\n },\n MsalService,\n MsalBroadcastService,\n {\n provide: HTTP_INTERCEPTORS,\n useClass: MsalInterceptor,\n multi: true\n },\n {provide: AUTHENTICATION, useClass: HttpAuthenticationService},\n {\n provide: HTTP_INTERCEPTORS,\n useClass: InterceptedHttp,\n multi: true\n },\n {\n provide: SignalrHubConnectionFactoryService,\n useFactory: initializeSignalrHubConnectionFactory,\n deps: [BackendConfiguration, MsalService, SignalrLogger]\n },\n {\n provide: GridOptionsBuilderFactoryService,\n useFactory: initializeGridOptionsBuilderFactory,\n deps: [TranslateService, Router, HttpGridSettingsService]\n },\n provideLuxonDateAdapter()\n ],\n bootstrap: [AppComponent, MsalRedirectComponent]\n})\nexport class AppModule {}\n","import {enableProdMode} from '@angular/core';\nimport {platformBrowserDynamic} from '@angular/platform-browser-dynamic';\nimport {AG_GRID_LICENSE_KEY} from '@application/configuration/license-keys';\nimport {environment} from '@environments/environment';\nimport {LicenseManager} from 'ag-grid-enterprise';\nimport {AppModule} from './app/app.module';\n\nif (environment.production) {\n enableProdMode();\n}\n\nLicenseManager.setLicenseKey(AG_GRID_LICENSE_KEY);\n\nplatformBrowserDynamic()\n .bootstrapModule(AppModule, {ngZoneEventCoalescing: true, ngZoneRunCoalescing: true})\n .then(() => {\n if ('serviceWorker' in navigator && environment.production) {\n navigator.serviceWorker.register('ngsw-worker.js');\n }\n })\n // eslint-disable-next-line no-console\n .catch((err: Error) => console.log(err));\n","export const AG_GRID_LICENSE_KEY =\n 'Using_this_{AG_Grid}_Enterprise_key_{AG-068100}_in_excess_of_the_licence_granted_is_not_permitted___Please_report_misuse_to_legal@ag-grid.com___For_help_with_changing_this_key_please_contact_info@ag-grid.com___{Vandewiele}_is_granted_a_{Multiple_Applications}_Developer_License_for_{1}_Front-End_JavaScript_developer___All_Front-End_JavaScript_developers_need_to_be_licensed_in_addition_to_the_ones_working_with_{AG_Grid}_Enterprise___This_key_has_been_granted_a_Deployment_License_Add-on_for_{1}_Production_Environment___This_key_works_with_{AG_Grid}_Enterprise_versions_released_before_{2_December_2025}____[v3]_[01]_MTc2NDYzMzYwMDAwMA==b491797fe9edee8f5688a30a36291954';\n","/* eslint-disable @typescript-eslint/naming-convention */\nexport enum Language {\n en = 'English',\n nl = 'Nederlands',\n tr = 'Türkçe',\n zh = '中文'\n}\n","import {Injectable} from '@angular/core';\nimport {DateAdapter} from '@angular/material/core';\nimport {includes, map} from 'lodash-es';\nimport {Settings} from 'luxon';\nimport {moment} from '../../common/moment';\nimport {EnumUtils} from '../../common/utils/enum-utils';\nimport {LocalStorageService} from '../../custom-services/local-storage.service/local-storage.service';\nimport {TranslateService} from '../translate.service';\nimport {Language} from './language.enum';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LanguageService {\n public static readonly AVAILABLE_LANGUAGES: string[] = EnumUtils.getEnumNames(Language);\n public static readonly LOCAL_STORAGE_KEY = 'language';\n public static readonly LOCAL_STORAGE_KEY_REGION = 'region';\n public static readonly DEFAULT_LANGUAGE: string = EnumUtils.getKeyFromValue(Language, Language.en);\n private static readonly EXPERIMENTAL_LANGUAGES = [EnumUtils.getKeyFromValue(Language, Language.tr), EnumUtils.getKeyFromValue(Language, Language.zh)];\n private static readonly REGIONS = [\n 'ar-SA',\n 'bn-BD',\n 'bn-IN',\n 'cs-CZ',\n 'da-DK',\n 'de-AT',\n 'de-CH',\n 'de-DE',\n 'el-GR',\n 'en-AU',\n 'en-CA',\n 'en-GB',\n 'en-IE',\n 'en-IN',\n 'en-NZ',\n 'en-US',\n 'en-ZA',\n 'es-AR',\n 'es-CL',\n 'es-CO',\n 'es-ES',\n 'es-MX',\n 'es-US',\n 'fi-FI',\n 'fr-BE',\n 'fr-CA',\n 'fr-CH',\n 'fr-FR',\n 'he-IL',\n 'hi-IN',\n 'hu-HU',\n 'id-ID',\n 'it-CH',\n 'it-IT',\n 'ja-JP',\n 'ko-KR',\n 'nl-BE',\n 'nl-NL',\n 'no-NO',\n 'pl-PL',\n 'pt-BR',\n 'pt-PT',\n 'ro-RO',\n 'ru-RU',\n 'sk-SK',\n 'sv-SE',\n 'ta-IN',\n 'ta-LK',\n 'th-TH',\n 'tr-TR',\n 'zh-CN',\n 'zh-HK',\n 'zh-TW'\n ];\n\n public constructor(\n private readonly translate: TranslateService,\n private readonly localStorage: LocalStorageService,\n private readonly dateAdapter: DateAdapter\n ) {}\n\n public initialize(): Promise {\n let storedLanguage: string = this.localStorage.get(LanguageService.LOCAL_STORAGE_KEY);\n let storedRegion: string = this.localStorage.get(LanguageService.LOCAL_STORAGE_KEY_REGION);\n if (!storedLanguage) {\n storedLanguage = LanguageService.DEFAULT_LANGUAGE;\n this.localStorage.set(LanguageService.LOCAL_STORAGE_KEY, storedLanguage);\n }\n if (!storedRegion) {\n storedRegion = 'en-GB';\n this.localStorage.set(LanguageService.LOCAL_STORAGE_KEY_REGION, storedRegion);\n }\n\n moment.locale(storedLanguage);\n Settings.defaultLocale = storedRegion;\n this.dateAdapter.setLocale(storedRegion);\n\n return this.setLanguage(storedLanguage);\n }\n\n public changeLanguage(language: string): Promise {\n this.localStorage.set(LanguageService.LOCAL_STORAGE_KEY, language);\n moment.locale(language);\n return this.setLanguage(language);\n }\n\n public changeRegion(region: string): Promise {\n this.localStorage.set(LanguageService.LOCAL_STORAGE_KEY_REGION, region);\n Settings.defaultLocale = region;\n this.dateAdapter.setLocale(region);\n return Promise.resolve();\n }\n\n public getActiveLanguage(): string {\n return this.translate.getLocale().language;\n }\n\n public getActiveRegion(): string {\n return Settings.defaultLocale;\n }\n\n public getAvailableLanguages(): {key: string; label: string}[] {\n return map(LanguageService.AVAILABLE_LANGUAGES, (availableLanguageKey: string) => {\n return {\n key: availableLanguageKey,\n label: Language[availableLanguageKey]\n };\n });\n }\n\n public getAvailableRegions(): {key: string; displayName: string}[] {\n let languageNames = new Intl.DisplayNames(['en'], {type: 'language', languageDisplay: 'standard'});\n return LanguageService.REGIONS.map((region: string) => {\n return {key: region, displayName: languageNames.of(region)};\n }).sort((a: {key: string; displayName: string}, b: {key: string; displayName: string}) => a.displayName.localeCompare(b.displayName));\n }\n\n public isExperimentalLanguage(language: string): boolean {\n return includes(LanguageService.EXPERIMENTAL_LANGUAGES, language);\n }\n\n private setLanguage(language: string): Promise {\n return this.translate.setLocale({language});\n }\n}\n","import {Injectable} from '@angular/core';\nimport {L10nTranslationHandler} from 'angular-l10n/lib/services/l10n-translation-handler';\n\n@Injectable()\nexport class TranslationHandler implements L10nTranslationHandler {\n public parseValue(key: string, params: any, value: any): string | any {\n if (params) {\n value = value.replace(/{\\s?([^{}\\s]*)\\s?}/g, (substring: string, parsedKey: string) => {\n const replacer = params[parsedKey];\n return replacer !== undefined ? replacer : substring;\n });\n }\n return value;\n }\n}\n","import {HttpBackend, HttpClient, HttpHeaders, HttpParams} from '@angular/common/http';\nimport {Injectable} from '@angular/core';\nimport {L10nProvider, L10nTranslationLoader} from 'angular-l10n';\nimport {Observable} from 'rxjs';\n\n@Injectable()\nexport class TranslationLoader implements L10nTranslationLoader {\n private static readonly headers = new HttpHeaders({'Content-Type': 'application/json'});\n private readonly httpClient: HttpClient;\n\n public constructor(httpHandler: HttpBackend) {\n this.httpClient = new HttpClient(httpHandler);\n }\n\n public get(language: string, provider: L10nProvider): Observable<{[key: string]: any}> {\n const url = `${provider.asset}/${language}.json`;\n const options = {\n headers: TranslationLoader.headers,\n params: new HttpParams()\n };\n return this.httpClient.get(url, options);\n }\n}\n","import {Conflict} from '../../common/data/conflict';\n\nexport class ConflictsDialogData {\n private readonly _titleKey: string;\n private readonly _descriptionKey: string;\n private readonly _entityType: string;\n private readonly _entityName: string | string[];\n private readonly _conflicts: Conflict[] | Conflict[][];\n private readonly _conflictType: any;\n private readonly _allowUnlock: boolean;\n private readonly _currentSubscription: any;\n\n public constructor(\n titleKey: string,\n descriptionKey: string,\n entityType: string,\n entityName: string | string[],\n conflicts: Conflict[] | Conflict[][],\n conflictType: any = null,\n allowUnlock: boolean = false,\n currentSubscription?: any\n ) {\n this._titleKey = titleKey;\n this._descriptionKey = descriptionKey;\n this._entityType = entityType;\n this._entityName = entityName;\n this._conflicts = conflicts;\n this._conflictType = conflictType;\n this._allowUnlock = allowUnlock;\n this._currentSubscription = currentSubscription;\n }\n\n public static createCannotDeleteData(entityType: string, entityName: string | string[], conflicts: Conflict[] | Conflict[][], conflictType: any, currentSubscription?: any): ConflictsDialogData {\n return new ConflictsDialogData('GENERAL.ACTIONS.DELETE_OBJECT', 'CONFLICTS.DIALOG.CANNOT_BE_DELETED', entityType, entityName, conflicts, conflictType, false, currentSubscription);\n }\n\n public static createInUseData(entityType: string, entityName: string, conflicts: Conflict[], conflictType: any, currentSubscription?: any): ConflictsDialogData {\n return new ConflictsDialogData('CONFLICTS.DIALOG.IN_USE', 'CONFLICTS.DIALOG.USED_BY', entityType, entityName, conflicts, conflictType, false, currentSubscription);\n }\n\n public static createUnlockData(entityType: string, entityName: string, conflicts: Conflict[], conflictType: any, currentSubscription?: any): ConflictsDialogData {\n return new ConflictsDialogData('CONFLICTS.DIALOG.IN_USE', 'CONFLICTS.DIALOG.USED_BY', entityType, entityName, conflicts, conflictType, true, currentSubscription);\n }\n\n public get titleKey(): string {\n return this._titleKey;\n }\n\n public get descriptionKey(): string {\n return this._descriptionKey;\n }\n\n public get entityType(): string {\n return this._entityType;\n }\n\n public get entityName(): string | string[] {\n return this._entityName;\n }\n\n public get conflicts(): Conflict[] | Conflict[][] {\n return this._conflicts;\n }\n\n public get conflictType(): any {\n return this._conflictType;\n }\n\n public get allowUnlock(): boolean {\n return this._allowUnlock;\n }\n\n public get currentSubscription(): any {\n return this._currentSubscription;\n }\n}\n","
\n \n \n
\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {Router} from '@angular/router';\nimport {Conflict} from '../../common/data/conflict';\nimport {WINDOW} from '../../window/window.service';\nimport {ConflictsDialogData} from './conflicts-dialog-data';\n\n@Component({\n templateUrl: './conflicts-dialog.component.html',\n styleUrls: ['./conflicts-dialog.component.scss']\n})\nexport class ConflictsDialogComponent {\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: ConflictsDialogData,\n private readonly router: Router,\n @Inject(WINDOW) private readonly window: Window\n ) {}\n\n public getConflictTypeTranslationKey(type: string): string {\n return this.data.conflictType.getTranslationKeyForConflictType(type);\n }\n\n public hasMultipleConflicts(): boolean {\n return Array.isArray(this.data.entityName);\n }\n\n public getTitleCount(): number {\n return this.hasMultipleConflicts() ? 2 : 1;\n }\n\n public navigateToConflictUrl(conflict: Conflict): void {\n const conflictUrl = this.data.conflictType.getPathForConflictType(conflict, this.router, this.data?.currentSubscription);\n\n this.window.open(conflictUrl);\n }\n\n public getButtonText(): string {\n return this.data.allowUnlock ? 'CONFLICTS.UNLOCK' : 'GENERAL.OK';\n }\n\n public getChooseDialogCloseValue(): boolean {\n return this.data.allowUnlock ? true : undefined;\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {RouterModule} from '@angular/router';\nimport {TranslationModule} from '../translation/translation.module';\nimport {InvalidFormMessageComponent} from './invalid-form-message/invalid-form-message.component';\n\n@NgModule({\n imports: [CommonModule, TranslationModule, MatIconModule, MatFormFieldModule, FlexLayoutModule, RouterModule],\n exports: [InvalidFormMessageComponent],\n declarations: [InvalidFormMessageComponent],\n providers: []\n})\nexport class CommonFormsModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {CommonFormsModule} from '../../forms/common-forms.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ProgressButtonComponent} from './progress-button.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, MatToolbarModule, MatButtonModule, TranslationModule, MatDialogModule, CommonFormsModule, MatProgressSpinnerModule],\n exports: [ProgressButtonComponent],\n declarations: [ProgressButtonComponent]\n})\nexport class ProgressButtonModule {}\n","import {NgModule} from '@angular/core';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {ProgressSpinnerComponent} from './progress-spinner.component';\n\n@NgModule({\n imports: [MatProgressSpinnerModule],\n exports: [ProgressSpinnerComponent],\n declarations: [ProgressSpinnerComponent]\n})\nexport class ProgressSpinnerModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ProgressSpinnerModule} from '../progress-spinner/progress-spinner.module';\nimport {SplitButtonComponent} from './split-button.component';\n\n@NgModule({\n declarations: [SplitButtonComponent],\n imports: [CommonModule, MatButtonModule, MatDividerModule, MatIconModule, MatMenuModule, TranslationModule, ProgressSpinnerModule],\n exports: [SplitButtonComponent]\n})\nexport class SplitButtonModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ProgressButtonModule} from '../progress-button/progress-button.module';\nimport {FooterComponent} from './footer.component';\nimport {SplitButtonModule} from '../split-button/split-button.module';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, MatToolbarModule, MatButtonModule, MatMenuModule, TranslationModule, MatDialogModule, ProgressButtonModule, SplitButtonModule],\n exports: [FooterComponent],\n declarations: [FooterComponent]\n})\nexport class FooterModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {EllipsisLabelComponent} from './ellipsis-label.component';\n\n@NgModule({\n imports: [CommonModule, MatTooltipModule],\n exports: [EllipsisLabelComponent],\n declarations: [EllipsisLabelComponent]\n})\nexport class LabelModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatCardModule, MAT_CARD_CONFIG} from '@angular/material/card';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {CommonFormsModule} from '../../forms/common-forms.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {ProgressButtonModule} from '../progress-button/progress-button.module';\nimport {HeaderComponent} from './header.component';\n\n@NgModule({\n declarations: [HeaderComponent],\n imports: [\n CommonModule,\n FlexLayoutModule,\n TranslationModule,\n LabelModule,\n ProgressButtonModule,\n CommonFormsModule,\n MatIconModule,\n MatCardModule,\n MatButtonModule,\n MatMenuModule,\n MatDialogModule,\n ProgressButtonModule,\n CommonFormsModule,\n MatDividerModule,\n MatTooltipModule\n ],\n exports: [HeaderComponent],\n providers: [\n {\n provide: MAT_CARD_CONFIG,\n useValue: {\n appearance: 'outlined'\n }\n }\n ]\n})\nexport class HeaderModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatIconModule} from '@angular/material/icon';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {MessageContainerComponent} from './message-container.component';\n\n@NgModule({\n declarations: [MessageContainerComponent],\n imports: [CommonModule, MatIconModule, FlexLayoutModule, LabelModule],\n exports: [MessageContainerComponent]\n})\nexport class MessageContainerModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {CanShowErrorForFormControlDirective} from './can-show-error-for-form-control.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [CanShowErrorForFormControlDirective],\n exports: [CanShowErrorForFormControlDirective]\n})\nexport class CanShowErrorForFormControlModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\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 {MatSelectModule} from '@angular/material/select';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {AgGridModule} from 'ag-grid-angular';\nimport {FooterModule} from '../custom-components/footer/footer.module';\nimport {HeaderModule} from '../custom-components/header/header.module';\nimport {MessageContainerModule} from '../custom-components/message-container/message-container.module';\nimport {CanShowErrorForFormControlModule} from '../custom-directives/can-show-error-for-context/can-show-error-for-form-control.module';\nimport {TranslationModule} from '../translation/translation.module';\nimport {WINDOW_PROVIDERS} from '../window/window.service';\nimport {AlertDialogComponent} from './alert-dialog/alert-dialog.component';\nimport {ConflictsDialogComponent} from './conflicts-dialog/conflicts-dialog.component';\nimport {DialogBuilderFactoryService} from './dialog-builder/dialog-builder-factory.service';\nimport {DialogOpenerService} from './dialog-opener/dialog-opener.service';\nimport {RepositionWatchDialogFactoryService} from './dialog-reposition/reposition-watch-dialog-factory.service';\nimport {HoverDialogBuilderService} from './hover-dialog/hover-dialog-builder.service';\nimport {SelectObjectsDialogComponent} from './select-objects-dialog/select-objects-dialog.component';\n\n@NgModule({\n declarations: [AlertDialogComponent, SelectObjectsDialogComponent, ConflictsDialogComponent],\n imports: [\n AgGridModule,\n MatDialogModule,\n MatButtonModule,\n MatIconModule,\n MatInputModule,\n MatTooltipModule,\n FlexLayoutModule,\n MatFormFieldModule,\n FormsModule,\n ReactiveFormsModule,\n TranslationModule,\n CommonModule,\n MatSelectModule,\n FooterModule,\n HeaderModule,\n CanShowErrorForFormControlModule,\n MessageContainerModule\n ],\n providers: [DialogBuilderFactoryService, HoverDialogBuilderService, DialogOpenerService, RepositionWatchDialogFactoryService, WINDOW_PROVIDERS],\n exports: [AlertDialogComponent, SelectObjectsDialogComponent]\n})\nexport class DialogModule {}\n","import {StringUtils} from '../utils/string-utils';\nimport {MessageType} from './message-type.enum';\n\nexport class Message {\n private _title: string;\n private _description: string;\n private _type: MessageType;\n private _timestamp: Date;\n\n public constructor(title: string, description: string, type: MessageType, timestamp: Date) {\n this._title = title;\n this._description = description;\n this._type = type;\n this._timestamp = timestamp;\n }\n\n public get title(): string {\n return this._title;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public get type(): MessageType {\n return this._type;\n }\n\n public get timestamp(): Date {\n return this._timestamp;\n }\n\n public static fromJSON(message: any): Message {\n return new Message(message.title, message.description, MessageType.getMessageTypeByLabel(message.type), StringUtils.toDate(message.timestamp));\n }\n\n public static createErrorMessageWithDescription(description: string): Message {\n return this.createMessageWithTypeAndDescription(MessageType.ERROR, description);\n }\n\n public static createMessageWithTypeAndDescription(type: MessageType, description: string): Message {\n return new Message(null, description, type, null);\n }\n}\n","export enum ObjectActionType {\n EDIT = 'EDIT',\n CREATE = 'CREATE',\n SAVE = 'SAVE',\n DELETE = 'DELETE'\n}\n","export enum VisibleContentForSelectAddObject {\n SELECT_OBJECT,\n ADD_OBJECT\n}\n","import {Injectable} from '@angular/core';\nimport {ActiveToast, ToastrService} from 'ngx-toastr';\nimport {ToastParams} from '../toast-params.interface';\nimport {TranslateService} from './../../../translation/translate.service';\n\n@Injectable({providedIn: 'root'})\nexport class ToastService {\n private readonly POSITION_CLASS = 'toast-bottom-right';\n\n public constructor(\n private readonly toastService: ToastrService,\n private readonly translateService: TranslateService\n ) {}\n\n public showInfo(params: ToastParams, buttonText?: string, action?: () => void): ActiveToast {\n return this.show(params, 'info', 'info', buttonText, action);\n }\n\n public showError(params: ToastParams, buttonText?: string, action?: () => void): ActiveToast {\n return this.show(params, 'error-full-52px', 'error', buttonText, action);\n }\n\n public showWarning(params: ToastParams, buttonText?: string, action?: () => void): ActiveToast {\n return this.show(params, 'warning-full-52px', 'warning', buttonText, action);\n }\n\n public showNewUpdateApplied(params: ToastParams, buttonText?: string, action?: () => void): ActiveToast {\n return this.show(params, 'update-blue', 'info', buttonText, action);\n }\n\n private show(params: ToastParams, titleIcon: string, statusBarClass: string, buttonText?: string, action?: () => void): ActiveToast {\n const toast = this.getActive(params);\n\n toast.toastRef.componentInstance.titleIcon = titleIcon;\n toast.toastRef.componentInstance.statusBarClass = statusBarClass;\n toast.toastRef.componentInstance.action = action;\n toast.toastRef.componentInstance.buttonText = buttonText;\n\n return toast;\n }\n\n private getActive(params: ToastParams): ActiveToast {\n const {tapToDismiss, timeOut, message, title, extendedTimeOut} = params;\n\n this.toastService.toastrConfig.tapToDismiss = tapToDismiss;\n this.toastService.toastrConfig.timeOut = timeOut;\n this.toastService.toastrConfig.positionClass = this.POSITION_CLASS;\n this.toastService.toastrConfig.preventDuplicates = true;\n this.toastService.toastrConfig.resetTimeoutOnDuplicate = true;\n this.toastService.toastrConfig.newestOnTop = false;\n\n if (extendedTimeOut) {\n this.toastService.toastrConfig.extendedTimeOut = extendedTimeOut;\n }\n\n return this.toastService.show(this.translateService.instant(message), title);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ObjectActionType} from '../../../common/object-action-type.enum';\nimport {TranslateService} from '../../../translation/translate.service';\nimport {ToastService} from '../service/toast-service';\n\n@Injectable({providedIn: 'root'})\nexport class ToastHelperService {\n private readonly defaultTimeout = 2000;\n private readonly actionTypeToTranslationKeyMap = new Map([\n [ObjectActionType.EDIT, 'ANGULAR_COMPONENT_LIBRARY.TOAST_HELPER.EDITED_OBJECT'],\n [ObjectActionType.CREATE, 'ANGULAR_COMPONENT_LIBRARY.TOAST_HELPER.CREATED_OBJECT'],\n [ObjectActionType.DELETE, 'ANGULAR_COMPONENT_LIBRARY.TOAST_HELPER.DELETED_OBJECT'],\n [ObjectActionType.SAVE, 'ANGULAR_COMPONENT_LIBRARY.TOAST_HELPER.SAVED_OBJECT']\n ]);\n\n public constructor(\n private toastService: ToastService,\n private translate: TranslateService\n ) {}\n\n public showToastForObjectAction(\n actionType: ObjectActionType,\n objectTranslationKey: string,\n identifier: T,\n multiDelete: boolean = false,\n tapToDismiss: boolean = false,\n timeOut: number = this.defaultTimeout\n ): void {\n this.toastService.showInfo({\n tapToDismiss,\n timeOut,\n message: this.translate.instant(this.mapObjectActionTypeToTranslationKey(actionType), {\n object: this.translate.instant(objectTranslationKey, {count: multiDelete ? 2 : 1}),\n name: identifier\n })\n });\n }\n\n private mapObjectActionTypeToTranslationKey(actionType: string): string {\n return this.actionTypeToTranslationKeyMap.get(actionType);\n }\n}\n","import {Optional} from '@angular/core';\nimport {\n AgGridEvent,\n CellClassFunc,\n CellClassParams,\n CellClassRules,\n CellClickedEvent,\n CellDoubleClickedEvent,\n CellRendererSelectorFunc,\n CellStyleFunc,\n ColDef,\n DndSourceOnRowDragParams,\n EditableCallbackParams,\n GetQuickFilterTextParams,\n HeaderClass,\n HeaderValueGetterFunc,\n ICellRendererParams,\n ITooltipParams,\n RowDragCallback,\n RowNode,\n ValueFormatterParams,\n ValueGetterParams,\n ValueSetterParams\n} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {DateTime} from 'luxon';\nimport {forkJoin, map, Observable} from 'rxjs';\nimport {DateTimeFormat} from '../common/datetime-format.enum';\nimport {Unit} from '../common/unit.enum';\nimport {AssertionUtils} from '../common/utils/assertion-utils';\nimport {LocaleUtils} from '../common/utils/locale-utils';\nimport {StringUtils} from '../common/utils/string-utils';\nimport {DateTimePipe} from '../custom-pipes/date-time-pipe/date-time.pipe';\nimport {TranslateService} from '../translation/translate.service';\nimport {AgGridUtils} from './helper/ag-grid-utils';\nimport {MobileColDef} from './mobile-col-def.interface';\n\nexport class ColDefBuilder {\n private colDef: ColDef = {};\n\n public constructor(\n private readonly l10nIntlService: L10nIntlService,\n private readonly translate: TranslateService,\n @Optional() private readonly dateTimePipe: DateTimePipe\n ) {}\n\n public build(): ColDef {\n return this.colDef;\n }\n\n public withColId(colId: string): this {\n this.colDef.colId = colId;\n return this;\n }\n\n public withField(field: string, withTooltip: boolean = false): this {\n this.colDef.field = field;\n if (withTooltip) {\n this.colDef.tooltipField = field;\n }\n return this;\n }\n\n public withHeaderValueGetter(headerValueGetter: string | HeaderValueGetterFunc): this {\n this.colDef.headerValueGetter = headerValueGetter;\n return this;\n }\n\n public withHeaderCheckboxSelection(value: boolean = true): this {\n this.colDef.headerCheckboxSelection = value;\n return this;\n }\n\n public withHeaderName(headerName: string, count: number = 1, isNumberOf: boolean = false, unit?: string, unitCount: number = 1): this {\n const headerNameTranslation = (isNumberOf ? '# ' : '') + this.translate.instant(headerName, {count}) + (unit ? ` (${this.translate.instant(unit, {count: unitCount})})` : '');\n this.colDef.headerName = headerNameTranslation;\n this.colDef.headerTooltip = headerNameTranslation;\n return this;\n }\n\n public withoutHeaderName(): this {\n this.colDef.headerComponentParams = {\n ...this.colDef.headerComponentParams,\n showName: false\n };\n return this;\n }\n\n public withPinned(pinned: 'left' | 'right' | boolean): this {\n this.colDef.pinned = pinned;\n return this;\n }\n\n public withLockPinned(lockPinned: boolean): this {\n this.colDef.lockPinned = lockPinned;\n return this;\n }\n\n public withLockPosition(lockPosition: boolean | 'left' | 'right'): this {\n this.colDef.lockPosition = lockPosition;\n return this;\n }\n\n public withLockVisible(lockVisible: boolean = true): this {\n this.colDef.lockVisible = lockVisible;\n return this;\n }\n\n public withInitialHide(initialHide: boolean = false): this {\n this.colDef.initialHide = initialHide;\n return this;\n }\n\n public withMaxWidth(maxWidth: number): this {\n this.colDef.maxWidth = maxWidth;\n return this;\n }\n\n public withMinWidth(minWidth: number): this {\n this.colDef.minWidth = minWidth;\n return this;\n }\n\n public withWidth(width: number): this {\n this.colDef.width = width;\n return this;\n }\n\n public withHide(hide: boolean = true): this {\n this.colDef.hide = hide;\n return this;\n }\n\n public withHiddenInToolPanel(hide: boolean = true): this {\n this.colDef.suppressColumnsToolPanel = hide;\n return this;\n }\n\n public withHeaderClass(headerClass: HeaderClass): this {\n this.colDef.headerClass = headerClass;\n return this;\n }\n\n public withHeaderComponent(headerComponent: any, headerComponentParams: any = null): this {\n this.colDef.headerComponent = headerComponent;\n this.colDef.headerComponentParams = headerComponentParams;\n return this;\n }\n\n public withAutoHeaderHeight(): this {\n this.colDef.autoHeaderHeight = true;\n return this;\n }\n\n public withCellClass(cellClass: string | string[] | CellClassFunc): this {\n this.colDef.cellClass = cellClass;\n return this;\n }\n\n public withCellStyle(cellStyle: {[cssProperty: string]: string} | CellStyleFunc): this {\n this.colDef.cellStyle = cellStyle;\n return this;\n }\n\n public withCellClassRules(cellClassRules: CellClassRules): this {\n this.colDef.cellClassRules = cellClassRules;\n return this;\n }\n\n public withCellRenderer(\n cellRenderer: any,\n cellRendererParams: Partial | ((params: any) => TCellRendererParams) = null,\n autoHeight: boolean = false\n ): this {\n this.colDef.cellRenderer = cellRenderer;\n this.colDef.cellRendererParams = cellRendererParams;\n this.colDef.autoHeight = autoHeight;\n\n return this;\n }\n\n public withCellRendererSelector(cellRendererSelector: CellRendererSelectorFunc): this {\n this.colDef.cellRendererSelector = cellRendererSelector;\n return this;\n }\n\n public withEditable(editable: boolean | ((params: EditableCallbackParams) => boolean) = true, cellEditor: any = null, cellEditorParams: any = null, cellEditorPopup: boolean = false): this {\n this.withCellClassRules({\n // eslint-disable-next-line @typescript-eslint/naming-convention\n 'aggrid-editable': (params: CellClassParams) => params.column.isCellEditable(params.node),\n ['invalid']: (params: CellClassParams) => (AssertionUtils.isNullOrUndefined(params.data.errors) ? false : !!params.data.errors[params.colDef.colId])\n });\n this.withCellEditor(cellEditor, cellEditorParams, cellEditorPopup);\n this.colDef.editable = editable;\n return this;\n }\n\n public withCellEditor(cellEditor: any, cellEditorParams: any = null, cellEditorPopup: boolean = false): this {\n this.colDef.cellEditor = cellEditor;\n this.colDef.cellEditorParams = cellEditorParams;\n this.colDef.cellEditorPopup = cellEditorPopup;\n return this;\n }\n\n public withSingleClickEdit(): this {\n this.colDef.singleClickEdit = true;\n return this;\n }\n\n public withRowDragText(rowDragText: any): this {\n this.colDef.rowDragText = rowDragText;\n return this;\n }\n\n public withRowDrag(rowDrag: boolean | RowDragCallback): this {\n this.colDef.rowDrag = rowDrag;\n\n return this;\n }\n\n public withFlex(flex: number = 1): this {\n this.colDef.flex = flex;\n return this;\n }\n\n public withMobile(): this {\n (this.colDef as MobileColDef).mobile = true;\n return this;\n }\n\n public withDndSource(): this {\n this.colDef.dndSource = true;\n return this;\n }\n\n public withDndSourceOnRowDrag(dnd: (params: DndSourceOnRowDragParams) => void): this {\n this.colDef.dndSourceOnRowDrag = dnd;\n return this;\n }\n\n // Functionality\n public withRowGroup(rowGroup: boolean = true, enableRowGroup: boolean = false): this {\n this.colDef.rowGroup = rowGroup;\n this.colDef.enableRowGroup = enableRowGroup;\n return this;\n }\n\n public withShowDisabledCheckboxes(): this {\n this.colDef.showDisabledCheckboxes = true;\n return this;\n }\n\n public withSuppressHeaderMenuButton(suppressHeaderMenuButton: boolean = true): this {\n this.colDef.suppressHeaderMenuButton = suppressHeaderMenuButton;\n return this;\n }\n\n public withSuppressSizeToFit(suppressSizeToFit: boolean = true): this {\n this.colDef.suppressSizeToFit = suppressSizeToFit;\n return this;\n }\n\n public withTooltipField(tooltipField: string): this {\n this.colDef.tooltipField = tooltipField;\n return this;\n }\n\n public withTooltipFieldForHeader(headerName: string, unit?: string): this {\n const headerNameTranslation = this.translate.instant(headerName) + (unit ? ` (${this.translate.instant(unit)})` : '');\n this.colDef.headerTooltip = headerNameTranslation;\n return this;\n }\n\n public withTooltipValueGetter(tooltipValueGetter: (params: ITooltipParams) => string): this {\n this.colDef.tooltipValueGetter = tooltipValueGetter;\n return this;\n }\n\n public withValueGetter(valueGetter: string | ((params: ValueGetterParams) => any), withTooltip: boolean = false): this {\n this.colDef.valueGetter = valueGetter;\n if (withTooltip) {\n this.withTooltipValueGetter((params: ITooltipParams) => (Array.isArray(params.value) ? params.value.join(', ') : params.value));\n }\n return this;\n }\n\n public withValueFormatter(valueFormatter: string | ((params: ValueFormatterParams) => string)): this {\n this.colDef.valueFormatter = valueFormatter;\n return this;\n }\n\n public withComparator(comparator: (valueA: any, valueB: any, nodeA: RowNode, nodeB: RowNode, isInverted: boolean) => number): this {\n this.colDef.comparator = comparator;\n return this;\n }\n\n public withSortable(sortable: boolean = true): this {\n this.colDef.sortable = sortable;\n return this;\n }\n\n public withResizable(resizable: boolean = true): this {\n this.colDef.resizable = resizable;\n return this;\n }\n\n public withValueSetter(valueSetter: string | ((params: ValueSetterParams) => boolean)): this {\n this.colDef.valueSetter = valueSetter;\n return this;\n }\n\n // Event handlers\n public withOnCellClicked(onCellClicked: (event: CellClickedEvent) => void = null): this {\n const onCellClickedCombinedFunction = (event: CellClickedEvent): void => {\n this.cellClickedEvent(event);\n\n if (onCellClicked) {\n onCellClicked(event);\n }\n };\n\n return this.withOnEvent('onCellClicked', onCellClickedCombinedFunction);\n }\n\n public withOnCellDoubleClicked(onCellDoubleClicked: (event: CellDoubleClickedEvent) => void = null): this {\n const onCellDoubleClickedCombinedFunction = (event: CellDoubleClickedEvent): void => {\n this.cellClickedEvent(event);\n\n if (onCellDoubleClicked) {\n onCellDoubleClicked(event);\n }\n };\n\n return this.withOnEvent('onCellDoubleClicked', onCellDoubleClickedCombinedFunction);\n }\n\n // Additional logic\n public withInput(numeric: boolean = false): this {\n this.colDef.cellClass = numeric ? 'right' : '';\n return this.withSuppressHeaderMenuButton();\n }\n\n // Filter\n public withGetQuickFilterText(getQuickFilterText: (params: GetQuickFilterTextParams) => string): this {\n this.colDef.getQuickFilterText = getQuickFilterText;\n return this;\n }\n\n public withSetColumnFilterOnly(): this {\n this.colDef.filter = 'agSetColumnFilter';\n return this;\n }\n\n public withTextMultiFilterCellRenderer(cellRenderer: any): this {\n this.colDef.filterParams = {\n filters: [\n {\n filter: 'agTextColumnFilter',\n filterParams: {\n buttons: ['reset']\n }\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n cellRenderer,\n buttons: ['reset']\n }\n }\n ]\n };\n\n return this;\n }\n\n public withTextMultiFilter(filterValueGetter?: Observable | Observable[], conversionRate?: number, showTooltips?: boolean): this {\n this.colDef.filterParams = {\n filters: [\n {\n filter: 'agTextColumnFilter',\n filterParams: {\n buttons: ['reset']\n }\n }\n ]\n };\n\n if (!AssertionUtils.isNullOrUndefined(filterValueGetter)) {\n const values = (params: any): any => this.getPossibleValuesAsync(params, filterValueGetter, conversionRate);\n this.colDef.filterParams.filters[0].values = values;\n this.colDef.filterParams.filters.push({\n filter: 'agSetColumnFilter',\n filterParams: {\n buttons: ['reset'],\n showTooltips: showTooltips,\n values\n }\n });\n }\n\n return this;\n }\n\n public withBooleanFilter(translatedFalse: string, translatedTrue: string): this {\n this.colDef.filterParams = {\n filters: [\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n suppressSelectAll: true,\n values: [true, false],\n valueFormatter: (params: ValueFormatterParams): string => (params.value === true ? translatedTrue : translatedFalse)\n }\n }\n ]\n };\n return this;\n }\n\n public withNumericMultiFilter(\n filterValueGetter?: Observable,\n conversionRate?: number | (() => number),\n l10nIntlService?: L10nIntlService,\n valueFormatter?: (value: number) => string\n ): this {\n this.colDef.filterParams = {\n filters: [\n {\n filter: 'agNumberColumnFilter',\n filterParams: {\n buttons: ['reset']\n }\n }\n ]\n };\n\n if (!AssertionUtils.isNullOrUndefined(filterValueGetter)) {\n const values = (params: any): any => this.getPossibleValuesAsync(params, filterValueGetter, conversionRate, l10nIntlService);\n this.colDef.filterParams.filters[0].values = values;\n this.colDef.filterParams.filters.push({\n filter: 'agSetColumnFilter',\n filterParams: {\n buttons: ['reset'],\n values,\n comparator: (a: any, b: any): number => {\n const valA = parseInt(a);\n const valB = parseInt(b);\n if (valA === valB) {\n return 0;\n }\n return valA > valB ? 1 : -1;\n },\n valueFormatter: !AssertionUtils.isNullOrUndefined(valueFormatter) ? (params: ValueFormatterParams): string => valueFormatter(params.value) : undefined\n }\n });\n }\n return this;\n }\n\n public withDateMultiFilter(filterValueGetter?: Observable, conversionRate?: number): this {\n if (!this.dateTimePipe) {\n throw new Error('DateTimePipe is not provided');\n }\n\n let values: any;\n\n if (AssertionUtils.isNullOrUndefined(filterValueGetter)) {\n this.withFilterValueGetter((params: ValueGetterParams) => {\n return AssertionUtils.isNullOrUndefined(params.data[params.colDef.field]) ? null : DateTime.fromJSDate(params.data[params.colDef.field]).startOf('day').toJSDate();\n });\n } else {\n values = (params: any): any => this.getPossibleValuesAsync(params, filterValueGetter, conversionRate);\n }\n\n const filterParams = {\n values,\n valueFormatter: (params: ValueFormatterParams): string => this.dateTimePipe.transform(StringUtils.toDate(params.value), DateTimeFormat.DATE_SHORT)\n };\n\n this.colDef.filterParams = {\n filters: [\n {\n filter: 'agDateColumnFilter',\n filterParams: {\n buttons: ['reset'],\n ...filterParams\n }\n }\n ]\n };\n\n if (!AssertionUtils.isNullOrUndefined(filterValueGetter)) {\n this.colDef.filterParams.filters.push({\n filter: 'agSetColumnFilter',\n filterParams: {\n buttons: ['reset'],\n ...filterParams\n }\n });\n }\n return this;\n }\n\n public withMultiFilter(): this {\n this.colDef.filter = 'agMultiColumnFilter';\n return this;\n }\n\n public withoutFilter(): this {\n this.colDef.menuTabs = ['generalMenuTab', 'columnsMenuTab'];\n this.colDef.filter = false;\n this.colDef.floatingFilter = false;\n this.colDef.sortable = false;\n return this;\n }\n\n public withFilterValueGetter(filterValueGetter: string | ((params: ValueGetterParams) => any)): this {\n this.colDef.filterValueGetter = filterValueGetter;\n return this;\n }\n\n // Composite methods\n public withDate(showTime: boolean = false): this {\n if (!this.dateTimePipe) {\n throw new Error('DateTimePipe is not provided');\n }\n return this.withTooltipValueGetter((params: ITooltipParams) => this.dateTimePipe.transform(params.value, showTime ? DateTimeFormat.DATETIME_SHORT : DateTimeFormat.DATE_SHORT)).withCellRenderer(\n (params: ICellRendererParams) => this.dateTimePipe.transform(params.value, showTime ? DateTimeFormat.DATETIME_SHORT : DateTimeFormat.DATE_SHORT)\n );\n }\n\n public withMMConversion(unit: Unit = Unit.CENTIMETER, withUnitConversion: boolean = true, decimals?: number): this {\n return this.withCellRenderer((params: ICellRendererParams) =>\n withUnitConversion\n ? AgGridUtils.buildAgGridCellTextWithUnitConversion(params.getValue(), Unit.MILLIMETER, unit, this.l10nIntlService, decimals)\n : AgGridUtils.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.MILLIMETER, unit, this.l10nIntlService, decimals)\n ).withTooltipValueGetter((params: ITooltipParams) =>\n withUnitConversion\n ? AgGridUtils.buildAgGridCellTooltipWithUnitConversion(params.value, Unit.MILLIMETER, unit, this.l10nIntlService, true, decimals)\n : AgGridUtils.buildAgGridCellTooltipWithUnitConversion(params.value, Unit.MILLIMETER, unit, this.l10nIntlService, false, decimals)\n );\n }\n\n public withSquareMMConversion(unit: Unit = Unit.SQUARE_CENTIMETER, decimals?: number): this {\n return this.withCellRenderer((params: ICellRendererParams) =>\n AgGridUtils.buildAgGridCellTextWithoutUnit(params.getValue(), Unit.SQUARE_MILLIMETER, unit, this.l10nIntlService, decimals)\n ).withTooltipValueGetter((params: ITooltipParams) => AgGridUtils.buildAgGridCellTooltipWithUnitConversion(params.value, Unit.SQUARE_MILLIMETER, unit, this.l10nIntlService, false, decimals));\n }\n\n public withColIdAndField(colIdAndField: string, withTooltip: boolean = false): this {\n return this.withColId(colIdAndField).withField(colIdAndField, withTooltip);\n }\n\n public withHeaderNameAndClass(headerName: string, headerClass: HeaderClass): this {\n return this.withHeaderName(headerName).withHeaderClass(headerClass);\n }\n\n public withRightAlignment(): this {\n return this.withCellClass('right');\n }\n\n public withVerticalCenterAlignment(rowHeight: number): this {\n this.colDef.cellStyle = {'line-height': `${rowHeight}px`};\n return this;\n }\n\n public withSuppressMovable(lockPosition: 'left' | 'right' = 'left'): this {\n this.colDef.suppressMovable = true;\n this.colDef.pinned = lockPosition;\n this.colDef.lockPinned = true;\n return this;\n }\n\n private withOnEvent(eventHandlerName: string, eventHandler: (event: AgGridEvent) => void): this {\n const existingEventHandler = this.colDef[eventHandlerName];\n\n this.colDef[eventHandlerName] = (event: AgGridEvent): void => {\n if (existingEventHandler) {\n existingEventHandler(event);\n }\n eventHandler(event);\n };\n\n return this;\n }\n\n private getPossibleValuesAsync(\n params: any,\n filterValueGetter?: Observable | Observable[],\n conversionRate?: number | (() => number),\n l10nIntlService?: L10nIntlService\n ): void {\n let request = filterValueGetter as Observable;\n\n if (Array.isArray(filterValueGetter) && filterValueGetter.length > 0) {\n request = forkJoin(filterValueGetter).pipe(map((results: string[][]) => results.flat()));\n }\n\n request.subscribe((values: string[] | number[]) => {\n const convertedValues = [];\n if (conversionRate) {\n values.forEach((value: any) => {\n const conversionResult = value * (typeof conversionRate === 'number' ? conversionRate : conversionRate());\n convertedValues.push(l10nIntlService ? LocaleUtils.formatNumber(conversionResult, l10nIntlService) : conversionResult);\n });\n params.success(convertedValues);\n } else {\n params.success(values);\n }\n });\n }\n\n private setCellClass(cellClassName: string): this {\n if (Array.isArray(this.colDef.cellClass)) {\n this.colDef.cellClass = [...this.colDef.cellClass, cellClassName];\n } else if (AssertionUtils.isString(this.colDef.cellClass)) {\n this.colDef.cellClass = [this.colDef.cellClass, cellClassName];\n } else {\n this.colDef.cellClass = cellClassName;\n }\n\n return this;\n }\n\n private cellClickedEvent(event: CellClickedEvent | CellDoubleClickedEvent): void {\n if (event?.api) {\n event.api.stopEditing();\n }\n\n if (event.column.isCellEditable(event.node)) {\n event.node.setSelected(!event.node.isSelected());\n event?.api.startEditingCell({\n rowIndex: event?.rowIndex,\n colKey: event?.column?.getColId()\n });\n }\n }\n}\n","import {Injectable, Optional} from '@angular/core';\nimport {L10nIntlService} from 'angular-l10n';\nimport {DateTimePipe} from '../custom-pipes/date-time-pipe/date-time.pipe';\nimport {TranslateService} from '../translation/translate.service';\nimport {ColDefBuilder} from './col-def-builder';\n\n@Injectable({providedIn: 'root'})\nexport class ColDefBuilderFactoryService {\n public constructor(\n private readonly l10nIntlService: L10nIntlService,\n private readonly translate: TranslateService,\n @Optional() private readonly dateTimePipe: DateTimePipe\n ) {}\n\n public getBuilder(): ColDefBuilder {\n return new ColDefBuilder(this.l10nIntlService, this.translate, this.dateTimePipe);\n }\n}\n","
\n \n \n \n
\n \n \n \n \n \n \n \n
\n
\n \n
\n
\n \n
\n
\n \n {{ 'GENERAL.NAME' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.NAME_DUPLICATE' | bmsTranslate }}\n \n \n {{ 'GENERAL.ERRORS.REQUIRED' | bmsTranslate }}\n \n \n
\n
\n
\n \n \n
\n","import {DOCUMENT} from '@angular/common';\nimport {AfterViewInit, Component, Inject, OnInit, ViewChild} from '@angular/core';\nimport {AsyncValidatorFn, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {ColDef, GridApi, GridOptions, RowNode} from 'ag-grid-community';\nimport {forkJoin, Observable} from 'rxjs';\nimport {filter, finalize, switchMap, takeUntil} from 'rxjs/operators';\nimport {BaseComponent} from '../../base-component';\nimport {Conflict} from '../../common/data/conflict';\nimport {Message} from '../../common/data/message';\nimport {MessageType} from '../../common/data/message-type.enum';\nimport {ObjectActionType} from '../../common/object-action-type.enum';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {SaveType} from '../../custom-components/header/save-type.enum';\nimport {ToastHelperService} from '../../custom-components/toast/helper/toast-helper.service';\nimport {BackendError} from '../../error/backend-error';\nimport {FormValidationHelper} from '../../forms/form-validation-helper';\nimport {ColDefBuilderFactoryService} from '../../grids/col-def-builder-factory.service';\nimport {GridOptionsBuilderFactoryService} from '../../grids/grid-options-builder-factory.service';\nimport {NoDataOverlayComponentParams} from '../../grids/overlay/no-data-overlay/no-data-overlay-component-params';\nimport {OverlayComponentParams} from '../../grids/overlay/overlay-component-params';\nimport {TranslateService} from '../../translation/translate.service';\nimport {AlertDialogResult} from '../alert-dialog/alert-dialog-data';\nimport {ConflictsDialogData} from '../conflicts-dialog/conflicts-dialog-data';\nimport {ConflictsDialogComponent} from '../conflicts-dialog/conflicts-dialog.component';\nimport {DialogBuilderFactoryService} from '../dialog-builder/dialog-builder-factory.service';\nimport {DialogType} from '../dialog-type';\nimport {SelectObjectsDialogComponentMatDialogConfigDataInterface} from './select-objects-dialog-component-mat-dialog-config.interface';\nimport {VisibleContentForSelectAddObject} from './visible-content-for-select-add-object.enum';\n\n@Component({\n selector: 'vdw-select-objects-dialog-dialog',\n templateUrl: './select-objects-dialog.component.html',\n styleUrls: ['./select-objects-dialog.component.scss']\n})\nexport class SelectObjectsDialogComponent extends BaseComponent implements OnInit, AfterViewInit {\n @ViewChild('optionsForListOfObjectsGrid') public optionsForListOfObjectsGrid: AgGridAngular;\n\n public readonly SAVE = SaveType.SAVE;\n public readonly SAVE_AND_CREATE_NEW = SaveType.SAVE_AND_CREATE_NEW;\n public listOfObjects: T[];\n public listOfGridOptions: GridOptions[];\n public listOfGridApis: GridApi[];\n public objectInUseWarningMessage: Message[];\n public addNewObjectForm: FormGroup<{\n name: FormControl;\n }>;\n\n public gridIdentifier: string;\n public objectTranslationKey: string;\n public selectedObject: T;\n public visibleContent: VisibleContentForSelectAddObject = VisibleContentForSelectAddObject.SELECT_OBJECT;\n\n private isEditing = false;\n private itemToEdit: T;\n private previousCheckboxSelection = false;\n private selectedObjectId: number;\n private readonly getAllObjects: Observable;\n private readonly saveNewObject: (item: string) => Observable;\n private readonly deleteObject: (id: number) => Observable;\n private readonly updateObject: (item: T) => Observable;\n private readonly deleteMultipleObjects: (ids: number[]) => Observable;\n private readonly asyncUniqueValidator: (name: string) => AsyncValidatorFn;\n private readonly getConflicts: (id: number) => Observable;\n private readonly conflictType: any;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: SelectObjectsDialogComponentMatDialogConfigDataInterface,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly dialogRef: MatDialogRef>,\n private readonly formBuilder: FormBuilder,\n private readonly toastHelperService: ToastHelperService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService,\n private readonly colDefBuilderFactoryService: ColDefBuilderFactoryService,\n private readonly translate: TranslateService,\n private readonly dialogBuilderFactoryService: DialogBuilderFactoryService\n ) {\n super();\n\n this.gridIdentifier = data.gridIdentifier;\n this.objectTranslationKey = data.objectTranslationKey;\n this.selectedObject = data?.selectedObject;\n this.getAllObjects = data.getAllObjects;\n this.saveNewObject = data.saveNewObject;\n this.deleteObject = data?.deleteObject ?? undefined;\n this.deleteMultipleObjects = data?.deleteMultipleObjects ?? undefined;\n this.asyncUniqueValidator = data.asyncUniqueValidator;\n this.updateObject = data.updateObject ?? undefined;\n this.getConflicts = data.getConflicts;\n this.conflictType = data.conflictType;\n }\n\n public get gridOptionsForListOfObjects(): GridOptions {\n return this.listOfGridOptions[0];\n }\n\n public ngOnInit(): void {\n this.objectInUseWarningMessage = [\n new Message(null, this.translate.instant('CONFLICTS.IN_USE', {object: this.translate.instant(this.objectTranslationKey, {count: 1})}), MessageType.WARNING, null)\n ];\n if (this.selectedObject) {\n this.selectedObjectId = this.selectedObject['id'];\n }\n\n this.loadObjects();\n this.setGridOptionsForListOfObjects();\n }\n\n public ngAfterViewInit(): void {\n this.listOfGridApis = [this.optionsForListOfObjectsGrid?.api];\n }\n\n public canShowSelectObject(): boolean {\n return this.visibleContent === VisibleContentForSelectAddObject.SELECT_OBJECT;\n }\n\n public canShowAddObject(): boolean {\n return this.visibleContent === VisibleContentForSelectAddObject.ADD_OBJECT;\n }\n\n public isObjectSelected(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.optionsForListOfObjectsGrid?.api) && this.optionsForListOfObjectsGrid?.api.getSelectedRows().length > 0;\n }\n\n public isMultiSelection(): boolean {\n return this.optionsForListOfObjectsGrid?.api?.getSelectedRows().length > 1;\n }\n\n public selectObject(): void {\n this.dialogRef.close(this.optionsForListOfObjectsGrid.api.getSelectedRows());\n }\n\n public close(): void {\n this.canShowAddObject() ? this.goToSelectObjectContent() : this.dialogRef.close();\n }\n\n public getActionText(): string {\n let actionKey: string;\n\n if (this.canShowSelectObject()) {\n actionKey = 'GENERAL.ACTIONS.SELECT_OBJECT';\n } else {\n actionKey = this.isEditing ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT';\n }\n\n return this.translate.instant(actionKey, {\n object: this.translate.instant(this.objectTranslationKey, {count: 1}).toLowerCase()\n });\n }\n\n public getTitle(): string {\n return this.canShowAddObject() ? this.addNewObjectForm.value.name : null;\n }\n\n public getSvgIcon(): string {\n if (this.canShowSelectObject()) {\n return 'select-blue';\n }\n return this.isEditing ? 'details-blue' : 'add-blue';\n }\n\n public goToSelectObjectContent(): void {\n this.setVisibleContent(VisibleContentForSelectAddObject.SELECT_OBJECT);\n this.loadObjects();\n this.isEditing = false;\n }\n\n public goToAddObjectContent(name: string = null): void {\n this.setVisibleContent(VisibleContentForSelectAddObject.ADD_OBJECT);\n this.setFormFields(name);\n }\n\n public save(saveType: SaveType): void {\n const isValid = new FormValidationHelper().checkForms([this.addNewObjectForm], this.document);\n if (isValid) {\n this.saving = true;\n\n if (this.isEditing) {\n this.itemToEdit['name'] = this.addNewObjectForm.value.name;\n }\n const request: Observable = this.isEditing ? this.updateObject(this.itemToEdit) : this.saveNewObject(this.addNewObjectForm.value.name);\n request.pipe(takeUntil(this.unSubscribeOnViewDestroy), finalize(this.finalizeSaving())).subscribe({\n next: (id: number) => this.showToastAndProceed(this.isEditing ? this.itemToEdit['id'] : id, saveType),\n error: (errorMessage: BackendError) =>\n this.showErrorDialogForBackendError(this.getActionTranslation(this.isEditing ? 'GENERAL.ACTIONS.EDIT_OBJECT' : 'GENERAL.ACTIONS.CREATE_OBJECT'), errorMessage.message)\n });\n }\n }\n\n public onEdit(): void {\n this.isEditing = true;\n this.itemToEdit = this.optionsForListOfObjectsGrid?.api?.getSelectedRows()[0];\n\n this.goToAddObjectContent(this.itemToEdit['name']);\n\n if (this.itemToEdit['used']) {\n this.addNewObjectForm.disable();\n }\n }\n\n public hasDeleteMethod(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.deleteObject);\n }\n\n public hasEditMethod(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.updateObject);\n }\n\n public deleteSelectedObject(): void {\n const selectedRows = this.optionsForListOfObjectsGrid?.api?.getSelectedRows();\n const object = this.translate.instant(this.objectTranslationKey, {count: this.isMultiSelection() ? 2 : 1}).toLowerCase();\n\n this.dialogBuilderFactoryService\n .getBuilder()\n .openAlertDialog({\n titleText: this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {\n object: this.isMultiSelection() ? this.getMultiDeleteConfirmationMessage(selectedRows, this.objectTranslationKey) : selectedRows[0].name\n }),\n messageText: this.translate.instant('GENERAL.ACTIONS.CONFIRM_DELETE_DESCRIPTION'),\n entities: this.isMultiSelection()\n ? selectedRows.map((data: T) => ({\n name: data['name']\n }))\n : null,\n type: DialogType.CONFIRM_DELETE\n })\n .pipe(\n filter((result: AlertDialogResult) => result === AlertDialogResult.CONFIRM),\n switchMap(() => (this.isMultiSelection() ? this.deleteMultipleObjects(selectedRows.map((value: T) => value['id']) as number[]) : this.deleteObject(selectedRows[0].id))),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe({\n next: (multiDeleteResponses: any[]) => {\n if (this.isMultiSelection()) {\n this.handleMultiDeletionResponse(multiDeleteResponses, selectedRows);\n } else {\n this.showToastAndDeselect();\n }\n },\n error: (errorMessage: BackendError) => this.handleErrorResponse(errorMessage, selectedRows[0].id, object)\n });\n }\n\n private handleMultiDeletionResponse(multiDeleteResponses: any[], selectedRows: any[]): void {\n const succesfullDeletedIds = multiDeleteResponses.filter((multiDeleteResponse: any) => multiDeleteResponse.statusCode === 200).map((multiDeleteResponse: any) => multiDeleteResponse.id);\n\n if (succesfullDeletedIds.length !== selectedRows.length) {\n this.handleConflicts(multiDeleteResponses, succesfullDeletedIds, selectedRows);\n } else {\n this.showToastAndDeselect();\n }\n }\n\n private handleConflicts(multiDeleteResponses: any[], succesfullDeletedIds: number[], selectedRows: any[]): void {\n const unsuccesfullDeletedIds = multiDeleteResponses.filter((multiDeleteResponse: any) => !succesfullDeletedIds.includes(multiDeleteResponse.id));\n\n forkJoin(unsuccesfullDeletedIds.map((multiDeleteResponse: any) => this.getConflicts(multiDeleteResponse.id)))\n .pipe(\n switchMap((conflicts: Conflict[][]) => {\n const entities = selectedRows.filter((row: any) => !succesfullDeletedIds.includes(row.id)).map((row: any) => row.name);\n\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createCannotDeleteData(this.objectTranslationKey, entities, conflicts, this.conflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n\n this.showToastAndDeselect(succesfullDeletedIds.length > 0, succesfullDeletedIds.length > 1);\n }\n\n private handleErrorResponse(errorMessage: BackendError, selectemItemId: number, object: string): void {\n if (errorMessage.errorContext.errorCode === 'LINKED_ENTITIES') {\n this.showConflictsDialog(selectemItemId, errorMessage.errorContext.entityName);\n } else {\n this.showErrorDialogForBackendError(this.translate.instant('GENERAL.ACTIONS.DELETE_OBJECT', {object}), errorMessage.message);\n }\n }\n\n private showConflictsDialog(id: number, entityName: string): void {\n this.getConflicts(id)\n .pipe(\n switchMap((conflicts: Conflict[]) => {\n return this.dialogBuilderFactoryService\n .getBuilder()\n .withClass('alert-dialog')\n .openDialog(ConflictsDialogComponent, ConflictsDialogData.createCannotDeleteData(this.objectTranslationKey, entityName, conflicts, this.conflictType));\n }),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe();\n }\n\n private showToastAndDeselect(showToast: boolean = true, isMultiDelete: boolean = this.isMultiSelection()): void {\n if (showToast) {\n this.toastHelperService.showToastForObjectAction(ObjectActionType.DELETE, this.objectTranslationKey, null, isMultiDelete);\n }\n this.optionsForListOfObjectsGrid.api.deselectAll();\n this.showCheckboxIfNeeded();\n this.loadObjects();\n }\n\n private showToastAndProceed(id: number, saveType: SaveType): void {\n if (saveType === SaveType.SAVE) {\n this.toastHelperService.showToastForObjectAction(this.isEditing ? ObjectActionType.EDIT : ObjectActionType.CREATE, this.objectTranslationKey, this.addNewObjectForm.value.name);\n this.selectedObjectId = id;\n this.goToSelectObjectContent();\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.toastHelperService.showToastForObjectAction(this.isEditing ? ObjectActionType.EDIT : ObjectActionType.CREATE, this.objectTranslationKey, this.addNewObjectForm.value.name);\n this.setFormFields();\n this.isEditing = false;\n }\n }\n\n private setVisibleContent(content: VisibleContentForSelectAddObject): void {\n this.visibleContent = content;\n }\n\n private showErrorDialogForBackendError(title: string, message: string): void {\n this.dialogBuilderFactoryService.getBuilder().openAlertDialog({\n titleText: title,\n messageText: message,\n type: DialogType.INFORMATION\n });\n }\n\n private getActionTranslation(actionKey: string): string {\n return this.translate.instant(actionKey, {\n object: this.translate.instant(this.objectTranslationKey, {\n count: 1\n })\n });\n }\n\n private loadObjects(): void {\n this.getAllObjects.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((listOfObjects: T[]) => {\n this.listOfObjects = listOfObjects;\n });\n }\n\n private setGridOptionsForListOfObjects(): void {\n this.listOfGridOptions = [\n this.gridOptionsBuilderFactoryService\n .getBuilder(this.getColumnDefsForObjects(), this.gridIdentifier)\n .withoutColumnMenu()\n .withOnCellDoubleClicked(() => this.selectObject())\n .withOnRowDataUpdated(() => this.setSelectedObject())\n .withRowSelection(this.hasMultiDeleteMethod())\n .withOnRowClicked(() => this.showCheckboxIfNeeded())\n .withNoRowsOverlay({\n scale: 0.7,\n titleParam: this.objectTranslationKey,\n hideDescription: true\n } as NoDataOverlayComponentParams)\n .withLoadingOverlay({\n scale: 0.7\n } as OverlayComponentParams)\n .withRememberStateForNavigationHelper()\n .withOnFirstDataRendered(() => this.setSelectedObject())\n .build()\n ];\n }\n\n private hasMultiDeleteMethod(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.deleteMultipleObjects);\n }\n\n private setSelectedObject(): void {\n if (!AssertionUtils.isNullOrUndefined(this.selectedObjectId)) {\n this.optionsForListOfObjectsGrid.api.forEachNode((node: RowNode) => node.setSelected(this.selectedObjectId === node.data.id));\n }\n }\n\n private getColumnDefsForObjects(): ColDef[] {\n return [this.colDefBuilderFactoryService.getBuilder().withField('name').withHeaderName('GENERAL.NAME').build()];\n }\n\n private setFormFields(name: string = null): void {\n this.addNewObjectForm = this.formBuilder.group({\n name: this.formBuilder.control(name, Validators.required, this.asyncUniqueValidator(name))\n });\n }\n\n private getMultiDeleteConfirmationMessage(selectedRows: T[], objectTranslationKey: string): string {\n return `${selectedRows.length} ${this.translate.instant(objectTranslationKey, {count: 2}).toLowerCase()}`;\n }\n\n private showCheckboxIfNeeded(): void {\n let newCheckboxSelection = null;\n const columnDefs = this.optionsForListOfObjectsGrid.api.getColumnDefs();\n\n columnDefs.forEach((colDef: ColDef, index: number) => {\n if (index === 0) {\n colDef.checkboxSelection = this.isMultiSelection();\n newCheckboxSelection = colDef.checkboxSelection;\n }\n });\n\n if (this.previousCheckboxSelection !== newCheckboxSelection) {\n this.optionsForListOfObjectsGrid.api.setGridOption('columnDefs', columnDefs);\n this.optionsForListOfObjectsGrid.api.refreshCells();\n }\n\n this.previousCheckboxSelection = newCheckboxSelection;\n }\n}\n","import {AbstractControl} from '@angular/forms';\nimport {combineLatest, Observable} from 'rxjs';\nimport {filter, map, tap} from 'rxjs/operators';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\nexport class FormValueHelper {\n public static syncValuesOfFormFieldsByFactor(\n firstFormField: AbstractControl,\n secondFormField: AbstractControl,\n factorForConversionFromFirstFormFieldToSecondFormField: number,\n factorForConversionFromSecondFormFieldToFirstFormField: number,\n divisibleBy?: number\n ): Observable {\n const firstFormFieldChanges = firstFormField.valueChanges.pipe(\n filter((value: number) => !AssertionUtils.isNullOrUndefined(value)),\n tap((value: number) => {\n const convertedValue = this.getConvertedValue(value, factorForConversionFromFirstFormFieldToSecondFormField, divisibleBy);\n secondFormField.patchValue(Math.max(divisibleBy, convertedValue), {emitEvent: false});\n })\n );\n\n const secondFormFieldChanges = secondFormField.valueChanges.pipe(\n filter((value: number) => !AssertionUtils.isNullOrUndefined(value)),\n tap((value: number) => {\n const convertedValue = this.getConvertedValue(value, factorForConversionFromSecondFormFieldToFirstFormField, divisibleBy);\n firstFormField.patchValue(Math.max(divisibleBy, convertedValue), {emitEvent: false});\n })\n );\n\n return combineLatest([firstFormFieldChanges, secondFormFieldChanges]).pipe(map(() => null));\n }\n\n private static getConvertedValue(value: number, factorForConversion: number, divisibleBy?: number): number {\n if (!AssertionUtils.isNullOrUndefined(divisibleBy) && divisibleBy !== 0) {\n return Math.round((value * factorForConversion) / divisibleBy) * divisibleBy;\n } else {\n return Math.round(value * factorForConversion);\n }\n }\n}\n","export class CheckName {\n private readonly _isAvailable: boolean;\n private readonly _id: number;\n\n public constructor(isAvailable: boolean, id: number) {\n this._isAvailable = isAvailable;\n this._id = id;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get isAvailable(): boolean {\n return this._isAvailable;\n }\n\n public static fromJSON(checkName: any): CheckName {\n return new CheckName(checkName.isAvailable, checkName.id);\n }\n}\n","import {AbstractControl, AsyncValidatorFn, ValidationErrors} from '@angular/forms';\nimport {Observable, of} from 'rxjs';\n\nexport class AsyncGreaterThanValidator {\n public static createGreaterThanValidator(compareValue: number): AsyncValidatorFn {\n return (control: AbstractControl): Observable => {\n const value = control.value;\n\n if (value === null || isNaN(value)) {\n return of(null);\n }\n\n if (value > compareValue) {\n return of(null);\n } else {\n return of({greaterThan: {value, required: compareValue}});\n }\n };\n }\n}\n","import {UntypedFormGroup} from '@angular/forms';\nimport {canShowErrorForErrorCodeAndFormControlForFormGroup} from './can-show-error-for-error-code-and-form-control-for-form-group';\n\nexport function canShowErrorForErrorCodeAndButtonForFormGroup(errorCode: string, formControlName: string, formGroup: UntypedFormGroup): boolean {\n return canShowErrorForErrorCodeAndFormControlForFormGroup(errorCode, formControlName, formGroup) && formGroup.get(formControlName).touched;\n}\n","import {AbstractControl, FormGroup, UntypedFormArray, ValidatorFn} from '@angular/forms';\n\nexport class DuplicateValueValidator {\n public static createDuplicateValueValidator(formIndex: number): ValidatorFn {\n return (control: AbstractControl) => {\n let result = null;\n\n if (control.value === '' || control.value === null || control.value === undefined) {\n return null;\n }\n\n const formArray = control.parent && control.parent.parent ? (control.parent.parent as UntypedFormArray) : null;\n\n if (formArray && formArray.controls.length) {\n const controlName = DuplicateValueValidator.getControlName(control);\n\n for (let index = formIndex - 1; index >= 0; index--) {\n if ((formArray.at(index) as FormGroup).get(controlName).value === control.value) {\n result = {duplicateValue: true};\n break;\n }\n }\n }\n\n return result;\n };\n }\n\n public static createDuplicateValidator(itemList: string[], currentItem: string): ValidatorFn {\n return (control: AbstractControl) => {\n let result = null;\n\n if (control.value === '' || control.value === null || control.value === undefined) {\n return null;\n }\n\n if (itemList.filter((item: string) => item.toLowerCase() !== currentItem?.toLowerCase()).some((item: string) => item.toLowerCase() === control.value.toLowerCase())) {\n return {duplicateValue: true};\n }\n\n return result;\n };\n }\n\n public static getControlName(control: AbstractControl): string | null {\n const formGroup = control.parent.controls;\n return Object.keys(formGroup).find((name: string) => control === formGroup[name]) || null;\n }\n}\n","import {AbstractControl} from '@angular/forms';\n\nexport function ipAddressValidator(control: AbstractControl): {[key: string]: boolean} {\n let result = null;\n\n if (control.value === '' || control.value === null || control.value === undefined) {\n return result;\n } else if (!/^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}$/.test(control.value)) {\n result = {invalidIpAddress: true};\n }\n\n return result;\n}\n","import {FormControl, FormGroup, UntypedFormGroup, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {L10nIntlService} from 'angular-l10n';\nimport isNumber from 'lodash-es/isNumber';\nimport {LocaleUtils} from '../../common/utils/locale-utils';\n\nexport class MinMaxLimitValidator {\n public static createValidator(l10nIntlService: L10nIntlService): ValidatorFn {\n return (formGroup: UntypedFormGroup): ValidationErrors | null => {\n let result = null;\n\n const minimumControl = this.getFormControlWithNameContaining(formGroup, 'min');\n const maximumControl = this.getFormControlWithNameContaining(formGroup, 'max');\n\n const minimumValue: number = LocaleUtils.parseNumber(minimumControl.value, l10nIntlService);\n const maximumValue: number = LocaleUtils.parseNumber(maximumControl.value, l10nIntlService);\n\n if (isNumber(minimumValue) && isNumber(maximumValue) && minimumValue >= maximumValue) {\n minimumControl.markAsTouched();\n maximumControl.markAsTouched();\n\n result = {nomatch: true};\n }\n\n return result;\n };\n }\n\n public static getFormControlWithNameContaining(formGroup: FormGroup, name: string): FormControl {\n const controlName = Object.keys(formGroup.controls).find((control: string) => control.includes(name));\n return formGroup.controls[controlName] as FormControl;\n }\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nexport const noSpaceValidator: ValidatorFn = (control: AbstractControl): ValidationErrors => {\n const value = control.value as string;\n if (value && value.trim().length === 0) {\n return {noSpace: true};\n }\n return null;\n};\n","import {Component, Inject, Input} from '@angular/core';\nimport {AsyncValidatorFn} from '@angular/forms';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {BaseComponent} from '../../../base-component';\nimport {Color} from '../../../common/data/color';\n\n@Component({\n selector: 'vdw-color-picker-popup',\n templateUrl: './color-picker-popup.component.html'\n})\nexport class ColorPickerPopupComponent extends BaseComponent {\n @Input()\n public get color(): Color {\n return this.selectedColor;\n }\n\n public set color(value: Color) {\n this.selectedColor = value;\n }\n\n public selectedColor: Color;\n public okButtonText: string;\n public cancelButtonText: string;\n public canEdit: boolean;\n public validatorFunction: () => AsyncValidatorFn;\n\n public constructor(\n private readonly matDialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any\n ) {\n super();\n this.okButtonText = data.okButtonText || 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.CREATE';\n this.cancelButtonText = data.cancelButtonText || 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.CANCEL';\n this.color = data.color || Color.createEmptyColor();\n this.canEdit = data.canEdit ?? true;\n this.validatorFunction = data.validatorFunction;\n }\n\n public colorCreated(color: Color): void {\n this.selectedColor = color;\n this.matDialogRef.close(this.selectedColor);\n }\n\n public cancel(): void {\n this.matDialogRef.close();\n }\n}\n","
\n \n \n \n
\n","import {Injectable} from '@angular/core';\nimport {AsyncValidatorFn} from '@angular/forms';\nimport {Observable} from 'rxjs';\nimport {Color} from '../../common/data/color';\nimport {DialogBuilderFactoryService} from '../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {ColorPickerPopupComponent} from './popup-component/color-picker-popup.component';\n\n@Injectable({providedIn: 'root'})\nexport class ColorPickerPopupService {\n public constructor(private readonly dialogBuilderFactoryService: DialogBuilderFactoryService) {}\n\n public showColorPickerPopup(validatorFunction?: () => AsyncValidatorFn, canEdit?: boolean, okButtonText?: string, cancelButtonText?: string, color?: Color): Observable {\n return this.dialogBuilderFactoryService.getBuilder().withClass('select-color-dialog').openDialog(ColorPickerPopupComponent, {\n validatorFunction,\n canEdit,\n color,\n okButtonText,\n cancelButtonText\n });\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {ReactiveFormsModule, UntypedFormBuilder} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSliderModule} from '@angular/material/slider';\nimport {BreakpointResponsivenessViewModeService} from '../../common/responsiveness/breakpoint-responsiveness-view-mode.service';\nimport {RESPONSIVENESS_VIEW_MODE} from '../../common/responsiveness/responsiveness-view.mode';\nimport {CanShowErrorForFormControlModule} from '../../custom-directives/can-show-error-for-context/can-show-error-for-form-control.module';\nimport {LocalStorageModule} from '../../custom-services/local-storage.service/local-storage.module';\nimport {DialogModule} from '../../dialogs/dialog.module';\nimport {CommonFormsModule} from '../../forms/common-forms.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {FooterModule} from '../footer/footer.module';\nimport {HeaderModule} from '../header/header.module';\nimport {AddColorComponent} from './add-color/add-color.component';\nimport {SliderTrackBackgroundDirective} from './add-color/slider-track-background.directive';\nimport {ColorPickerPopupComponent} from './popup-component/color-picker-popup.component';\n\n@NgModule({\n exports: [AddColorComponent],\n declarations: [AddColorComponent, ColorPickerPopupComponent, SliderTrackBackgroundDirective],\n providers: [UntypedFormBuilder, {provide: RESPONSIVENESS_VIEW_MODE, useClass: BreakpointResponsivenessViewModeService}],\n imports: [\n CanShowErrorForFormControlModule,\n CommonModule,\n FlexLayoutModule,\n CommonFormsModule,\n ReactiveFormsModule,\n LocalStorageModule,\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n MatInputModule,\n MatSliderModule,\n ReactiveFormsModule,\n TranslationModule,\n DialogModule,\n FooterModule,\n LabelModule,\n HeaderModule\n ]\n})\nexport class ColorPickerModule {}\n","import {NgModule} from '@angular/core';\nimport {DialogButtonComponent} from './dialog-button.component';\n\n@NgModule({\n exports: [DialogButtonComponent],\n declarations: [DialogButtonComponent]\n})\nexport class DialogButtonModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatIconModule} from '@angular/material/icon';\nimport {DialogModule} from '../../dialogs/dialog.module';\nimport {DialogButtonModule} from '../dialog-button/dialog-button.module';\nimport {ColorPickerFormInputComponent} from './color-picker-form-input.component';\nimport {ColorPresetPickerMenuComponent} from './color-preset-picker-menu/color-preset-picker-menu.component';\n\n@NgModule({\n declarations: [ColorPickerFormInputComponent, ColorPresetPickerMenuComponent],\n imports: [CommonModule, MatIconModule, DialogModule, DialogButtonModule],\n exports: [ColorPickerFormInputComponent]\n})\nexport class ColorPickerFormInputModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ResizeElementDirective} from './resize-element.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ResizeElementDirective],\n exports: [ResizeElementDirective]\n})\nexport class ResizeElementModule {}\n","// IMPORTANT: THIS IS A GENERATED FILE AND SHOULD NOT BE EDITED OR CHECKED INTO VERSION CONTROL!\n/* eslint-disable */\nexport const ICONS = [\n {\n \"size\": \"12px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/12px/chevron-down-12px.svg\",\n \"name\": \"chevron-down-12px\",\n \"dimensions\": {\n \"width\": 12,\n \"height\": 12\n }\n },\n {\n \"path\": \"assets/icons/12px/chevron-up-12px.svg\",\n \"name\": \"chevron-up-12px\",\n \"dimensions\": {\n \"width\": 12,\n \"height\": 12\n }\n }\n ]\n },\n {\n \"size\": \"16px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/16px/alarm-circle.svg\",\n \"name\": \"alarm-circle\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/arrow-down-small.svg\",\n \"name\": \"arrow-down-small\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/arrow-up-small.svg\",\n \"name\": \"arrow-up-small\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/arrow.svg\",\n \"name\": \"arrow\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/checked-disabled.svg\",\n \"name\": \"checked-disabled\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/checked.svg\",\n \"name\": \"checked\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/close-16.svg\",\n \"name\": \"close-16\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/completed.svg\",\n \"name\": \"completed\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/critical-circle.svg\",\n \"name\": \"critical-circle\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/down.svg\",\n \"name\": \"down\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/drag-handle.svg\",\n \"name\": \"drag-handle\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/erase.svg\",\n \"name\": \"erase\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/file-document.svg\",\n \"name\": \"file-document\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 17\n }\n },\n {\n \"path\": \"assets/icons/16px/file-video.svg\",\n \"name\": \"file-video\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/filter.svg\",\n \"name\": \"filter\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/forward-media.svg\",\n \"name\": \"forward-media\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/indeterminate.svg\",\n \"name\": \"indeterminate\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/information-circle.svg\",\n \"name\": \"information-circle\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/more-vertical.svg\",\n \"name\": \"more-vertical\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/sorting.svg\",\n \"name\": \"sorting\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/trash-small.svg\",\n \"name\": \"trash-small\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/unchecked-disabled.svg\",\n \"name\": \"unchecked-disabled\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/unchecked.svg\",\n \"name\": \"unchecked\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/up.svg\",\n \"name\": \"up\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/warning-circle.svg\",\n \"name\": \"warning-circle\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 16\n }\n },\n {\n \"path\": \"assets/icons/16px/warning-small.svg\",\n \"name\": \"warning-small\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 17\n }\n }\n ]\n },\n {\n \"size\": \"24px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/24px/add-prod-order.svg\",\n \"name\": \"add-prod-order\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/add-small.svg\",\n \"name\": \"add-small\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/add.svg\",\n \"name\": \"add\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/admin.svg\",\n \"name\": \"admin\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/arrived.svg\",\n \"name\": \"arrived\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/back.svg\",\n \"name\": \"back\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/builder.svg\",\n \"name\": \"builder\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/calendar.svg\",\n \"name\": \"calendar\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/cancelled.svg\",\n \"name\": \"cancelled\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/checkmark.svg\",\n \"name\": \"checkmark\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-down-disabled.svg\",\n \"name\": \"chevron-down-disabled\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-down-error.svg\",\n \"name\": \"chevron-down-error\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-down-warning.svg\",\n \"name\": \"chevron-down-warning\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-down.svg\",\n \"name\": \"chevron-down\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-left.svg\",\n \"name\": \"chevron-left\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-right.svg\",\n \"name\": \"chevron-right\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-up-error.svg\",\n \"name\": \"chevron-up-error\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-up-warning.svg\",\n \"name\": \"chevron-up-warning\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/chevron-up.svg\",\n \"name\": \"chevron-up\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/clear-files.svg\",\n \"name\": \"clear-files\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/clock.svg\",\n \"name\": \"clock\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/close-disabled.svg\",\n \"name\": \"close-disabled\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/close-menu.svg\",\n \"name\": \"close-menu\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/close-small.svg\",\n \"name\": \"close-small\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/close.svg\",\n \"name\": \"close\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/complete.svg\",\n \"name\": \"complete\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/configure.svg\",\n \"name\": \"configure\",\n \"dimensions\": {\n \"width\": 25,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/confirm.svg\",\n \"name\": \"confirm\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/copy.svg\",\n \"name\": \"copy\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/create.svg\",\n \"name\": \"create\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/creel-change.svg\",\n \"name\": \"creel-change\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/currency.svg\",\n \"name\": \"currency\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/design-library.svg\",\n \"name\": \"design-library\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/deviating.svg\",\n \"name\": \"deviating\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/disconnected.svg\",\n \"name\": \"disconnected\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/download-24px.svg\",\n \"name\": \"download-24px\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/draft.svg\",\n \"name\": \"draft\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/drag.svg\",\n \"name\": \"drag\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/edit.svg\",\n \"name\": \"edit\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/error-number.svg\",\n \"name\": \"error-number\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/error.svg\",\n \"name\": \"error\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/execute.svg\",\n \"name\": \"execute\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/executed-complete.svg\",\n \"name\": \"executed-complete\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/executed-partial.svg\",\n \"name\": \"executed-partial\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/expandhorizontally.svg\",\n \"name\": \"expandhorizontally\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/export.svg\",\n \"name\": \"export\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/eye.svg\",\n \"name\": \"eye\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/failed.svg\",\n \"name\": \"failed\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/filter.svg\",\n \"name\": \"filter\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/free-zone-modified-with-errors.svg\",\n \"name\": \"free-zone-modified-with-errors\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/free-zone-modified.svg\",\n \"name\": \"free-zone-modified\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/free-zone-selected.svg\",\n \"name\": \"free-zone-selected\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/free-zone.svg\",\n \"name\": \"free-zone\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/groups.svg\",\n \"name\": \"groups\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/hourglass-green.svg\",\n \"name\": \"hourglass-green\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/hourglass.svg\",\n \"name\": \"hourglass\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/import-or-load.svg\",\n \"name\": \"import-or-load\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/info-24px.svg\",\n \"name\": \"info-24px\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/inline.svg\",\n \"name\": \"inline\",\n \"dimensions\": {\n \"width\": 25,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/list.svg\",\n \"name\": \"list\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/machine-unavailable.svg\",\n \"name\": \"machine-unavailable\",\n \"dimensions\": {\n \"width\": 25,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/maintenance.svg\",\n \"name\": \"maintenance\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/menu.svg\",\n \"name\": \"menu\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/mirror.svg\",\n \"name\": \"mirror\",\n \"dimensions\": {\n \"width\": 25,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/more-vertical.svg\",\n \"name\": \"more-vertical\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/more.svg\",\n \"name\": \"more\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/next.svg\",\n \"name\": \"next\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/no-connection.svg\",\n \"name\": \"no-connection\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/open-external.svg\",\n \"name\": \"open-external\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/pdf-file.svg\",\n \"name\": \"pdf-file\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/priority.svg\",\n \"name\": \"priority\",\n \"dimensions\": {\n \"width\": 16,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/processing-green.svg\",\n \"name\": \"processing-green\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/processing.svg\",\n \"name\": \"processing\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/prod-cancelled.svg\",\n \"name\": \"prod-cancelled\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/reconfirm.svg\",\n \"name\": \"reconfirm\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/remote-connection.svg\",\n \"name\": \"remote-connection\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/repeat.svg\",\n \"name\": \"repeat\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/report-items.svg\",\n \"name\": \"report-items\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/reset.svg\",\n \"name\": \"reset\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rest-zone-modified-with-errors.svg\",\n \"name\": \"rest-zone-modified-with-errors\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rest-zone-modified.svg\",\n \"name\": \"rest-zone-modified\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rest-zone-selected.svg\",\n \"name\": \"rest-zone-selected\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rest-zone.svg\",\n \"name\": \"rest-zone\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rotate-left.svg\",\n \"name\": \"rotate-left\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/rotate-right.svg\",\n \"name\": \"rotate-right\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/schedule-24px.svg\",\n \"name\": \"schedule-24px\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/search.svg\",\n \"name\": \"search\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/select.svg\",\n \"name\": \"select\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/send.svg\",\n \"name\": \"send\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/settings.svg\",\n \"name\": \"settings\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/stats.svg\",\n \"name\": \"stats\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/subtract-small.svg\",\n \"name\": \"subtract-small\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/to-bottom.svg\",\n \"name\": \"to-bottom\",\n \"dimensions\": {\n \"width\": 32,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/to-top.svg\",\n \"name\": \"to-top\",\n \"dimensions\": {\n \"width\": 32,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/trash.svg\",\n \"name\": \"trash\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/upload.svg\",\n \"name\": \"upload\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/verified-error.svg\",\n \"name\": \"verified-error\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/verified-with-warnings.svg\",\n \"name\": \"verified-with-warnings\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/verified.svg\",\n \"name\": \"verified\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/verify.svg\",\n \"name\": \"verify\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/warning.svg\",\n \"name\": \"warning\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/warp-change.svg\",\n \"name\": \"warp-change\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/zoom-in.svg\",\n \"name\": \"zoom-in\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/24px/zoom-out.svg\",\n \"name\": \"zoom-out\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n }\n ]\n },\n {\n \"size\": \"30px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/30px/carpet-loom-machine.svg\",\n \"name\": \"carpet-loom-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/carpet-loom-no-jq-machine.svg\",\n \"name\": \"carpet-loom-no-jq-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/carpet-quality.svg\",\n \"name\": \"carpet-quality\",\n \"dimensions\": {\n \"width\": 18,\n \"height\": 22\n }\n },\n {\n \"path\": \"assets/icons/30px/colortec-machine.svg\",\n \"name\": \"colortec-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/colorteclplus-machine.svg\",\n \"name\": \"colorteclplus-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/dyeing-machine.svg\",\n \"name\": \"dyeing-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/extrusion-machine.svg\",\n \"name\": \"extrusion-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/finishing-machine.svg\",\n \"name\": \"finishing-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/folder.svg\",\n \"name\": \"folder\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/jacquard-machine.svg\",\n \"name\": \"jacquard-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/jaquard-focus.svg\",\n \"name\": \"jaquard-focus\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/myriad-machine.svg\",\n \"name\": \"myriad-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/new-machine.svg\",\n \"name\": \"new-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/plastic-machine.svg\",\n \"name\": \"plastic-machine\",\n \"dimensions\": {\n \"width\": 64,\n \"height\": 64\n }\n },\n {\n \"path\": \"assets/icons/30px/premium.svg\",\n \"name\": \"premium\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/smartcreel.svg\",\n \"name\": \"smartcreel\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/superbadye-machine.svg\",\n \"name\": \"superbadye-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/superbaheat-machine.svg\",\n \"name\": \"superbaheat-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/superbawinder-machine.svg\",\n \"name\": \"superbawinder-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/tuft-machine.svg\",\n \"name\": \"tuft-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/users.svg\",\n \"name\": \"users\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/velvet-machine.svg\",\n \"name\": \"velvet-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/velvet-no-jq-machine.svg\",\n \"name\": \"velvet-no-jq-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/velvet-quality.svg\",\n \"name\": \"velvet-quality\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/weaving-machine.svg\",\n \"name\": \"weaving-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n },\n {\n \"path\": \"assets/icons/30px/winder-machine.svg\",\n \"name\": \"winder-machine\",\n \"dimensions\": {\n \"width\": 30,\n \"height\": 30\n }\n }\n ]\n },\n {\n \"size\": \"36px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/36px/add-blue.svg\",\n \"name\": \"add-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/arrange.svg\",\n \"name\": \"arrange\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/articles.svg\",\n \"name\": \"articles\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/automatic-stop-groups.svg\",\n \"name\": \"automatic-stop-groups\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/bms-config-blue.svg\",\n \"name\": \"bms-config-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/bot-blue.svg\",\n \"name\": \"bot-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/builder-blue.svg\",\n \"name\": \"builder-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/builder-summary-blue.svg\",\n \"name\": \"builder-summary-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/clients.svg\",\n \"name\": \"clients\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/color-blue.svg\",\n \"name\": \"color-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/color-sets-blue.svg\",\n \"name\": \"color-sets-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/colored-yarn-sets-blue.svg\",\n \"name\": \"colored-yarn-sets-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/company-blue.svg\",\n \"name\": \"company-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/connectivity-blue.svg\",\n \"name\": \"connectivity-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/credits-blue.svg\",\n \"name\": \"credits-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/creel-change-blue.svg\",\n \"name\": \"creel-change-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/creel-position.svg\",\n \"name\": \"creel-position\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/creels-blue.svg\",\n \"name\": \"creels-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/data-unit-setup.svg\",\n \"name\": \"data-unit-setup\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/datasheets-blue.svg\",\n \"name\": \"datasheets-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/details-blue.svg\",\n \"name\": \"details-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/device-templates.svg\",\n \"name\": \"device-templates\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/documents-blue.svg\",\n \"name\": \"documents-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/download-36px.svg\",\n \"name\": \"download-36px\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/drawings-blue.svg\",\n \"name\": \"drawings-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/educate-manage.svg\",\n \"name\": \"educate-manage\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/educate.svg\",\n \"name\": \"educate\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/error-full-36px.svg\",\n \"name\": \"error-full-36px\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/events.svg\",\n \"name\": \"events\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/finishing-templates-blue.svg\",\n \"name\": \"finishing-templates-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/help-blue.svg\",\n \"name\": \"help-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/image-label-blue.svg\",\n \"name\": \"image-label-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/info-blue.svg\",\n \"name\": \"info-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/info-full-blue.svg\",\n \"name\": \"info-full-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/info.svg\",\n \"name\": \"info\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/label-blue.svg\",\n \"name\": \"label-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/language-settings-blue.svg\",\n \"name\": \"language-settings-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/library-blue.svg\",\n \"name\": \"library-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/machine-data-sources.svg\",\n \"name\": \"machine-data-sources\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/machine-overview-blue.svg\",\n \"name\": \"machine-overview-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/machine-quality-blue.svg\",\n \"name\": \"machine-quality-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/maintenance-blue.svg\",\n \"name\": \"maintenance-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/news-feed-blue.svg\",\n \"name\": \"news-feed-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/news-item-blue.svg\",\n \"name\": \"news-item-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/operators.svg\",\n \"name\": \"operators\",\n \"dimensions\": {\n \"width\": 37,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/order-items-blue.svg\",\n \"name\": \"order-items-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/orderbook.svg\",\n \"name\": \"orderbook\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/orderlines.svg\",\n \"name\": \"orderlines\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/physical-quantities-blue.svg\",\n \"name\": \"physical-quantities-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/planning-blue.svg\",\n \"name\": \"planning-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/preview.svg\",\n \"name\": \"preview\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/process-blue.svg\",\n \"name\": \"process-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/product-configuration.svg\",\n \"name\": \"product-configuration\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/production-order-blue.svg\",\n \"name\": \"production-order-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/profile-blue.svg\",\n \"name\": \"profile-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/reject-reasons.svg\",\n \"name\": \"reject-reasons\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/report-items-blue.svg\",\n \"name\": \"report-items-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/reports-blue.svg\",\n \"name\": \"reports-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/resource-types-blue.svg\",\n \"name\": \"resource-types-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/sales-order.svg\",\n \"name\": \"sales-order\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/select-blue.svg\",\n \"name\": \"select-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/settings-blue.svg\",\n \"name\": \"settings-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/stop-reason-texts.svg\",\n \"name\": \"stop-reason-texts\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/terms.svg\",\n \"name\": \"terms\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/text-label-blue.svg\",\n \"name\": \"text-label-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/textile-blue.svg\",\n \"name\": \"textile-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/tuft-blue.svg\",\n \"name\": \"tuft-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/unavailable-blue.svg\",\n \"name\": \"unavailable-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/update-blue.svg\",\n \"name\": \"update-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/verify-blue.svg\",\n \"name\": \"verify-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/vibration.svg\",\n \"name\": \"vibration\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/video.svg\",\n \"name\": \"video\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/warning-blue.svg\",\n \"name\": \"warning-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/warning-error.svg\",\n \"name\": \"warning-error\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/warning-full-36px.svg\",\n \"name\": \"warning-full-36px\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/warning-red-36px.svg\",\n \"name\": \"warning-red-36px\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/weave-patterns-blue.svg\",\n \"name\": \"weave-patterns-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/wifi-1-bar.svg\",\n \"name\": \"wifi-1-bar\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/wifi-2-bars.svg\",\n \"name\": \"wifi-2-bars\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/wifi-3-bars.svg\",\n \"name\": \"wifi-3-bars\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/wifi-4-bars.svg\",\n \"name\": \"wifi-4-bars\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/wifi-no-signal.svg\",\n \"name\": \"wifi-no-signal\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/yarn-sets-blue.svg\",\n \"name\": \"yarn-sets-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n },\n {\n \"path\": \"assets/icons/36px/yarn-types-blue.svg\",\n \"name\": \"yarn-types-blue\",\n \"dimensions\": {\n \"width\": 36,\n \"height\": 36\n }\n }\n ]\n },\n {\n \"size\": \"38px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/38px/bms-config.svg\",\n \"name\": \"bms-config\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/bot.svg\",\n \"name\": \"bot\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/collapse.svg\",\n \"name\": \"collapse\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/credits.svg\",\n \"name\": \"credits\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/dashboard.svg\",\n \"name\": \"dashboard\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/expand.svg\",\n \"name\": \"expand\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/help.svg\",\n \"name\": \"help\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/label.svg\",\n \"name\": \"label\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/library.svg\",\n \"name\": \"library\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/logout.svg\",\n \"name\": \"logout\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/machine-overview.svg\",\n \"name\": \"machine-overview\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/notifications.svg\",\n \"name\": \"notifications\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/process-done.svg\",\n \"name\": \"process-done\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/process-error.svg\",\n \"name\": \"process-error\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/process-working.svg\",\n \"name\": \"process-working\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/process.svg\",\n \"name\": \"process\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 38\n }\n },\n {\n \"path\": \"assets/icons/38px/production-order-2.svg\",\n \"name\": \"production-order-2\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 40\n }\n },\n {\n \"path\": \"assets/icons/38px/profile.svg\",\n \"name\": \"profile\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/reports.svg\",\n \"name\": \"reports\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/schedule-38px.svg\",\n \"name\": \"schedule-38px\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/settings-38px.svg\",\n \"name\": \"settings-38px\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/texfab.svg\",\n \"name\": \"texfab\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/textile.svg\",\n \"name\": \"textile\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n },\n {\n \"path\": \"assets/icons/38px/update.svg\",\n \"name\": \"update\",\n \"dimensions\": {\n \"width\": 38,\n \"height\": 39\n }\n }\n ]\n },\n {\n \"size\": \"52px\",\n \"icons\": [\n {\n \"path\": \"assets/icons/52px/error-full-52px.svg\",\n \"name\": \"error-full-52px\",\n \"dimensions\": {\n \"width\": 52,\n \"height\": 52\n }\n },\n {\n \"path\": \"assets/icons/52px/info-52px.svg\",\n \"name\": \"info-52px\",\n \"dimensions\": {\n \"width\": 52,\n \"height\": 52\n }\n },\n {\n \"path\": \"assets/icons/52px/manual-stop.svg\",\n \"name\": \"manual-stop\",\n \"dimensions\": {\n \"width\": 52,\n \"height\": 52\n }\n },\n {\n \"path\": \"assets/icons/52px/warning-full-52px.svg\",\n \"name\": \"warning-full-52px\",\n \"dimensions\": {\n \"width\": 52,\n \"height\": 52\n }\n }\n ]\n },\n {\n \"size\": \"illustrations\",\n \"icons\": [\n {\n \"path\": \"assets/icons/illustrations/atoms-arrow.svg\",\n \"name\": \"atoms-arrow\",\n \"dimensions\": {\n \"width\": 24,\n \"height\": 24\n }\n },\n {\n \"path\": \"assets/icons/illustrations/edit-with-container.svg\",\n \"name\": \"edit-with-container\",\n \"dimensions\": {\n \"width\": 46,\n \"height\": 46\n }\n },\n {\n \"path\": \"assets/icons/illustrations/empty-2.svg\",\n \"name\": \"empty-2\",\n \"dimensions\": {\n \"width\": 100,\n \"height\": 72\n }\n },\n {\n \"path\": \"assets/icons/illustrations/empty.svg\",\n \"name\": \"empty\",\n \"dimensions\": {\n \"width\": 269,\n \"height\": 213\n }\n },\n {\n \"path\": \"assets/icons/illustrations/error-with-container.svg\",\n \"name\": \"error-with-container\",\n \"dimensions\": {\n \"width\": 32,\n \"height\": 32\n }\n },\n {\n \"path\": \"assets/icons/illustrations/fetching.svg\",\n \"name\": \"fetching\",\n \"dimensions\": {\n \"width\": 160,\n \"height\": 112\n }\n },\n {\n \"path\": \"assets/icons/illustrations/img-404.svg\",\n \"name\": \"img-404\",\n \"dimensions\": {\n \"width\": 272,\n \"height\": 188\n }\n },\n {\n \"path\": \"assets/icons/illustrations/img-loading.svg\",\n \"name\": \"img-loading\",\n \"dimensions\": {\n \"width\": 268,\n \"height\": 214\n }\n },\n {\n \"path\": \"assets/icons/illustrations/not-found.svg\",\n \"name\": \"not-found\",\n \"dimensions\": {\n \"width\": 269,\n \"height\": 192\n }\n },\n {\n \"path\": \"assets/icons/illustrations/report-warning.svg\",\n \"name\": \"report-warning\",\n \"dimensions\": {\n \"width\": 180,\n \"height\": 125\n }\n },\n {\n \"path\": \"assets/icons/illustrations/rotate-device.svg\",\n \"name\": \"rotate-device\",\n \"dimensions\": {\n \"width\": 268,\n \"height\": 214\n }\n },\n {\n \"path\": \"assets/icons/illustrations/unauthorized.svg\",\n \"name\": \"unauthorized\",\n \"dimensions\": {\n \"width\": 272,\n \"height\": 188\n }\n },\n {\n \"path\": \"assets/icons/illustrations/update-available-center-image.svg\",\n \"name\": \"update-available-center-image\",\n \"dimensions\": {\n \"width\": 264,\n \"height\": 170\n }\n },\n {\n \"path\": \"assets/icons/illustrations/uploading.svg\",\n \"name\": \"uploading\",\n \"dimensions\": {\n \"width\": 277,\n \"height\": 214\n }\n },\n {\n \"path\": \"assets/icons/illustrations/version-info.svg\",\n \"name\": \"version-info\",\n \"dimensions\": {\n \"width\": 264,\n \"height\": 170\n }\n }\n ]\n },\n {\n \"size\": \"patterns\",\n \"icons\": [\n {\n \"path\": \"assets/icons/patterns/diagonal-pattern.svg\",\n \"name\": \"diagonal-pattern\",\n \"dimensions\": {\n \"width\": 72,\n \"height\": 12\n }\n },\n {\n \"path\": \"assets/icons/patterns/dotted-pattern.svg\",\n \"name\": \"dotted-pattern\",\n \"dimensions\": {\n \"width\": 72,\n \"height\": 8\n }\n },\n {\n \"path\": \"assets/icons/patterns/line-pattern.svg\",\n \"name\": \"line-pattern\",\n \"dimensions\": {\n \"width\": 72,\n \"height\": 4\n }\n },\n {\n \"path\": \"assets/icons/patterns/striped-pattern.svg\",\n \"name\": \"striped-pattern\",\n \"dimensions\": {\n \"width\": 72,\n \"height\": 4\n }\n }\n ]\n }\n];\n","// IMPORTANT: THIS IS A GENERATED FILE AND SHOULD NOT BE EDITED OR CHECKED INTO VERSION CONTROL!\n/* eslint-disable */\nexport const SOLID_ICONS = [\n {\n \"path\": \"assets/solid-icons/progress-activity.svg\",\n \"name\": \"progress-activity\"\n },\n {\n \"path\": \"assets/solid-icons/solid-add.svg\",\n \"name\": \"solid-add\"\n },\n {\n \"path\": \"assets/solid-icons/solid-analytics.svg\",\n \"name\": \"solid-analytics\"\n },\n {\n \"path\": \"assets/solid-icons/solid-arrow-back.svg\",\n \"name\": \"solid-arrow-back\"\n },\n {\n \"path\": \"assets/solid-icons/solid-arrow-downward-alt.svg\",\n \"name\": \"solid-arrow-downward-alt\"\n },\n {\n \"path\": \"assets/solid-icons/solid-arrow-upward-alt.svg\",\n \"name\": \"solid-arrow-upward-alt\"\n },\n {\n \"path\": \"assets/solid-icons/solid-article.svg\",\n \"name\": \"solid-article\"\n },\n {\n \"path\": \"assets/solid-icons/solid-block.svg\",\n \"name\": \"solid-block\"\n },\n {\n \"path\": \"assets/solid-icons/solid-build.svg\",\n \"name\": \"solid-build\"\n },\n {\n \"path\": \"assets/solid-icons/solid-calendar-month.svg\",\n \"name\": \"solid-calendar-month\"\n },\n {\n \"path\": \"assets/solid-icons/solid-calendar-today.svg\",\n \"name\": \"solid-calendar-today\"\n },\n {\n \"path\": \"assets/solid-icons/solid-check-small.svg\",\n \"name\": \"solid-check-small\"\n },\n {\n \"path\": \"assets/solid-icons/solid-check.svg\",\n \"name\": \"solid-check\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-checked-disabled.svg\",\n \"name\": \"solid-checkbox-checked-disabled\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-checked-invalid.svg\",\n \"name\": \"solid-checkbox-checked-invalid\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-checked.svg\",\n \"name\": \"solid-checkbox-checked\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-indeterminate.svg\",\n \"name\": \"solid-checkbox-indeterminate\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-unchecked-disabled.svg\",\n \"name\": \"solid-checkbox-unchecked-disabled\"\n },\n {\n \"path\": \"assets/solid-icons/solid-checkbox-unchecked.svg\",\n \"name\": \"solid-checkbox-unchecked\"\n },\n {\n \"path\": \"assets/solid-icons/solid-close.svg\",\n \"name\": \"solid-close\"\n },\n {\n \"path\": \"assets/solid-icons/solid-colorize.svg\",\n \"name\": \"solid-colorize\"\n },\n {\n \"path\": \"assets/solid-icons/solid-content-copy.svg\",\n \"name\": \"solid-content-copy\"\n },\n {\n \"path\": \"assets/solid-icons/solid-create.svg\",\n \"name\": \"solid-create\"\n },\n {\n \"path\": \"assets/solid-icons/solid-delete.svg\",\n \"name\": \"solid-delete\"\n },\n {\n \"path\": \"assets/solid-icons/solid-density-large.svg\",\n \"name\": \"solid-density-large\"\n },\n {\n \"path\": \"assets/solid-icons/solid-density-medium.svg\",\n \"name\": \"solid-density-medium\"\n },\n {\n \"path\": \"assets/solid-icons/solid-density-small.svg\",\n \"name\": \"solid-density-small\"\n },\n {\n \"path\": \"assets/solid-icons/solid-do-not-disturb-off.svg\",\n \"name\": \"solid-do-not-disturb-off\"\n },\n {\n \"path\": \"assets/solid-icons/solid-do-not-disturb-on.svg\",\n \"name\": \"solid-do-not-disturb-on\"\n },\n {\n \"path\": \"assets/solid-icons/solid-download.svg\",\n \"name\": \"solid-download\"\n },\n {\n \"path\": \"assets/solid-icons/solid-drag-indicator.svg\",\n \"name\": \"solid-drag-indicator\"\n },\n {\n \"path\": \"assets/solid-icons/solid-duplicate.svg\",\n \"name\": \"solid-duplicate\"\n },\n {\n \"path\": \"assets/solid-icons/solid-edit-document.svg\",\n \"name\": \"solid-edit-document\"\n },\n {\n \"path\": \"assets/solid-icons/solid-edit.svg\",\n \"name\": \"solid-edit\"\n },\n {\n \"path\": \"assets/solid-icons/solid-error-circle-rounded.svg\",\n \"name\": \"solid-error-circle-rounded\"\n },\n {\n \"path\": \"assets/solid-icons/solid-execute.svg\",\n \"name\": \"solid-execute\"\n },\n {\n \"path\": \"assets/solid-icons/solid-expand-more.svg\",\n \"name\": \"solid-expand-more\"\n },\n {\n \"path\": \"assets/solid-icons/solid-file-copy.svg\",\n \"name\": \"solid-file-copy\"\n },\n {\n \"path\": \"assets/solid-icons/solid-filter-list.svg\",\n \"name\": \"solid-filter-list\"\n },\n {\n \"path\": \"assets/solid-icons/solid-forklift.svg\",\n \"name\": \"solid-forklift\"\n },\n {\n \"path\": \"assets/solid-icons/solid-grid-view.svg\",\n \"name\": \"solid-grid-view\"\n },\n {\n \"path\": \"assets/solid-icons/solid-help.svg\",\n \"name\": \"solid-help\"\n },\n {\n \"path\": \"assets/solid-icons/solid-image.svg\",\n \"name\": \"solid-image\"\n },\n {\n \"path\": \"assets/solid-icons/solid-insights.svg\",\n \"name\": \"solid-insights\"\n },\n {\n \"path\": \"assets/solid-icons/solid-keyboard-arrow-down.svg\",\n \"name\": \"solid-keyboard-arrow-down\"\n },\n {\n \"path\": \"assets/solid-icons/solid-keyboard-arrow-right.svg\",\n \"name\": \"solid-keyboard-arrow-right\"\n },\n {\n \"path\": \"assets/solid-icons/solid-keyboard-arrow-up.svg\",\n \"name\": \"solid-keyboard-arrow-up\"\n },\n {\n \"path\": \"assets/solid-icons/solid-keyboard-double-arrow-left.svg\",\n \"name\": \"solid-keyboard-double-arrow-left\"\n },\n {\n \"path\": \"assets/solid-icons/solid-keyboard-double-arrow-right.svg\",\n \"name\": \"solid-keyboard-double-arrow-right\"\n },\n {\n \"path\": \"assets/solid-icons/solid-list-alt.svg\",\n \"name\": \"solid-list-alt\"\n },\n {\n \"path\": \"assets/solid-icons/solid-list.svg\",\n \"name\": \"solid-list\"\n },\n {\n \"path\": \"assets/solid-icons/solid-menu.svg\",\n \"name\": \"solid-menu\"\n },\n {\n \"path\": \"assets/solid-icons/solid-monitoring.svg\",\n \"name\": \"solid-monitoring\"\n },\n {\n \"path\": \"assets/solid-icons/solid-more-vert.svg\",\n \"name\": \"solid-more-vert\"\n },\n {\n \"path\": \"assets/solid-icons/solid-nest-clock-farsight-analog.svg\",\n \"name\": \"solid-nest-clock-farsight-analog\"\n },\n {\n \"path\": \"assets/solid-icons/solid-notifications.svg\",\n \"name\": \"solid-notifications\"\n },\n {\n \"path\": \"assets/solid-icons/solid-open-in-full.svg\",\n \"name\": \"solid-open-in-full\"\n },\n {\n \"path\": \"assets/solid-icons/solid-open-in-new.svg\",\n \"name\": \"solid-open-in-new\"\n },\n {\n \"path\": \"assets/solid-icons/solid-plan.svg\",\n \"name\": \"solid-plan\"\n },\n {\n \"path\": \"assets/solid-icons/solid-processing.svg\",\n \"name\": \"solid-processing\"\n },\n {\n \"path\": \"assets/solid-icons/solid-push-pin.svg\",\n \"name\": \"solid-push-pin\"\n },\n {\n \"path\": \"assets/solid-icons/solid-radio-button-checked.svg\",\n \"name\": \"solid-radio-button-checked\"\n },\n {\n \"path\": \"assets/solid-icons/solid-radio-button-unchecked.svg\",\n \"name\": \"solid-radio-button-unchecked\"\n },\n {\n \"path\": \"assets/solid-icons/solid-replan.svg\",\n \"name\": \"solid-replan\"\n },\n {\n \"path\": \"assets/solid-icons/solid-schedule.svg\",\n \"name\": \"solid-schedule\"\n },\n {\n \"path\": \"assets/solid-icons/solid-search-off.svg\",\n \"name\": \"solid-search-off\"\n },\n {\n \"path\": \"assets/solid-icons/solid-search.svg\",\n \"name\": \"solid-search\"\n },\n {\n \"path\": \"assets/solid-icons/solid-send.svg\",\n \"name\": \"solid-send\"\n },\n {\n \"path\": \"assets/solid-icons/solid-settings.svg\",\n \"name\": \"solid-settings\"\n },\n {\n \"path\": \"assets/solid-icons/solid-star-rate.svg\",\n \"name\": \"solid-star-rate\"\n },\n {\n \"path\": \"assets/solid-icons/solid-star.svg\",\n \"name\": \"solid-star\"\n },\n {\n \"path\": \"assets/solid-icons/solid-storefront.svg\",\n \"name\": \"solid-storefront\"\n },\n {\n \"path\": \"assets/solid-icons/solid-swap-vert.svg\",\n \"name\": \"solid-swap-vert\"\n },\n {\n \"path\": \"assets/solid-icons/solid-textarea.svg\",\n \"name\": \"solid-textarea\"\n },\n {\n \"path\": \"assets/solid-icons/solid-tune.svg\",\n \"name\": \"solid-tune\"\n },\n {\n \"path\": \"assets/solid-icons/solid-unfold-more.svg\",\n \"name\": \"solid-unfold-more\"\n },\n {\n \"path\": \"assets/solid-icons/solid-view-list.svg\",\n \"name\": \"solid-view-list\"\n },\n {\n \"path\": \"assets/solid-icons/solid-visibility-off.svg\",\n \"name\": \"solid-visibility-off\"\n },\n {\n \"path\": \"assets/solid-icons/solid-visibility.svg\",\n \"name\": \"solid-visibility\"\n },\n {\n \"path\": \"assets/solid-icons/solid-width.svg\",\n \"name\": \"solid-width\"\n },\n {\n \"path\": \"assets/solid-icons/solid-zoom-in.svg\",\n \"name\": \"solid-zoom-in\"\n },\n {\n \"path\": \"assets/solid-icons/solid-zoom-out.svg\",\n \"name\": \"solid-zoom-out\"\n }\n];\n","import {Color} from './color';\n\nexport class ColorStubFactory {\n public static getRandomColor(): Color {\n return this.getRandomColorWithId(1);\n }\n\n public static getRandomColorWithId(id: number): Color {\n return this.getRandomColorWithIdAndColorCode(id, '#000000');\n }\n\n public static getRandomColorWithIdAndName(id: number, name: string): Color {\n return this.getRandomColorWithIdNameAndColorCode(id, name, '#000000');\n }\n\n public static getRandomColorWithIdAndColorCode(id: number, colorCode: string): Color {\n return this.getRandomColorWithIdNameAndColorCode(id, `COLOR_${id}`, colorCode);\n }\n\n public static getRandomColorWithIdNameAndColorCode(id: number, name: string, colorCode: string): Color {\n return new Color(\n id,\n name,\n {\n red: parseInt(colorCode.substring(1, 3), 16),\n green: parseInt(colorCode.substring(3, 5), 16),\n blue: parseInt(colorCode.substring(5, 7), 16)\n },\n false,\n 'tomato',\n 'a tomato description'\n );\n }\n}\n","import {NgModule} from '@angular/core';\nimport {BreakpointResponsivenessViewModeService} from './breakpoint-responsiveness-view-mode.service';\nimport {ResponsiveClassDirective} from './responsive-class.directive';\nimport {RESPONSIVENESS_VIEW_MODE} from './responsiveness-view.mode';\n\n@NgModule({\n declarations: [ResponsiveClassDirective],\n exports: [ResponsiveClassDirective],\n providers: [{provide: RESPONSIVENESS_VIEW_MODE, useClass: BreakpointResponsivenessViewModeService}]\n})\nexport class ResponsivenessModule {}\n","export class BidirectionalMap {\n private forwardMap = new Map();\n private reverseMap = new Map();\n\n public constructor(entries: [K, V][]) {\n for (const [key, value] of entries) {\n this.setMaps(key, value);\n }\n }\n\n public getValue(key: K): V | undefined {\n return this.forwardMap.get(key);\n }\n\n public getKey(value: V): K | undefined {\n return this.reverseMap.get(value);\n }\n\n private setMaps(key: K, value: V): void {\n this.forwardMap.set(key, value);\n this.reverseMap.set(value, key);\n }\n}\n","import {ConvertDentsToMillimetersParameters} from './convert-dents-to-millimeters-parameters';\n\nexport function convertDentsToMillimeters(convertDentsToMillimetersParameters: ConvertDentsToMillimetersParameters): number {\n return Math.round(convertDentsToMillimetersParameters.valueInDents / convertDentsToMillimetersParameters.factorForConversionFromMillimetersToDents);\n}\n","import {calculateWidthInPixelsForThreadByThread} from './calculate-width-in-pixels-for-thread-by-thread';\n\nexport function convertDentsToPixels(dents: number, threadByThread: boolean, nrColumnsForWeftSelection: number, nrCloths: number, nrGroundYarns: number): number {\n return threadByThread ? calculateWidthInPixelsForThreadByThread(dents, nrColumnsForWeftSelection, nrCloths, nrGroundYarns) : dents;\n}\n","export function calculateWidthInPixelsForThreadByThread(widthInDents: number, nrColumnsForWeftSelection: number, nrCloths: number, nrGroundYarns: number): number {\n let widthInPixels = widthInDents;\n if (nrGroundYarns > 0) {\n let numberOfPixelsPerDent = nrGroundYarns / Math.max(1, nrCloths);\n widthInPixels *= numberOfPixelsPerDent;\n }\n return widthInPixels + nrColumnsForWeftSelection;\n}\n","export function convertDentsToWidthInMeter(dents: number, reedDensityInDentsPerMeter: number): number {\n return reedDensityInDentsPerMeter > 0.0 ? dents / reedDensityInDentsPerMeter : 0.0;\n}\n","import {leastCommonMultiple} from '@application/helper/textile-data/colored-yarn-set/least-common-multiple';\nimport {WeaveStructureForProductionSchedule} from '@domain/production-schedule/weave-structure-for-production-schedule';\n\nexport function convertHeightInMeterToPicks(heightInMeter: number, pickDensityInPicksPerMeter: number, weaveStructure: WeaveStructureForProductionSchedule): number {\n const commonMultiple = leastCommonMultiple(weaveStructure?.picksPerColorLine ?? 1, weaveStructure?.sendRepeat ?? 2);\n if (Math.ceil(heightInMeter * pickDensityInPicksPerMeter) % commonMultiple !== 0) {\n return Math.ceil(heightInMeter * pickDensityInPicksPerMeter);\n } else {\n return Math.ceil(heightInMeter * pickDensityInPicksPerMeter) + (Math.ceil(heightInMeter * pickDensityInPicksPerMeter) % commonMultiple);\n }\n}\n","import {isEqual} from 'lodash-es';\n\nexport function convertMachineOrderIdIfLegacy(machineOrderId: string): string {\n const amountOfNumbersInLegacyMachineOrderId = 7;\n const amountOfNumbersInGivenMachineOrderId = machineOrderId.replace(/\\D/g, '').length;\n\n if (isEqual(amountOfNumbersInLegacyMachineOrderId, amountOfNumbersInGivenMachineOrderId)) {\n const indexOfFirstDigit = machineOrderId.search(/\\d/);\n\n machineOrderId = [machineOrderId.slice(0, indexOfFirstDigit), '3000', machineOrderId.slice(indexOfFirstDigit)].join('');\n }\n\n return machineOrderId;\n}\n","export function convertMillimetersToPixels(numberInMM: number, dpi: number): number {\n return (numberInMM * dpi) / 25.4583;\n}\n","export function convertPicksToHeightInMeter(picks: number, pickDensityInPicksPerMeter: number): number {\n return pickDensityInPicksPerMeter > 0.0 ? picks / pickDensityInPicksPerMeter : 0.0;\n}\n","export function convertPicksToPixels(pixels: number, nrPicksPerColorLine: number): number {\n return nrPicksPerColorLine > 0 ? Math.round(pixels / nrPicksPerColorLine) : pixels;\n}\n","import {convertPicksToHeightInMeter} from './convert-picks-to-height-in-meter';\n\nexport function convertPixelsToHeightInMeter(pixels: number, pickDensityInPicksPerMeter: number, nrPicksPerColorline: number): number {\n return convertPicksToHeightInMeter(pixels * nrPicksPerColorline, pickDensityInPicksPerMeter);\n}\n","export function convertPixelsToMillimeters(numberInPx: number, dpi: number): number {\n return (numberInPx * 26.4583) / dpi;\n}\n","export function convertPixelsToPicks(pixels: number, nrPicksPerColorLine: number): number {\n return pixels * nrPicksPerColorLine;\n}\n","import {Duration} from 'luxon';\nimport {unitOfTime} from 'moment';\n\nexport class TimeUtils {\n public static readonly HOURS_IN_A_DAY = 24;\n public static readonly SECOND_IN_MS = 1000;\n public static readonly SECONDS_IN_A_MINUTE = 60;\n public static readonly MINUTES_IN_AN_HOUR = 60;\n public static readonly MINUTE_IN_MS = TimeUtils.SECOND_IN_MS * TimeUtils.SECONDS_IN_A_MINUTE;\n public static readonly HOUR_IN_MS = TimeUtils.MINUTE_IN_MS * TimeUtils.MINUTES_IN_AN_HOUR;\n public static readonly SECONDS_IN_A_HOUR = TimeUtils.MINUTES_IN_AN_HOUR * TimeUtils.SECONDS_IN_A_MINUTE;\n\n public static readonly MILLISECONDS_UNIT: unitOfTime.Base = 'milliseconds';\n\n /**\n * Converts a given datetime object to a UTC date object.\n *\n * @param date - The date to be converted.\n * @returns The UTC date object with the time dismissed\n * example: 2021-08-25T02:13:22+02:00 => 2021-08-25T00:00:00.000Z\n */\n public static convertToUTCDate(date: Date): Date {\n return new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n }\n\n public static convertTimeSpanToDuration(time: string): Duration {\n const parts = time.split(/[.:]/).map(Number);\n\n let duration: Duration;\n if (parts.length === 4) {\n const [days, hours, minutes, seconds] = parts;\n duration = Duration.fromObject({days, hours, minutes, seconds});\n } else if (parts.length === 3) {\n const [hours, minutes, seconds] = parts;\n duration = Duration.fromObject({hours, minutes, seconds});\n }\n\n return duration;\n }\n}\n","import {AssertionUtils} from '../utils/assertion-utils';\nimport {TimeUtils} from '../utils/time-utils';\n\nexport function convertSpeedAndCycleTime(value: number): number {\n if (!AssertionUtils.isNullOrUndefined(value) && value !== 0) {\n return TimeUtils.SECONDS_IN_A_MINUTE / value;\n }\n\n return value;\n}\n","export function convertWidthInMeterToDents(widthInMeter: number, reedDensityInDentsPerMeter: number, marginInDents: number): number {\n return Math.round(widthInMeter * reedDensityInDentsPerMeter + marginInDents);\n}\n","export class Conflict {\n private _id: number;\n private _name: string;\n private _type: string;\n\n public constructor(id: number, name: string, type: string) {\n this._id = id;\n this._name = name;\n this._type = type;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get type(): string {\n return this._type;\n }\n\n public static fromJSON(conflictJSON: any): Conflict {\n return new Conflict(conflictJSON.id, conflictJSON.name, conflictJSON.type);\n }\n}\n","export enum DesignFileType {\n BMP = '.bmp',\n EP = '.ep',\n TFT = '.tft',\n PVD = '.pvd'\n}\n","export enum Priority {\n LOW = 'LOW',\n MEDIUM = 'MEDIUM',\n HIGH = 'HIGH'\n}\n","export enum TemporaryStateKey {\n EVENT,\n WEAVE_QUALITY,\n DEVICE_TEMPLATE,\n PRODUCTION_SCHEDULE,\n REJECT_REASON\n}\n","import {Injectable} from '@angular/core';\nimport {TemporaryStateKey} from './temporary-state-key.enum';\nimport {TemporaryState} from './temporary-state.interface';\n\n@Injectable({providedIn: 'root'})\nexport class TemporaryStateService {\n private temporaryState: TemporaryState;\n\n public getTemporaryState(key: TemporaryStateKey): T {\n return this.temporaryState && this.temporaryState?.key === key ? this.temporaryState.value : null;\n }\n\n public setTemporaryState(temporaryState: TemporaryState): void {\n this.temporaryState = temporaryState;\n }\n\n public clear(): void {\n this.temporaryState = null;\n }\n}\n","export enum UnitType {\n TECHNICAL = 'TECHNICAL',\n COMMERCIAL = 'COMMERCIAL'\n}\n","import {AssertionUtils} from './assertion-utils';\n\nexport class ArrayUtils {\n public static arrayMove(array: T[], from: number, to: number): void {\n array.splice(to < 0 ? array.length + to : to, 0, array.splice(from, 1)[0]);\n }\n\n public static filterArrayOnAllProperties(array: T[], filterText: string): T[] {\n return array.filter((object: T) => {\n let result = false;\n\n for (const [key, value] of Object.entries(object)) {\n if (!AssertionUtils.isNullOrUndefined(value) && key !== '_id' && value.toString().toLowerCase().includes(filterText.toLowerCase())) {\n result = true;\n }\n }\n return result;\n });\n }\n\n public static arrayReverseIndex(array: T[], index: number): number {\n return array.length - index;\n }\n\n public static sum(array: number[]): number {\n if (!array || array.length === 0) {\n return 0;\n }\n return array.reduce((accumulator: number, currentValue: number) => accumulator + (currentValue || 0));\n }\n\n public static convertFalsyValuesToZeroAndGetMaxValue(array: number[]): number {\n if (!array || array.length === 0) {\n return undefined;\n }\n const validArray = array.map((x: number) => x || 0);\n return Math.max(...validArray);\n }\n\n public static distinctBy(list: TItem[], selectorFn: (item: TItem) => TKey): TItem[] {\n if (AssertionUtils.isEmpty(list)) {\n return list;\n }\n return Array.from(new Set(list.map(selectorFn))).map((property: TKey) => list.find((item: TItem) => selectorFn(item) === property));\n }\n\n public static groupBy(list: TItem[], selectorFn: (item: TItem) => TKey): Map {\n const result = new Map();\n for (const item of list) {\n const key = selectorFn(item);\n let group = result.get(key);\n if (group === undefined) {\n group = [];\n result.set(key, group);\n }\n group.push(item);\n }\n return result;\n }\n\n public static sortByKey(array: T[], key: keyof T): T[] {\n ArrayUtils.sortBy(\n array,\n (item: T) => item[key],\n (a: any, b: any) => a.localeCompare(b)\n );\n return array;\n }\n\n public static sortBy(array: TParent[], selector: (item: TParent) => TChild, compare?: (a: TChild, b: TChild) => number): void {\n compare ??= (a: any, b: any): number => a - b;\n array?.sort((a: TParent, b: TParent) => compare(selector(a), selector(b)));\n }\n\n public static toSortedBy(array: TParent[], selector: (item: TParent) => TChild, compare?: (a: TChild, b: TChild) => number): TParent[] {\n const copy = [...array];\n ArrayUtils.sortBy(copy, selector, compare);\n return copy;\n }\n\n public static haveSameContent(array1: T[], array2: T[], areEqual?: (item1: T, item2: T) => boolean): boolean {\n areEqual ??= (item1: T, item2: T): boolean => item1 === item2;\n return array1 === array2 || (array1.length === array2.length && array1.every((value: T, index: number) => areEqual(value, array2[index])));\n }\n\n public static pull(sourceArray: T[], ...removeList: T[]): T[] {\n const removeSet = new Set(removeList);\n return sourceArray.filter((el: T) => !removeSet.has(el));\n }\n\n public static readonly descending = (a: number, b: number): number => b - a;\n public static readonly ascending = (a: number, b: number): number => a - b;\n}\n","export class BlobUtils {\n public static blobToImageData(blob: Blob): Promise {\n return new Promise((resolve: (string) => void) => {\n const reader = new FileReader();\n reader.onload = (event: ProgressEvent): void => resolve((event.target as FileReader).result as string);\n reader.readAsDataURL(blob);\n });\n }\n\n public static blobToArrayBuffer(blob: Blob): Promise {\n return new Promise((resolve: (string) => void) => {\n const reader = new FileReader();\n reader.onload = (event: ProgressEvent): void => resolve((event.target as FileReader).result as ArrayBuffer);\n reader.readAsArrayBuffer(blob);\n });\n }\n}\n","export class BooleanUtils {\n public static booleanComparator(valueA: boolean, valueB: boolean): number {\n const comparison = valueA > valueB ? 1 : -1;\n return valueA === valueB ? 0 : comparison;\n }\n}\n","export class FractionUtils {\n public static fractionComparator(valueA: string, valueB: string): number {\n const [numeratorA, denominatorA] = valueA.split('/').map(Number);\n const [numeratorB, denominatorB] = valueB.split('/').map(Number);\n const comparison = numeratorA * denominatorB - numeratorB * denominatorA;\n return comparison === 0 ? 0 : comparison > 0 ? 1 : -1;\n }\n}\n","import {Observable, Observer} from 'rxjs';\n\nexport function observeIntersection(target: HTMLElement, threshold: number = 0.1): Observable {\n return new Observable((observer: Observer) => {\n const intersectionObserver = new IntersectionObserver(\n (entries: IntersectionObserverEntry[]) => {\n observer.next(entries[entries.length - 1].isIntersecting);\n },\n {\n threshold\n }\n );\n\n intersectionObserver.observe(target);\n\n return function unsubscribe(): void {\n intersectionObserver.unobserve(target);\n intersectionObserver.disconnect();\n };\n });\n}\n","export class MathUtils {\n public static divide(numerator: number, denominator: number): number {\n const result = denominator !== 0 ? numerator / denominator : 0;\n return isFinite(result) && !isNaN(result) ? result : 0;\n }\n\n public static round(value: number, precision: number = 0): number {\n const modifier = 10 ** precision;\n return Math.round(value * modifier) / modifier;\n }\n}\n","export class NumberUtils {\n public static roundAwayFromZero(value: number): number {\n return Math.sign(value) * Math.round(Math.abs(value));\n }\n}\n","import {AssertionUtils} from './assertion-utils';\n\nexport class ObjectUtils {\n public static isDeepEqual(objectA: any, objectB: any): boolean {\n if ((objectA === null && objectB === null) || (objectA === undefined && objectB === undefined)) {\n return true;\n } else if (AssertionUtils.isNullOrUndefined(objectA) || AssertionUtils.isNullOrUndefined(objectB)) {\n return false;\n }\n\n const keysA = Object.keys(objectA);\n const keysB = Object.keys(objectB);\n\n if (keysA.length !== keysB.length) {\n return false;\n }\n\n for (const keyA of keysA) {\n const valueA = objectA[keyA];\n const valueB = objectB[keyA];\n const areObjects = ObjectUtils.isObject(valueA) && ObjectUtils.isObject(valueB);\n\n if ((areObjects && !ObjectUtils.isDeepEqual(valueA, valueB)) || (!areObjects && valueA !== valueB)) {\n return false;\n }\n }\n\n return true;\n }\n\n public static isObject(object: any): boolean {\n return !AssertionUtils.isNullOrUndefined(object) && typeof object === 'object';\n }\n\n public static parseNullable(json: any, parse: (json: any) => T): T {\n return AssertionUtils.isNullOrUndefined(json) ? null : parse(json);\n }\n\n public static tryGetValue(object: T1, replacement: T2): T1 | T2 {\n return AssertionUtils.isNullOrUndefined(object) ? replacement : object;\n }\n}\n","import {Route} from '@angular/router';\nimport {AssertionUtils} from './assertion-utils';\n\nexport class PrototypeRouteUtils {\n public static getAbsolutePath(routes: Route[], id: number, accumulatedPath: string = ''): string {\n const navigationItem = routes.find((route: Route) => route.data?.id === id);\n\n if (AssertionUtils.isNullOrUndefined(navigationItem)) {\n return '';\n }\n\n const data = navigationItem.data;\n\n let path = navigationItem.path + accumulatedPath;\n\n if (!AssertionUtils.isEmpty(navigationItem.path)) {\n path = '/' + path;\n }\n\n const parent = !AssertionUtils.isNullOrUndefined(data.parentId) ? routes.find((route: Route) => route.data?.id === data.parentId) : null;\n return !AssertionUtils.isNullOrUndefined(parent) ? this.getAbsolutePath(routes, parent.data.id, path) : path;\n }\n\n public static getPage(routes: Route[], path: '' | 'add' | 'add/:id' | 'edit/:id'): Route {\n return routes.find((route: Route) => route.path.endsWith(path));\n }\n\n public static isAddPath(path: string): boolean {\n return path?.endsWith('add') ?? false;\n }\n\n public static isEditPath(path: string): boolean {\n return path?.endsWith('edit/:id') ?? false;\n }\n\n public static isDuplicatePath(path: string): boolean {\n return path?.endsWith('add/:id') ?? false;\n }\n}\n","import {moment} from '../moment';\nimport {AssertionUtils} from '../utils/assertion-utils';\n\nexport class TimezoneUtils {\n public static convertToDateWithCurrentOffset(dateTimeString: string, timezoneCode: string): Date {\n let date: Date = null;\n\n if (!AssertionUtils.isNullOrUndefined(dateTimeString)) {\n const momentDate = moment(dateTimeString);\n const timezoneOffsetInMinutes = momentDate.clone().tz(timezoneCode).utcOffset();\n date = momentDate.add(timezoneOffsetInMinutes - momentDate.utcOffset(), 'minutes').toDate();\n }\n\n return date;\n }\n\n public static convertToISOStringWithoutCurrentOffset(date: Date, timezoneCode: string): string {\n const momentDate = moment(date);\n const timezoneOffsetInMinutes = momentDate.clone().tz(timezoneCode).utcOffset();\n\n return momentDate.subtract(timezoneOffsetInMinutes - momentDate.utcOffset(), 'minutes').toISOString();\n }\n}\n","import {Component} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {Unit} from './../../common/unit.enum';\nimport {CustomCellEditorRendererParams} from './custom-cell-editor-renderer-params.interface';\n\n@Component({\n templateUrl: './custom-cell-editor-renderer.component.html',\n styleUrls: ['./custom-cell-editor-renderer.component.scss']\n})\nexport class CustomCellEditorRendererComponent {\n public unit: Unit;\n public value = '';\n public isPlaceholder = false;\n\n public constructor() {}\n\n public agInit(params: CustomCellEditorRendererParams): void {\n this.value = AssertionUtils.isNullOrUndefined(params.value) ? params.placeholder : params.value;\n this.isPlaceholder = AssertionUtils.isNullOrUndefined(params.value);\n this.unit = params.unit;\n }\n}\n","
\n
\n {{ value }}\n
\n
{{ unit }}
\n
\n","export class ErrorDetails {\n private _errorKey: string;\n private _errorMessage: string;\n\n public constructor(errorKey: string, errorMessage: string) {\n this._errorKey = errorKey;\n this._errorMessage = errorMessage;\n }\n\n public get errorKey(): string {\n return this._errorKey;\n }\n\n public set errorKey(errorKey: string) {\n this._errorKey = errorKey;\n }\n\n public get errorMessage(): string {\n return this._errorMessage;\n }\n\n public set errorMessage(errorMessage: string) {\n this._errorMessage = errorMessage;\n }\n}\n","\n @if (isObjectSelection()) {\n \n } @else if (hasUnit()) {\n \n } @else {\n \n }\n\n @if (!isObjectSelection() && canShowClearInputButton()) {\n \n }\n\n @if (hasUnit()) {\n {{ unit }}\n }\n\n @if (canShowErrorMessage) {\n \n } @else if (notation) {\n \n }\n\n\n@if (notation) {\n \n}\n","import {AfterViewInit, Component, ElementRef, HostListener, OnDestroy, ViewChild} from '@angular/core';\nimport {UntypedFormControl, ValidatorFn, Validators} from '@angular/forms';\nimport {MatFormField} from '@angular/material/form-field';\nimport {ICellEditorAngularComp} from 'ag-grid-angular';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {TimePickerMenuComponent} from '../../custom-components/time-picker-form-input/time-picker-menu/time-picker-menu.component';\nimport {TranslateService} from '../../translation/translate.service';\nimport {BaseComponent} from './../../base-component';\nimport {Unit} from './../../common/unit.enum';\nimport {CustomCellEditorParams} from './custom-cell-editor-params.interface';\nimport {ErrorDetails} from './error-details';\nimport {Validation} from './validation';\n\n@Component({\n templateUrl: './custom-cell-editor.component.html',\n styleUrls: ['./custom-cell-editor.component.scss']\n})\nexport class CustomCellEditorComponent extends BaseComponent implements ICellEditorAngularComp, AfterViewInit, OnDestroy {\n @ViewChild('inputElement') public inputElement: any;\n @ViewChild(MatFormField, {read: ElementRef}) public formField: ElementRef;\n @ViewChild(TimePickerMenuComponent, {read: ElementRef}) public timePickerMenu: ElementRef;\n\n public min: number;\n public max: number;\n public unit: Unit | string;\n public notation: 12 | 24;\n public formControl: UntypedFormControl;\n public number: boolean;\n public multiple: boolean;\n public autoSelect: boolean = false;\n public allowDecimals: boolean = false;\n public maximumFractionDigits: number;\n public errorDetails: ErrorDetails[];\n public canShowErrorMessage: boolean = false;\n public placeholder: string = '';\n\n private required: boolean;\n private params: any;\n private defaultErrorDetails: ErrorDetails[];\n private focusableElements: HTMLElement[];\n private readonly POPUP_EDITOR_BORDER_WIDTH = 1.5;\n private readonly POPUP_EDITOR_BORDER_HEIGHT = 2;\n\n public constructor(\n private readonly el: ElementRef,\n private readonly translate: TranslateService\n ) {\n super();\n }\n\n @HostListener('keydown', ['$event']) public onKeyDown(event: KeyboardEvent): void {\n if (event.key === 'Tab' && this.params.colDef.cellEditorPopup) {\n const index = Array.prototype.indexOf.call(this.focusableElements, event.target);\n const nextElementIndex = index + (event.shiftKey ? -1 : 1);\n\n if (nextElementIndex >= 0 && nextElementIndex < this.focusableElements.length) {\n event.stopPropagation();\n }\n }\n }\n\n public agInit(params: CustomCellEditorParams): void {\n this.min = params.min;\n this.max = params.max;\n this.unit = params.unit;\n this.number = params.number ?? true;\n this.multiple = params.multiple ?? false;\n this.notation = params.notation;\n this.required = params.required ?? false;\n this.autoSelect = params.autoSelect;\n this.allowDecimals = params.allowDecimals;\n this.maximumFractionDigits = params.maximumFractionDigits;\n this.placeholder = params.placeholder;\n this.params = params;\n\n this.setValidations(params);\n this.setErrorMessages(params);\n\n this.subscribeToStatusChanges();\n }\n\n public ngAfterViewInit(): void {\n this.focusableElements = this.el.nativeElement.querySelectorAll('button:not([tabindex=\"-1\"]), input');\n this.setPopupStyle();\n }\n\n public hasUnit(): boolean {\n return !!this.unit;\n }\n\n public isObjectSelection(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.params.selectionService);\n }\n\n public stopClickEvent(event: PointerEvent): void {\n event.stopPropagation();\n }\n\n public getValue(): number {\n return this.formControl.value;\n }\n\n public preventDefaultOnMouseDown(event: MouseEvent): void {\n event.preventDefault();\n }\n\n public onModelChange(): void {\n this.params.api.dispatchEvent({type: 'cellValueChanged', event: {}});\n }\n\n public reset(event: MouseEvent): void {\n event.stopPropagation();\n event.preventDefault();\n this.formControl.reset();\n }\n\n public canShowClearInputButton(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.formControl.value) && this.params.cellStartedEdit;\n }\n\n public getErrorMessage(): string {\n return this.errorDetails.find((error: ErrorDetails) => error.errorKey === Object.keys(this.formControl.errors)[0]).errorMessage;\n }\n\n public selectObject(): void {\n setTimeout(() => document.querySelector('.mat-mdc-dialog-container')?.classList.add('ag-custom-component-popup'));\n\n this.params.selectionService.openContentSwitcherDialog(this.formControl.value, this.params.selectionData).subscribe((object: any[]) => {\n this.formControl.setValue(AssertionUtils.isEmpty(object) ? this.formControl.value : object);\n });\n }\n\n public getObjectName(): string {\n return this.params.colDef?.headerName.toLowerCase() ?? '';\n }\n\n private subscribeToStatusChanges(): void {\n this.formControl.statusChanges\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n map((valid: string) => valid === 'VALID')\n )\n .subscribe((valid: boolean) => {\n this.canShowErrorMessage = !valid;\n\n if (valid) {\n this.params.eGridCell?.classList?.remove('invalid');\n const propertyName = this.params.colDef?.colId ?? this.params.colDef?.field;\n const hasExistingError = this.params.data?.errors?.hasOwnProperty(propertyName);\n if (hasExistingError) {\n delete this.params.data.errors[propertyName];\n }\n } else {\n if (AssertionUtils.isNullOrUndefined(this.formControl.value) && this.formControl.hasError('badInput')) {\n delete this.formControl.errors['badInput'];\n this.formControl.updateValueAndValidity({emitEvent: false});\n } else {\n this.params.eGridCell?.classList?.add('invalid');\n this.setErrors();\n }\n }\n });\n }\n\n private setValidations(params: CustomCellEditorParams): void {\n let validations: ValidatorFn[] = [];\n let value = params.value;\n\n if (this.required) {\n validations.push(Validators.required);\n }\n\n if (this.number) {\n validations.push(Validators.min(params.min));\n validations.push(Validators.max(params.max));\n }\n\n if (params.validations?.length > 0) {\n validations = [...validations, ...params.validations.map((validation: Validation) => validation.validation)];\n }\n this.formControl = new UntypedFormControl(value, validations);\n this.formControl.markAsTouched();\n this.canShowErrorMessage = this.formControl.invalid;\n if (this.canShowErrorMessage) {\n this.setErrors();\n }\n }\n\n private setErrorMessages(params: CustomCellEditorParams): void {\n this.defaultErrorDetails = [\n new ErrorDetails('required', 'ANGULAR_COMPONENT_LIBRARY.CUSTOM_CELL_EDITOR.REQUIRED'),\n new ErrorDetails('min', this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CUSTOM_CELL_EDITOR.MIN_VALUE', {min: params.min})),\n new ErrorDetails('max', this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CUSTOM_CELL_EDITOR.MAX_VALUE', {max: params.max})),\n new ErrorDetails('badInput', 'GENERAL.ERRORS.INVALID_FORMAT.INVALID_FORMAT')\n ];\n\n this.errorDetails = this.defaultErrorDetails;\n\n if (params.validations?.length > 0) {\n this.errorDetails = [...this.errorDetails, ...params.validations.map((validation: Validation) => new ErrorDetails(validation.errorKey, validation.errorMessage))];\n }\n }\n\n private setPopupStyle(): void {\n if (this.params.colDef.cellEditorPopup) {\n const cellRect = this.params.eGridCell.getBoundingClientRect();\n this.formField.nativeElement.parentElement.classList.add('bms-theme');\n this.formField.nativeElement.style.width = `${cellRect.width - this.POPUP_EDITOR_BORDER_WIDTH}px`;\n this.formField.nativeElement.style.height = `${cellRect.height - this.POPUP_EDITOR_BORDER_HEIGHT}px`;\n this.timePickerMenu.nativeElement.style.top = `${cellRect.height}px`;\n }\n }\n\n private setErrors(): void {\n const propertyName = this.params.colDef?.colId ?? this.params.colDef.field;\n if (!AssertionUtils.isNullOrUndefined(this.params.data?.errors)) {\n this.params.data.errors[propertyName] = this.canShowErrorMessage;\n } else {\n this.params.data.errors = {[propertyName]: this.canShowErrorMessage};\n }\n }\n}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './disabled-row-group-cell-renderer.component.html',\n styleUrls: ['./disabled-row-group-cell-renderer.component.scss']\n})\nexport class DisabledRowGroupCellRendererComponent implements ICellRendererAngularComp {\n public value: number;\n public indentClass: string;\n public parentClass: string;\n\n public agInit(params: any): void {\n this.value = params.value;\n this.indentClass = `indent-${params.node.level}`;\n this.parentClass = `parent-level-${params.node.level}`;\n }\n\n public refresh(_: ICellRendererParams): boolean {\n return false;\n }\n}\n","
\n
{{ value }}
\n
\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n template: ''\n})\nexport class EmptyCellRendererComponent implements ICellRendererAngularComp {\n // eslint-disable-next-line no-empty-function\n public agInit(_: ICellRendererParams): void {}\n\n public refresh(_: ICellRendererParams): boolean {\n return false;\n }\n}\n","import {SortModelItem} from 'ag-grid-community';\n\nexport class GridModel {\n private _startRow: number;\n private _endRow: number;\n private _sortModel: SortModelItem[];\n private _filterModel: any;\n\n public constructor(startRow: number, endRow: number, sortModel: SortModelItem[], filterModel: any) {\n this._startRow = startRow;\n this._endRow = endRow;\n this._sortModel = sortModel ?? [];\n this._filterModel = filterModel;\n }\n\n public get startRow(): number {\n return this._startRow;\n }\n\n public set startRow(startRow: number) {\n this._startRow = startRow;\n }\n\n public get endRow(): number {\n return this._endRow;\n }\n\n public set endRow(endRow: number) {\n this._endRow = endRow;\n }\n\n public get sortModel(): SortModelItem[] {\n return this._sortModel;\n }\n\n public set sortModel(sortModel: SortModelItem[]) {\n this._sortModel = sortModel;\n }\n\n public get filterModel(): any {\n return this._filterModel;\n }\n\n public set filterModel(filterModel: any) {\n this._filterModel = filterModel;\n }\n\n public toJSON(): JSON {\n return {\n startRow: this._startRow,\n endRow: this._endRow,\n sortModel: this._sortModel,\n filterModel: this._filterModel\n } as any as JSON;\n }\n}\n","\n \n\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Component({\n templateUrl: './grid-checked-flag.component.html'\n})\nexport class GridCheckedFlagComponent implements ICellRendererAngularComp {\n private isDefault: boolean;\n\n public agInit(params: ICellRendererParams): void {\n this.isDefault = params.value;\n }\n\n public canShowIcon(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.isDefault);\n }\n\n public getIconName(): string {\n return this.isDefault ? 'checkmark' : 'close';\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {DateTimePipe} from './date-time.pipe';\n\n@NgModule({\n declarations: [DateTimePipe],\n exports: [DateTimePipe]\n})\nexport class DateTimePipeModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {DateRange, MatDatepickerContent, MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {DateTimePipeModule} from '../../custom-pipes/date-time-pipe/date-time-pipe.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {DatePickerComponent} from './date-picker/date-picker.component';\nimport {DateRangePickerComponent} from './date-range-picker/date-range-picker.component';\nimport {DatepickerHeaderComponent} from './datepicker-header/datepicker-header.component';\n\n/**\n * Custom fix to circumvent assumptions made by Angular Material developers about having additional buttons for a date-picker.\n *\n * By default, when buttons are added to the date-picker, the changes are not propagated, and the date-picker does not close automatically.\n * This is because they expect a 'confirm' button to be added. At time of writing, there is no supported way to add buttons while preserving the default behavior.\n * Original code can be found [here](https://github.com/angular/components/blob/22b68e0f20421f0c0fbc09cdaa1cc2614afbeaeb/src/material/datepicker/datepicker-base.ts#L227).\n *\n * Since this is a private method, this functionality should be reviewed whenever we update Angular Material.\n */\nfunction replaceHandleUserSelection(event: any): void {\n const selection = this._model.selection;\n const value = event.value;\n const isRange = selection instanceof DateRange;\n if (isRange && this._rangeSelectionStrategy) {\n const newSelection = this._rangeSelectionStrategy.selectionFinished(value, selection, event.event);\n this._model.updateSelection(newSelection, this);\n } else if (value && (isRange || !this._dateAdapter.sameDate(value, selection))) {\n this._model.add(value);\n }\n // added to propagate changes automatically from _model to _globalModel\n this._applyPendingSelection();\n // removed check that prevents closing when picker has an actions template\n if (!this._model || this._model.isComplete()) {\n this.datepicker.close();\n }\n}\n\nMatDatepickerContent.prototype._handleUserSelection = replaceHandleUserSelection;\n\n@NgModule({\n imports: [CommonModule, FlexLayoutModule, MatIconModule, MatButtonModule, TranslationModule, MatDatepickerModule, MatFormFieldModule, ReactiveFormsModule, DateTimePipeModule],\n exports: [DatepickerHeaderComponent, DatePickerComponent, DateRangePickerComponent],\n declarations: [DatepickerHeaderComponent, DatePickerComponent, DateRangePickerComponent]\n})\nexport class DatePickerModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {RouterModule} from '@angular/router';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {InputChipComponent} from './input-chip.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, RouterModule, LabelModule, MatButtonModule],\n exports: [InputChipComponent],\n declarations: [InputChipComponent]\n})\nexport class InputChipModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {InputChipModule} from '../input-chip/input-chip.module';\nimport {ObjectSelectionComponent} from '../object-selection/object-selection.component';\nimport {MatSelectModule} from '@angular/material/select';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {MatInputModule} from '@angular/material/input';\n\n@NgModule({\n imports: [\n CommonModule,\n MatFormFieldModule,\n TranslationModule,\n MatButtonModule,\n MatIconModule,\n InputChipModule,\n MatMenuModule,\n LabelModule,\n MatProgressSpinnerModule,\n MatSelectModule,\n ReactiveFormsModule,\n FormsModule,\n MatCheckboxModule,\n MatTooltipModule,\n MatInputModule\n ],\n exports: [ObjectSelectionComponent],\n declarations: [ObjectSelectionComponent]\n})\nexport class ObjectSelectionModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {TagComponent} from './tag.component';\n\n@NgModule({\n declarations: [TagComponent],\n imports: [CommonModule],\n exports: [TagComponent]\n})\nexport class TagModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {CanShowErrorForFormControlModule} from '../../custom-directives/can-show-error-for-context/can-show-error-for-form-control.module';\nimport {CommonFormsModule} from '../../forms/common-forms.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {TimePickerFormInputComponent} from './time-picker-form-input.component';\nimport {TimePickerMenuComponent} from './time-picker-menu/time-picker-menu.component';\n\n@NgModule({\n declarations: [TimePickerFormInputComponent, TimePickerMenuComponent],\n imports: [\n CommonModule,\n CommonFormsModule,\n MatButtonModule,\n MatDividerModule,\n MatFormFieldModule,\n MatIconModule,\n MatInputModule,\n ReactiveFormsModule,\n TranslationModule,\n CanShowErrorForFormControlModule\n ],\n exports: [TimePickerFormInputComponent, TimePickerMenuComponent]\n})\nexport class TimePickerFormInputModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {AutoFocusDirective} from './auto-focus.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AutoFocusDirective],\n exports: [AutoFocusDirective]\n})\nexport class AutoFocusModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {InputL10nDecimalDirective} from './input-l10n-decimal.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [InputL10nDecimalDirective],\n exports: [InputL10nDecimalDirective]\n})\nexport class InputL10nDecimalModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\nimport {MatSelectModule} from '@angular/material/select';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {RouterModule} from '@angular/router';\nimport {DatePickerModule} from '../custom-components/datepicker/datepicker.module';\nimport {LabelModule} from '../custom-components/ellipsis-label/label.module';\nimport {InputChipModule} from '../custom-components/input-chip/input-chip.module';\nimport {ObjectSelectionModule} from '../custom-components/object-selection/object-selection.module';\nimport {ProgressButtonModule} from '../custom-components/progress-button/progress-button.module';\nimport {TagModule} from '../custom-components/tag/tag.module';\nimport {TimePickerFormInputModule} from '../custom-components/time-picker-form-input/time-picker-form-input.module';\nimport {DateTimePipeModule} from '../custom-pipes/date-time-pipe/date-time-pipe.module';\nimport {TranslationModule} from '../translation/translation.module';\nimport {AutoFocusModule} from './../custom-directives/auto-focus/auto-focus.module';\nimport {InputL10nDecimalModule} from './../custom-directives/input-l10n-decimal/input-l10n-decimal.module';\nimport {CellButtonComponent} from './cell-button/cell-button.component';\nimport {CustomCellEditorComponent} from './custom-cell-editor/custom-cell-editor.component';\nimport {DisabledRowGroupCellRendererComponent} from './disabled-row-group-cell-renderer/disabled-row-group-cell-renderer.component';\nimport {EmptyCellRendererComponent} from './empty-cell-renderer/empty-cell-renderer.component';\nimport {GridCheckedFlagComponent} from './grid-checked-flag/grid-checked-flag.component';\nimport {GridTooltipComponent} from './grid-tooltip/grid-tooltip.component';\nimport {InputChipCellRendererComponent} from './input-chip-cell-renderer/input-chip-cell-renderer.component';\nimport {CheckboxCellEditorComponent} from './input/checkbox-cell-editor/checkbox-cell-editor.component';\nimport {GridInputComponent} from './input/grid-input.component';\nimport {ProgressCellRendererComponent} from './input/progress-cell-renderer/progress-cell-renderer.component';\nimport {LinkIconRendererComponent} from './link-icon-renderer/link-icon-renderer.component';\nimport {NumberCellEditorComponent} from './number-cell-editor/number-cell-editor.component';\nimport {NumberCellRendererComponent} from './number-cell-renderer/number-cell-renderer.component';\nimport {ObjectCellRendererComponent} from './object-cell-renderer/object-cell-renderer.component';\nimport {LoadingCellOverlayComponent} from './overlay/loading-cell-overlay/loading-cell-overlay.component';\nimport {LoadingOverlayComponent} from './overlay/loading-overlay/loading-overlay.component';\nimport {NoDataOverlayComponent} from './overlay/no-data-overlay/no-data-overlay.component';\nimport {OverlayActionsService} from './overlay/overlay-actions.service';\nimport {OverlayComponent} from './overlay/overlay/overlay.component';\nimport {StringCellEditorComponent} from './string-cell-editor/string-cell-editor.component';\nimport {StringCountCellRendererComponent} from './string-count/string-count-cell-renderer.component';\nimport {SuffixIconCellRendererComponent} from './suffix-icon-cell-renderer/suffix-icon-cell-renderer.component';\nimport {GridTagComponent} from './tag/grid-tag.component';\nimport {TooltipCellRendererComponent} from './tooltip-cell-renderer/tooltip-cell-renderer.component';\n\n@NgModule({\n imports: [\n LabelModule,\n CommonModule,\n TranslationModule,\n MatTooltipModule,\n MatIconModule,\n MatProgressSpinnerModule,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n MatSelectModule,\n FormsModule,\n ReactiveFormsModule,\n MatDatepickerModule,\n MatButtonModule,\n DatePickerModule,\n AutoFocusModule,\n TagModule,\n InputL10nDecimalModule,\n MatCheckboxModule,\n ProgressButtonModule,\n RouterModule,\n MatIconModule,\n MatMenuModule,\n TimePickerFormInputModule,\n DateTimePipeModule,\n InputChipModule,\n ObjectSelectionModule\n ],\n exports: [\n GridTagComponent,\n LoadingOverlayComponent,\n NoDataOverlayComponent,\n LoadingCellOverlayComponent,\n GridInputComponent,\n NumberCellEditorComponent,\n CellButtonComponent,\n NumberCellRendererComponent,\n ProgressCellRendererComponent,\n StringCellEditorComponent,\n GridTooltipComponent,\n CheckboxCellEditorComponent,\n StringCountCellRendererComponent,\n EmptyCellRendererComponent,\n GridCheckedFlagComponent,\n OverlayComponent,\n TooltipCellRendererComponent,\n LinkIconRendererComponent,\n CustomCellEditorComponent,\n DisabledRowGroupCellRendererComponent,\n InputChipCellRendererComponent,\n ObjectCellRendererComponent\n ],\n declarations: [\n GridTagComponent,\n LoadingOverlayComponent,\n NoDataOverlayComponent,\n LoadingCellOverlayComponent,\n GridInputComponent,\n NumberCellEditorComponent,\n CellButtonComponent,\n NumberCellRendererComponent,\n StringCellEditorComponent,\n GridTooltipComponent,\n CheckboxCellEditorComponent,\n StringCountCellRendererComponent,\n EmptyCellRendererComponent,\n GridCheckedFlagComponent,\n OverlayComponent,\n ProgressCellRendererComponent,\n TooltipCellRendererComponent,\n LinkIconRendererComponent,\n CustomCellEditorComponent,\n SuffixIconCellRendererComponent,\n DisabledRowGroupCellRendererComponent,\n InputChipCellRendererComponent,\n ObjectCellRendererComponent\n ],\n providers: [OverlayActionsService]\n})\nexport class GridUtilsModule {}\n","
\n @for (item of chips; track item.name) {\n \n }\n
\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './input-chip-cell-renderer.component.html'\n})\nexport class InputChipCellRendererComponent implements ICellRendererAngularComp {\n public chips: {id: number; name: string}[];\n\n public agInit(params: ICellRendererParams): void {\n this.chips = params.value;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {Component} from '@angular/core';\nimport {MatCheckboxChange} from '@angular/material/checkbox';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {CheckboxCellEditorParams} from './checkbox-cell-editor-params.interface';\n\n@Component({\n templateUrl: './checkbox-cell-editor.component.html',\n styleUrls: ['./checkbox-cell-editor.component.scss']\n})\nexport class CheckboxCellEditorComponent implements ICellRendererAngularComp {\n public params: CheckboxCellEditorParams;\n\n public agInit(params: CheckboxCellEditorParams): void {\n this.params = params;\n }\n\n public valueChanged(event: MatCheckboxChange): void {\n this.params.setValue(event.checked);\n }\n\n public refresh(_: ICellRendererParams): boolean {\n return true;\n }\n}\n","
\n \n
\n","
\n \n {{ getLabel() | bmsTranslate }}\n \n \n \n
\n","import {Component, ElementRef, ViewChild} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {isNil, isUndefined} from 'lodash-es';\nimport {GridInputCellRendererParams} from './grid-input-cell-renderer-params';\n\n@Component({\n styleUrls: ['./grid-input.component.scss'],\n templateUrl: './grid-input.component.html'\n})\nexport class GridInputComponent implements ICellRendererAngularComp {\n @ViewChild('inputElement') public inputElement: ElementRef;\n public updateValue: (rowData, value: number | string) => void;\n public minValue: number;\n public isConfigurableValue = false;\n private value: number | string;\n private canShowInput: (rowData) => boolean;\n private canShowRequiredError: (rowData, value: number | string) => boolean;\n private rowData: any;\n\n public agInit(params: GridInputCellRendererParams): void {\n this.canShowInput = params.canShowInput;\n this.canShowRequiredError = params.canShowRequiredError;\n this.value = params.value;\n this.updateValue = params.updateValue;\n this.minValue = params.minValue || null;\n this.rowData = params.node.data;\n this.isConfigurableValue = params.node.data.configurableValue;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public canShowInputElement(): boolean {\n return !isNil(this.canShowInput) && this.canShowInput(this.rowData);\n }\n\n public canShowRequiredErrorElement(): boolean {\n return !isNil(this.canShowRequiredError) && this.canShowRequiredError(this.rowData, this.value);\n }\n\n public canShowStringInput(): boolean {\n return this.isConfigurableValue && (this.rowData.name === 'alphabetic start' || this.rowData.name === 'alphanumeric start');\n }\n\n public getLabel(): string {\n return this.isConfigurableValue ? 'ANGULAR_COMPONENT_LIBRARY.GRID_INPUT.VALUE' : 'ANGULAR_COMPONENT_LIBRARY.GRID_INPUT.MAXIMUM_LENGTH';\n }\n\n public getValue(): string {\n return this.canShowStringInput && (isUndefined(this.value) || isNil(this.value)) ? '' : `${this.value}`.toUpperCase();\n }\n\n public setValue(value: string): void {\n if (value) {\n let valueToSet;\n if (this.canShowStringInput()) {\n valueToSet = value.toUpperCase();\n } else {\n valueToSet = Number(value);\n if (this.minValue && valueToSet < this.minValue) {\n valueToSet = this.minValue;\n }\n }\n this.updateValue(this.rowData, valueToSet);\n this.inputElement.nativeElement.value = valueToSet;\n this.value = valueToSet;\n } else {\n this.updateValue(this.rowData, null);\n this.inputElement.nativeElement.value = value;\n this.value = null;\n }\n }\n}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ProgressCellRendererParams} from './progress-cell-renderer-params.interface';\n\n@Component({\n templateUrl: './progress-cell-renderer.component.html',\n styleUrls: ['./progress-cell-renderer.component.scss']\n})\nexport class ProgressCellRendererComponent implements ICellRendererAngularComp {\n public params: ProgressCellRendererParams;\n public isSaving = false;\n public isSmallView = true;\n private readonly COMPACT_GRID_HEIGHT = 24;\n\n public agInit(params: ProgressCellRendererParams): void {\n this.params = params;\n\n if (this.params?.node?.rowHeight > this.COMPACT_GRID_HEIGHT) {\n this.isSmallView = false;\n }\n }\n\n public valueChanged(event: boolean): void {\n this.params.setValue(event);\n }\n\n public isButtonDisabled(): boolean {\n return this.getQuantity(this.params) <= 0;\n }\n\n public refresh(params: ProgressCellRendererParams): boolean {\n return false;\n }\n\n private getQuantity(params: ProgressCellRendererParams): number {\n return params.isOrderline ? params.data.quantity : params.data.amount;\n }\n}\n","
\n \n
\n","\r\n
\r\n @if (isContentSwitcher() || isNavigationHelper()) {\r\n \r\n } @else {\r\n \r\n \r\n \r\n }\r\n
\r\n","import {Component} from '@angular/core';\r\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\r\nimport {ICellRendererParams} from 'ag-grid-community';\r\nimport {lowerCase} from 'lodash-es';\r\nimport {Subject, takeUntil} from 'rxjs';\r\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\r\nimport {ContentSwitcherDialogService} from '../../custom-components/content-switcher/content-switcher-dialog.service';\r\nimport {ContentSwitcherEntry} from '../../custom-components/content-switcher/content-switcher-entry.interface';\r\nimport {ContentSwitcherNavigationInput} from '../../custom-components/navigation-helper-prototype/content-switcher-navigation-input.interface';\r\nimport {NavigationHelperPrototypeService} from '../../custom-components/navigation-helper-prototype/navigation-helper-prototype.service';\r\nimport {TranslateService} from '../../translation/translate.service';\r\nimport {LinkIconRendererParams} from './link-icon-renderer-params.interface';\r\n\r\n@Component({\r\n templateUrl: './link-icon-renderer.component.html',\r\n styleUrls: ['./link-icon-renderer.component.scss']\r\n})\r\nexport class LinkIconRendererComponent implements ICellRendererAngularComp {\r\n public name: string;\r\n public canClick: boolean | (() => boolean);\r\n public hasNoName: boolean;\r\n public editPageUrl: string;\r\n private isRowGroupParent: boolean;\r\n private cachedParams: LinkIconRendererParams;\r\n private destroySubject = new Subject();\r\n\r\n public constructor(\r\n private readonly translate: TranslateService,\r\n protected readonly contentSwitcher: ContentSwitcherDialogService,\r\n protected readonly navigationHelper: NavigationHelperPrototypeService\r\n ) {}\r\n\r\n public agInit(params: LinkIconRendererParams): void {\r\n this.cachedParams = params;\r\n this.name = this.getName(params.value);\r\n this.canClick = params.canClick ?? true;\r\n this.isRowGroupParent = AssertionUtils.isNullOrUndefined(params.node?.data);\r\n\r\n if (!this.isContentSwitcher() && !AssertionUtils.isNullOrUndefined(params.editPageUrl)) {\r\n this.editPageUrl = params.node?.data?.machineType\r\n ? params.editPageUrl.replace(':machineType', params.node.data.machineType.toLowerCase().replace('_', '-')).replace(':id', params?.id ?? params?.data?.id?.toString())\r\n : params.editPageUrl.replace(':id', params?.id ?? params?.data?.id?.toString());\r\n }\r\n }\r\n\r\n public destroy(): void {\r\n this.destroySubject.next();\r\n this.destroySubject.complete();\r\n }\r\n\r\n public isContentSwitcher(): boolean {\r\n return !AssertionUtils.isNullOrUndefined(this.contentSwitcher?.dialog);\r\n }\r\n\r\n public isNavigationHelper(): boolean {\r\n return this.navigationHelper.contentSwitcherDialogActive();\r\n }\r\n\r\n public refresh(_: ICellRendererParams): boolean {\r\n return false;\r\n }\r\n\r\n public navigateForward(event: Event): void {\r\n event.stopPropagation();\r\n\r\n if (this.isNavigationHelper()) {\r\n const contentSwitcherEntry = this.cachedParams.contentSwitcherEntry as ContentSwitcherNavigationInput;\r\n\r\n this.navigationHelper\r\n .navigateWithContentSwitcher({\r\n componentInfo: {\r\n component: contentSwitcherEntry.componentInfo.component,\r\n module: contentSwitcherEntry.componentInfo?.module,\r\n componentInputs: {pageType: 'Edit', itemId: this.cachedParams?.id ?? this.cachedParams?.data?.id, canShowHeader: true}\r\n }\r\n })\r\n .pipe(takeUntil(this.destroySubject))\r\n .subscribe((data: any) => this.cachedParams.rowActionsComplete?.next(data));\r\n } else {\r\n this.contentSwitcher.navigateForward({...(this.cachedParams.contentSwitcherEntry as ContentSwitcherEntry), data: {routeId: this.cachedParams?.id ?? this.cachedParams?.data?.id}});\r\n }\r\n }\r\n\r\n public iconIsVisible(): boolean {\r\n return (typeof this.canClick === 'boolean' ? this.canClick : this.canClick()) && !this.isRowGroupParent;\r\n }\r\n\r\n private getName(value: string): string {\r\n if (!value) {\r\n this.hasNoName = true;\r\n return this.translate.instant('GENERAL.NO_DATA', {object: lowerCase(this.translate.instant('GENERAL.NAME'))});\r\n }\r\n this.hasNoName = false;\r\n return value;\r\n }\r\n}\r\n","import {Component, HostBinding} from '@angular/core';\nimport {UntypedFormControl, Validators} from '@angular/forms';\nimport {ICellEditorAngularComp} from 'ag-grid-angular';\nimport {map, takeUntil} from 'rxjs/operators';\nimport {BaseComponent} from './../../base-component';\nimport {convertUnit} from './../../common/converters/convert-unit';\nimport {Unit} from './../../common/unit.enum';\nimport {NumberCellEditorParams} from './number-cell-editor-params.interface';\n\n@Component({\n templateUrl: './number-cell-editor.component.html',\n styleUrls: ['./number-cell-editor.component.scss']\n})\nexport class NumberCellEditorComponent extends BaseComponent implements ICellEditorAngularComp {\n @HostBinding('class.error')\n public errorState: boolean;\n\n public min: number;\n public max: number;\n public toUnit: Unit;\n public formControl: UntypedFormControl;\n public isSmall: boolean;\n public autoSelect: boolean = false;\n\n private fromUnit: Unit;\n private params: any;\n\n public agInit(params: NumberCellEditorParams): void {\n this.min = params.min;\n this.max = params.max;\n this.fromUnit = params.fromUnit;\n this.toUnit = params.toUnit;\n this.isSmall = params.isSmall ?? true;\n this.autoSelect = params.autoSelect;\n this.params = params;\n\n if (params.fromUnit && params.toUnit) {\n const value = convertUnit({\n from: {value: params.value, unit: params.fromUnit},\n to: params.toUnit\n });\n const max = convertUnit({\n from: {value: params.max, unit: params.fromUnit},\n to: params.toUnit\n });\n const min = convertUnit({\n from: {value: params.min, unit: params.fromUnit},\n to: params.toUnit\n });\n\n this.formControl = new UntypedFormControl(value, [Validators.min(min), Validators.max(max)]);\n } else {\n this.formControl = new UntypedFormControl(params.value, [Validators.min(params.min), Validators.max(params.max)]);\n }\n\n this.subscribeToStatusChanges();\n }\n\n public hasUnit(): boolean {\n return !!this.toUnit;\n }\n\n public getUnitTranslationKey(): string {\n return Unit.getKeyFromValue(this.toUnit);\n }\n\n public stopClickEvent(event: PointerEvent): void {\n event.stopPropagation();\n }\n\n public getValue(): number {\n let value = this.formControl.value;\n\n if (this.fromUnit && this.toUnit) {\n value = convertUnit({\n from: {value, unit: this.toUnit},\n to: this.fromUnit\n });\n }\n\n return value;\n }\n\n public isCancelAfterEnd(): boolean {\n return !this.formControl.valid;\n }\n\n public preventDefaultOnMouseDown(event: MouseEvent): void {\n event.preventDefault();\n }\n\n public onModelChange(): void {\n this.params.api.dispatchEvent({type: 'cellValueChanged', event: {}});\n }\n\n private subscribeToStatusChanges(): void {\n this.formControl.statusChanges\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n map((valid: string) => valid === 'VALID')\n )\n .subscribe((valid: boolean) => (this.errorState = !valid));\n }\n}\n","\n
\n \n
\n
\n","
\n \n \n\n
{{ value }}
\n\n
{{ 'ANGULAR_COMPONENT_LIBRARY.NUMBER_CELL_RENDERER.UNIT.' + getUnitTranslationKey() | bmsTranslate }}
\n
\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {IRowNode} from 'ag-grid-community';\nimport {convertUnit} from './../../common/converters/convert-unit';\nimport {Unit} from './../../common/unit.enum';\nimport {NumberCellRendererParams} from './number-cell-renderer-params.interface';\n\n@Component({\n templateUrl: './number-cell-renderer.component.html',\n styleUrls: ['./number-cell-renderer.component.scss']\n})\nexport class NumberCellRendererComponent implements ICellRendererAngularComp {\n public value: number;\n public group: boolean;\n public showGroup: boolean;\n\n private unit: Unit;\n private node: IRowNode;\n\n public agInit(params: NumberCellRendererParams): void {\n this.unit = params.toUnit;\n this.group = params.node.group;\n this.showGroup = params.showGroup;\n this.node = params.node;\n\n if (params.fromUnit && params.toUnit) {\n this.value = convertUnit({\n from: {value: params.value, unit: params.fromUnit},\n to: params.toUnit\n });\n } else {\n this.value = params.value;\n }\n\n this.getUnitTranslationKey();\n }\n\n public refresh(_: NumberCellRendererParams): boolean {\n return false;\n }\n\n public getUnitTranslationKey(): string {\n return Unit.getKeyFromValue(this.unit);\n }\n\n public hasUnit(): boolean {\n return !!this.unit;\n }\n\n public isGroupExpanded(): boolean {\n return this.node.expanded;\n }\n\n public toggleGroup(event: PointerEvent): void {\n this.node.setExpanded(!this.node.expanded);\n\n event.stopPropagation();\n }\n}\n","@if (loadingForTheFirstTime) {\n
\n \n
\n

{{ 'ANGULAR_COMPONENT_LIBRARY.OVERLAY.LOADING.TITLE' | bmsTranslate }}

\n

{{ 'ANGULAR_COMPONENT_LIBRARY.OVERLAY.LOADING.DATA_BEING_FETCHED' | bmsTranslate }}

\n
\n
\n} @else {\n
\n \n
\n}\n","import {Component} from '@angular/core';\nimport {ICellRenderer} from 'ag-grid-community';\nimport {LoadingCellOverlayComponentParams} from './loading-cell-overlay-component-params';\n\n@Component({\n selector: 'vdw-loading-cell-overlay',\n templateUrl: './loading-cell-overlay.component.html',\n styleUrls: ['./loading-cell-overlay.component.scss']\n})\nexport class LoadingCellOverlayComponent implements ICellRenderer {\n public loadingForTheFirstTime: boolean;\n\n public agInit(params: LoadingCellOverlayComponentParams): void {\n this.loadingForTheFirstTime = params.loadingForTheFirstTime;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n}\n","import {Component} from '@angular/core';\nimport {ICellEditorAngularComp} from 'ag-grid-angular';\nimport {BaseComponent} from '../../base-component';\nimport {StringCellEditorParams} from './string-cell-editor-params.interface';\n\n@Component({\n templateUrl: './string-cell-editor.component.html',\n styleUrls: ['./string-cell-editor.component.scss']\n})\nexport class StringCellEditorComponent extends BaseComponent implements ICellEditorAngularComp {\n public maxlength: number;\n public value: string;\n public colId: string;\n\n public agInit(params: StringCellEditorParams): void {\n this.maxlength = params.max;\n this.value = params.value;\n this.colId = params.colDef?.colId;\n }\n\n public getValue(): string {\n return this.value;\n }\n}\n","\n","
\n \n
({{ count }})
\n
\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\nimport {StringCountCellRendererParams} from './string-count-cell-renderer-params';\n\n@Component({\n templateUrl: './string-count-cell-renderer.component.html',\n styleUrls: ['./string-count-cell-renderer.component.scss']\n})\nexport class StringCountCellRendererComponent implements ICellRendererAngularComp {\n public text: string;\n public count: number;\n\n public agInit(params: StringCountCellRendererParams): void {\n this.text = params.value.text;\n this.count = params.value.count;\n }\n\n public refresh(_: ICellRendererParams): boolean {\n return false;\n }\n}\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {TagColor} from '../../custom-components/tag/tag-color.enum';\nimport {TagSize} from '../../custom-components/tag/tag-size.enum';\nimport {GridTagRenderParams} from './grid-tag-render-params.interface';\n\n@Component({\n templateUrl: './grid-tag.component.html'\n})\nexport class GridTagComponent implements ICellRendererAngularComp {\n public value: string;\n public size: TagSize = TagSize.SMALL;\n public label: string;\n\n public colorGetter: {[key: string]: TagColor};\n\n public agInit(params: GridTagRenderParams = null): void {\n params.eGridCell.style.textOverflow = 'clip';\n\n this.setLabel(params.value, params.translationKey);\n this.value = params.value;\n this.size = params.size;\n this.colorGetter = params.colorGetter;\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n private setLabel(value: string, translationKey: string): void {\n this.label = translationKey + value;\n }\n}\n","\n","import {Component} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {ICellRendererParams} from 'ag-grid-community';\n\n@Component({\n templateUrl: './tooltip-cell-renderer.component.html'\n})\nexport class TooltipCellRendererComponent implements ICellRendererAngularComp {\n public tooltip: string;\n\n public constructor() {}\n\n public agInit(params: ICellRendererParams): void {\n this.tooltip = params.value;\n }\n\n public refresh(_: ICellRendererParams): boolean {\n return false;\n }\n}\n","\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {SlideToggleComponent} from './slide-toggle.component';\n\n@NgModule({\n declarations: [SlideToggleComponent],\n imports: [CommonModule, MatSlideToggleModule, TranslationModule],\n exports: [SlideToggleComponent]\n})\nexport class SlideToggleModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {InputL10nDecimalModule} from '../../custom-directives/input-l10n-decimal/input-l10n-decimal.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ZoneInputComponent} from './zone-input.component';\n\n@NgModule({\n declarations: [ZoneInputComponent],\n imports: [CommonModule, FormsModule, MatIconModule, MatTooltipModule, TranslationModule, InputL10nDecimalModule],\n exports: [ZoneInputComponent]\n})\nexport class ZoneInputModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {AutoFocusModule} from '../../custom-directives/auto-focus/auto-focus.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {FilterComponent} from './filter.component';\nimport {MobileFilterComponent} from './mobile-filter/mobile-filter.component';\n\n@NgModule({\n declarations: [FilterComponent, MobileFilterComponent],\n imports: [CommonModule, MatIconModule, MatButtonModule, MatFormFieldModule, MatInputModule, FormsModule, TranslationModule, AutoFocusModule],\n exports: [FilterComponent, MobileFilterComponent]\n})\nexport class FilterModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MultiLineDragComponent} from './multi-line-drag.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [MultiLineDragComponent],\n exports: [MultiLineDragComponent]\n})\nexport class MultiLineDragModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {InputChipModule} from '../input-chip/input-chip.module';\nimport {MultiLineDragModule} from '../multi-line-drag/multi-line-drag.module';\nimport {FilterChipsComponent} from './filter-chips.component';\n\n@NgModule({\n declarations: [FilterChipsComponent],\n imports: [CommonModule, FlexLayoutModule, MatButtonModule, MatIconModule, MatMenuModule, LabelModule, MultiLineDragModule, InputChipModule],\n exports: [FilterChipsComponent]\n})\nexport class FilterChipsModule {}\n","export enum SaveTypeForProductionSchedule {\n SAVE = 'SAVE',\n SAVE_AND_QUIT = 'SAVE_AND_QUIT',\n SAVE_AND_CREATE_NEW = 'SAVE_AND_CREATE_NEW',\n SAVE_AND_GO_TO_PRESELECTION = 'SAVE_AND_GO_TO_PRESELECTION'\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCardModule, MAT_CARD_CONFIG} from '@angular/material/card';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {HeaderModule} from '../header/header.module';\nimport {TabsMenuModule} from '../tabs-menu/tabs-menu.module';\nimport {TabsMenuCardComponent} from './tabs-menu-card.component';\n\n@NgModule({\n declarations: [TabsMenuCardComponent],\n imports: [CommonModule, HeaderModule, TabsMenuModule, TranslationModule, MatCardModule, MatIconModule, MatTooltipModule, MatDividerModule],\n exports: [TabsMenuCardComponent],\n providers: [\n {\n provide: MAT_CARD_CONFIG,\n useValue: {\n appearance: 'outlined'\n }\n }\n ]\n})\nexport class TabsMenuCardModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatCardModule, MAT_CARD_CONFIG} from '@angular/material/card';\nimport {MatIconModule} from '@angular/material/icon';\nimport {RouterModule} from '@angular/router';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {TagModule} from '../tag/tag.module';\nimport {MobilePageHeaderComponent} from './mobile-page-header.component';\n\n@NgModule({\n declarations: [MobilePageHeaderComponent],\n imports: [CommonModule, FlexLayoutModule, MatIconModule, MatCardModule, TranslationModule, RouterModule, MatButtonModule, LabelModule, TagModule],\n exports: [MobilePageHeaderComponent],\n providers: [\n {\n provide: MAT_CARD_CONFIG,\n useValue: {\n appearance: 'outlined'\n }\n }\n ]\n})\nexport class MobilePageHeaderModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatButtonToggleModule} from '@angular/material/button-toggle';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {DialogModule} from '../../dialogs/dialog.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {MobileDropdownComponent} from './mobile-dropdown.component';\nimport {MobileSelectorComponent} from './mobile-selector/mobile-selector.component';\n\n@NgModule({\n declarations: [MobileDropdownComponent, MobileSelectorComponent],\n imports: [CommonModule, MatIconModule, MatButtonModule, MatButtonToggleModule, MatDialogModule, TranslationModule, DialogModule, LabelModule],\n exports: [MobileDropdownComponent]\n})\nexport class MobileDropdownModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MobilePositionIndicatorComponent} from './mobile-position-indicator.component';\n\n@NgModule({\n declarations: [MobilePositionIndicatorComponent],\n imports: [CommonModule],\n exports: [MobilePositionIndicatorComponent]\n})\nexport class MobilePositionIndicatorModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {MobileDropdownModule} from '../mobile-dropdown/mobile-dropdown.module';\nimport {MobilePositionIndicatorModule} from '../mobile-position-indicator/mobile-position-indicator.module';\nimport {MobileBottomSelectorComponent} from './mobile-bottom-selector.component';\n\n@NgModule({\n declarations: [MobileBottomSelectorComponent],\n imports: [CommonModule, MatIconModule, MobileDropdownModule, MobilePositionIndicatorModule, TranslationModule],\n exports: [MobileBottomSelectorComponent]\n})\nexport class MobileBottomSelectorModule {}\n","export class StatusBar {\n private readonly _totalRows: number;\n private _totalGroupedRows: number;\n private readonly _filteredRows: number;\n private readonly _currentRowIds: number[];\n\n public constructor(totalRows: number, filteredRows: number, currentRowIds: number[], totalGroupedRows?: number) {\n this._totalRows = totalRows;\n this._filteredRows = filteredRows;\n this._currentRowIds = currentRowIds;\n this._totalGroupedRows = totalGroupedRows;\n }\n\n public get totalRows(): number {\n return this._totalRows;\n }\n\n public get totalGroupedRows(): number {\n return this._totalGroupedRows;\n }\n\n public set totalGroupedRows(value: number) {\n this._totalGroupedRows = value;\n }\n\n public get filteredRows(): number {\n return this._filteredRows;\n }\n\n public get currentRowIds(): number[] {\n return this._currentRowIds;\n }\n\n public static fromJSON(statusBarJSON: any): StatusBar {\n return new StatusBar(statusBarJSON.totalRows, statusBarJSON.filteredRows, statusBarJSON.currentRowIds, statusBarJSON.totalGroupedRows ?? null);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatSlideToggleModule} from '@angular/material/slide-toggle';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {FilterChipsModule} from '../filter-chips/filter-chips.module';\nimport {StatusBarComponent} from './status-bar.component';\n\n@NgModule({\n imports: [CommonModule, MatFormFieldModule, MatButtonModule, TranslationModule, MatIconModule, MatMenuModule, LabelModule, FilterChipsModule, FilterChipsModule, MatSlideToggleModule],\n exports: [StatusBarComponent],\n declarations: [StatusBarComponent]\n})\nexport class StatusBarModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSelectModule} from '@angular/material/select';\nimport {TranslationModule} from '../../../translation/translation.module';\nimport {LabelModule} from '../../ellipsis-label/label.module';\nimport {SelectColorsComponent} from './select-colors.component';\n\n@NgModule({\n imports: [CommonModule, MatSelectModule, TranslationModule, ReactiveFormsModule, LabelModule, FormsModule, MatInputModule],\n exports: [SelectColorsComponent],\n declarations: [SelectColorsComponent]\n})\nexport class SelectColorsModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatIconModule} from '@angular/material/icon';\nimport {PatternComponent} from './pattern.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule],\n exports: [PatternComponent],\n declarations: [PatternComponent]\n})\nexport class PatternModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatInputModule} from '@angular/material/input';\nimport {MatSelectModule} from '@angular/material/select';\nimport {TranslationModule} from '../../../translation/translation.module';\nimport {LabelModule} from '../../ellipsis-label/label.module';\nimport {PatternModule} from '../../pattern/pattern.module';\nimport {SelectPatternsComponent} from './select-patterns.component';\n\n@NgModule({\n imports: [CommonModule, MatSelectModule, TranslationModule, ReactiveFormsModule, LabelModule, FormsModule, MatInputModule, PatternModule],\n exports: [SelectPatternsComponent],\n declarations: [SelectPatternsComponent]\n})\nexport class SelectPatternsModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {BreadcrumbComponent} from './breadcrumb.component';\n\n@NgModule({\n declarations: [BreadcrumbComponent],\n imports: [CommonModule, FlexLayoutModule, MatIconModule, LabelModule, TranslationModule],\n exports: [BreadcrumbComponent]\n})\nexport class BreadcrumbModule {}\n","
\n\n
\n \n\n
\n
{{ title | bmsTranslate }}
\n
\n
\n \n
\n
\n\n \n
\n","import {Component} from '@angular/core';\nimport {isNil} from 'lodash-es';\nimport {Toast, ToastPackage, ToastrService} from 'ngx-toastr';\nimport {animateToast} from './toast.animation';\n\n@Component({\n templateUrl: './toast.component.html',\n styleUrls: ['./toast.component.scss'],\n animations: [animateToast()],\n preserveWhitespaces: false\n})\nexport class ToastComponent extends Toast {\n public titleIcon: string;\n public statusBarClass = '';\n public buttonText = '';\n public action: () => void;\n\n public constructor(\n toastrService: ToastrService,\n public readonly toastPackage: ToastPackage\n ) {\n super(toastrService, toastPackage);\n }\n\n public dismiss(): void {\n this.remove();\n }\n\n public canShowActionButton(): boolean {\n return !isNil(this.action);\n }\n\n public triggerAction(): void {\n this.toastPackage.triggerAction('confirmed');\n this.action();\n }\n}\n","import {AnimationTriggerMetadata, state, style, trigger} from '@angular/animations';\n\nexport function animateToast(): AnimationTriggerMetadata {\n return trigger('flyInOut', [\n state(\n 'inactive',\n style({\n display: 'none',\n opacity: 0\n })\n ),\n state('active', style({})),\n state('removed', style({}))\n ]);\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {ToastrModule} from 'ngx-toastr';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ToastComponent} from './toast.component';\n\n@NgModule({\n declarations: [ToastComponent],\n imports: [CommonModule, TranslationModule, MatIconModule, FlexLayoutModule, MatButtonModule, ToastrModule.forRoot({toastComponent: ToastComponent})],\n exports: [ToastComponent]\n})\nexport class ToastModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {MatIconModule} from '@angular/material/icon';\nimport {PaginatorComponent} from './paginator.component';\n\n@NgModule({\n declarations: [PaginatorComponent],\n imports: [CommonModule, FlexLayoutModule, MatIconModule],\n exports: [PaginatorComponent]\n})\nexport class PaginatorModule {}\n","import {Component, Inject} from '@angular/core';\nimport {DateRange} from '@angular/material/datepicker';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {isNil} from 'lodash-es';\nimport {DateTime} from 'luxon';\nimport {DatepickerHeaderComponent} from '../datepicker-header/datepicker-header.component';\n\n@Component({\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss']\n})\nexport class DatePickerComponent {\n public readonly datepickerHeader = DatepickerHeaderComponent;\n public selected: DateRange | DateTime;\n public minDate: DateTime;\n public startAtDate: DateTime;\n private pickedStartDate = false;\n private isRangePicker: boolean;\n\n private readonly dialogRef: MatDialogRef;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) public data: {minDate: Date; date: Date; endDate: Date; isRangePicker: boolean},\n dialogRef: MatDialogRef\n ) {\n this.dialogRef = dialogRef;\n let date = data.date ? DateTime.fromJSDate(data.date) : null;\n let endDate = data.endDate ? DateTime.fromJSDate(data.endDate) : null;\n const minDate = data.minDate ? DateTime.fromJSDate(data.minDate) : null;\n const isRangePicker = data.isRangePicker;\n\n this.minDate = minDate;\n this.isRangePicker = isNil(isRangePicker) ? false : isRangePicker;\n date = isNil(date) ? DateTime.now() : date;\n const end = isNil(endDate) ? DateTime.now() : endDate;\n endDate = !this.isRangePicker ? null : end;\n this.selected = this.isRangePicker ? new DateRange(date, endDate) : date;\n this.startAtDate = date;\n }\n\n public onSelectedChanges(event: DateTime): void {\n if (isNil(event) || !this.isRangePicker) {\n this.dialogRef.close(event);\n } else {\n this.selected = this.selected as DateRange;\n\n if (event < this.selected.start || !this.pickedStartDate) {\n this.selected = new DateRange(event.startOf('day'), null);\n this.pickedStartDate = true;\n } else {\n this.selected = new DateRange(this.selected.start, event.endOf('day'));\n this.dialogRef.close([this.selected.start, this.selected.end]);\n }\n }\n }\n}\n","
\n \n
\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDatepickerModule} from '@angular/material/datepicker';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {CanShowErrorForFormControlModule} from '../../custom-directives/can-show-error-for-context/can-show-error-for-form-control.module';\nimport {DateTimePipeModule} from '../../custom-pipes/date-time-pipe/date-time-pipe.module';\nimport {CommonFormsModule} from '../../forms/common-forms.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {DatepickerFormInputComponent} from './datepicker-form-input.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatIconModule,\n TranslationModule,\n MatButtonModule,\n MatDatepickerModule,\n MatInputModule,\n CanShowErrorForFormControlModule,\n MatFormFieldModule,\n TranslationModule,\n CommonFormsModule,\n DateTimePipeModule\n ],\n exports: [DatepickerFormInputComponent],\n declarations: [DatepickerFormInputComponent]\n})\nexport class DatepickerFormInputModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {DistanceSpecifierComponent} from './distance-specifier.component';\n\n@NgModule({\n declarations: [DistanceSpecifierComponent],\n imports: [CommonModule, MatTooltipModule, TranslationModule],\n exports: [DistanceSpecifierComponent]\n})\nexport class DistanceSpecifierModule {}\n","import {NgModule} from '@angular/core';\nimport {CapitalFirstLetterPipe} from './capital-first-letter.pipe';\n\n@NgModule({\n exports: [CapitalFirstLetterPipe],\n declarations: [CapitalFirstLetterPipe]\n})\nexport class CapitalFirstLetterPipeModule {}\n","import {NgModule} from '@angular/core';\nimport {HexValuePipe} from './hex-value.pipe';\n\n@NgModule({\n exports: [HexValuePipe],\n declarations: [HexValuePipe]\n})\nexport class HexValuePipeModule {}\n","import {NgModule} from '@angular/core';\nimport {HtmlWithVariablesToTextPipe} from './html-with-variables-to-text.pipe';\n\n@NgModule({\n exports: [HtmlWithVariablesToTextPipe],\n declarations: [HtmlWithVariablesToTextPipe],\n providers: [HtmlWithVariablesToTextPipe]\n})\nexport class HtmlWithVariablesToTextPipeModule {}\n","import {NgModule} from '@angular/core';\nimport {MinutesFromNowPipe} from './minutes-from-now.pipe';\n\n@NgModule({\n exports: [MinutesFromNowPipe],\n declarations: [MinutesFromNowPipe]\n})\nexport class MinutesFromNowPipeModule {}\n","import {NgModule} from '@angular/core';\nimport {ReverseArrayPipe} from './reverse-array.pipe';\n\n@NgModule({\n exports: [ReverseArrayPipe],\n declarations: [ReverseArrayPipe]\n})\nexport class ReverseArrayPipeModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {RadioToggleButtonDirective} from './radio-toggle-button.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [RadioToggleButtonDirective],\n exports: [RadioToggleButtonDirective]\n})\nexport class RadioToggleButtonModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {SwipeDirective} from './swipe.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [SwipeDirective],\n exports: [SwipeDirective]\n})\nexport class SwipeModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ShowOverlayForVirtualScrollerDirective} from './show-overlay-for-virtual-scroller.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ShowOverlayForVirtualScrollerDirective],\n exports: [ShowOverlayForVirtualScrollerDirective]\n})\nexport class ShowOverlayForVirtualScrollerModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {CheckboxToggleButtonDirective} from './checkbox-toggle-button.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [CheckboxToggleButtonDirective],\n exports: [CheckboxToggleButtonDirective]\n})\nexport class CheckboxToggleButtonModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FlexLayoutModule} from '@angular/flex-layout';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatInputModule} from '@angular/material/input';\nimport {LabelModule} from '../../custom-components/ellipsis-label/label.module';\nimport {HexValuePipeModule} from '../../custom-pipes/hex-value-pipe/hex-value-pipe.module';\nimport {BitPatternEditorFormFieldComponent} from './bit-pattern-editor-form-field/bit-pattern-editor-form-field.component';\nimport {BitPatternEditorComponent} from './bit-pattern-editor.component';\n\n@NgModule({\n declarations: [BitPatternEditorComponent, BitPatternEditorFormFieldComponent],\n imports: [CommonModule, FlexLayoutModule, MatCheckboxModule, ReactiveFormsModule, LabelModule, FormsModule, MatFormFieldModule, MatInputModule, HexValuePipeModule],\n exports: [BitPatternEditorComponent, BitPatternEditorFormFieldComponent]\n})\nexport class BitPatternEditorModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {ProgressBarComponent} from './progress-bar.component';\n\n@NgModule({\n declarations: [ProgressBarComponent],\n exports: [ProgressBarComponent],\n imports: [CommonModule, LabelModule, MatTooltipModule]\n})\nexport class ProgressBarModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {DelayedClassDirective} from './delayed-class.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [DelayedClassDirective],\n exports: [DelayedClassDirective]\n})\nexport class DelayedClassModule {}\n","import {Component, Inject} from '@angular/core';\nimport {WINDOW} from '../../window/window.service';\n\n@Component({\n templateUrl: './reload-required.component.html',\n styleUrls: ['./reload-required.component.scss']\n})\nexport class ReloadRequiredComponent {\n public constructor(@Inject(WINDOW) private readonly window: Window) {}\n\n public reloadApp(): void {\n this.window.location.reload();\n }\n}\n","
\n \n\n
\n

{{ 'ANGULAR_COMPONENT_LIBRARY.RELOAD_REQUIRED.DESCRIPTION' | bmsTranslateAsync | async }}

\n
\n\n \n
\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatDialogModule} from '@angular/material/dialog';\nimport {MatIconModule} from '@angular/material/icon';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {FooterModule} from '../footer/footer.module';\nimport {HeaderModule} from '../header/header.module';\nimport {ReloadRequiredComponent} from './reload-required.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, MatDialogModule, TranslationModule, FooterModule, HeaderModule],\n exports: [ReloadRequiredComponent],\n declarations: [ReloadRequiredComponent]\n})\nexport class ReloadRequiredModule {}\n","import {BaseError} from './base-error';\n\nexport class AuthenticationError extends BaseError {\n public constructor(message: string = 'Authentication Error') {\n super(message);\n }\n}\n","import {isNil} from 'lodash-es';\nimport {BaseError} from './base-error';\n\nexport enum BackendErrorSeverity {\n FATAL,\n ERROR,\n WARNING,\n INFO\n}\n\nexport class BackendError extends BaseError {\n public readonly severity: BackendErrorSeverity;\n public readonly errorContext: any;\n\n public constructor(severity: BackendErrorSeverity = BackendErrorSeverity.FATAL, message?: string, errorContext?: any) {\n super(message);\n this.severity = isNil(severity) ? BackendErrorSeverity.FATAL : severity;\n this.errorContext = errorContext;\n }\n}\n","import {BackendError} from './backend-error';\n\nexport class UnhandledBackendError extends BackendError {\n public autoNavigated: boolean = false;\n}\n","import {Injectable} from '@angular/core';\r\nimport {ApplicationInsights} from '@microsoft/applicationinsights-web';\r\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class AppInsightsLoggingService {\r\n private appInsights: ApplicationInsights;\r\n private keys: {[key: string]: any} = [];\r\n\r\n public init(appInsightsKey: string): void {\r\n if (!AssertionUtils.isEmpty(appInsightsKey)) {\r\n this.appInsights = new ApplicationInsights({\r\n config: {\r\n instrumentationKey: appInsightsKey,\r\n enableAutoRouteTracking: false,\r\n disableTelemetry: false, //if true, this one disables all data sent to insights, even our exception logging\r\n enableDebug: false,\r\n disableFetchTracking: true,\r\n disableAjaxTracking: true\r\n }\r\n });\r\n this.appInsights.loadAppInsights();\r\n }\r\n }\r\n\r\n public setTag(key: string, value: string): void {\r\n this.keys[key] = value;\r\n }\r\n\r\n public logException(exception: Error, severityLevel?: number): void {\r\n this.appInsights?.trackException({exception: exception, severityLevel: severityLevel}, this.keys);\r\n }\r\n}\r\n","import {ErrorHandler, Inject, Injectable, NgZone} from '@angular/core';\nimport {MatDialog, MatDialogConfig} from '@angular/material/dialog';\nimport {SwUpdate} from '@angular/service-worker';\nimport {isEmpty, isEqual, isUndefined, keys} from 'lodash-es';\nimport {NGXLogger} from 'ngx-logger';\nimport {ENVIRONMENT, EnvironmentVariables} from '../common/environment-variables';\nimport {ReloadRequiredComponent} from '../custom-components/reload-required/reload-required.component';\nimport {AppInsightsLoggingService} from '../custom-services/app-insights-logging/app-insights-logging.service';\nimport {AlertDialogData} from '../dialogs/alert-dialog/alert-dialog-data';\nimport {AlertDialogComponent} from '../dialogs/alert-dialog/alert-dialog.component';\nimport {AuthenticationError} from './authentication-error';\nimport {BackendError, BackendErrorSeverity} from './backend-error';\nimport {UnhandledBackendError} from './unhandled-backend-error';\n\n@Injectable()\nexport class GlobalErrorHandler implements ErrorHandler {\n private ngZone: NgZone;\n private readonly reloadRequiredDialogReference = 'new-update-dialog';\n private readonly logger: NGXLogger;\n private readonly alertDialogReference = 'alert-dialog';\n private readonly swUpdate: SwUpdate;\n private readonly chunkFailedMessageRegex: RegExp = /Loading chunk \\d+ failed/;\n private readonly dialog: MatDialog;\n\n public constructor(\n ngZone: NgZone,\n logger: NGXLogger,\n swUpdate: SwUpdate,\n dialog: MatDialog,\n private appInsightsLoggingService: AppInsightsLoggingService,\n @Inject(ENVIRONMENT) private environment: EnvironmentVariables\n ) {\n this.logger = logger;\n this.ngZone = ngZone;\n this.swUpdate = swUpdate;\n this.dialog = dialog;\n }\n\n public handleError(error: Error): void {\n if (this.chunkFailedMessageRegex.test(error.message)) {\n if (this.swUpdate.isEnabled) {\n this.swUpdate.checkForUpdate();\n } else {\n this.showReloadRequiredDialog();\n }\n } else {\n this.captureException(error);\n }\n }\n\n private shouldDisplayMessage(error: Error): boolean {\n let result = true;\n if (error instanceof UnhandledBackendError && !this.environment.isDebugMode) {\n result = (error as UnhandledBackendError).autoNavigated;\n } else if (error instanceof BackendError && !this.environment.isDebugMode) {\n result = !isEqual(error.severity, BackendErrorSeverity.INFO);\n }\n return result;\n }\n\n private captureException(error: Error): void {\n if (!this.environment.isDebugMode && !(error instanceof AuthenticationError)) {\n this.appInsightsLoggingService.logException(error);\n if (this.shouldDisplayMessage(error)) {\n this.showAlertDialog(error);\n }\n } else {\n if (this.environment.isDebugMode) {\n this.showAlertDialog(error);\n }\n this.logger.error(error);\n }\n }\n\n private showReloadRequiredDialog(): void {\n if (isUndefined(this.dialog.getDialogById(this.reloadRequiredDialogReference))) {\n this.ngZone.run(() => {\n const dialogConfig: MatDialogConfig = {\n panelClass: this.alertDialogReference,\n autoFocus: true,\n id: this.reloadRequiredDialogReference,\n disableClose: true\n };\n\n this.dialog.open(ReloadRequiredComponent, dialogConfig);\n });\n }\n }\n\n private showAlertDialog(error: Error): void {\n if (isUndefined(this.dialog.getDialogById(this.alertDialogReference))) {\n this.ngZone.run(() => {\n const dialogConfig: MatDialogConfig = {\n id: this.alertDialogReference,\n panelClass: this.alertDialogReference,\n autoFocus: false\n };\n\n if (!isEmpty(keys(error)) || this.environment.isDebugMode) {\n dialogConfig.data = AlertDialogData.createErrorData(error.name, error.message);\n this.dialog.open(AlertDialogComponent, dialogConfig);\n }\n });\n }\n }\n}\n","import {BackendError} from './backend-error';\n\nexport class UnavailableArchiveError extends BackendError {}\n","import {HttpClient, HubConnection, HubConnectionBuilder, IHttpConnectionOptions} from '@microsoft/signalr';\nimport {BehaviorSubject, firstValueFrom, Observable, startWith, Subscriber} from 'rxjs';\nimport {filter, shareReplay, switchMap} from 'rxjs/operators';\nimport {SignalrLogger} from './signalr-logger';\n\nexport class SignalrHubConnectionBuilder {\n public constructor(\n private readonly signalrLogger: SignalrLogger,\n private readonly httpClient: HttpClient,\n private readonly accessTokenFactory: () => Promise\n ) {}\n\n public build(url: string, connect: Observable, disconnect: Observable): Observable {\n return new Observable((subscriber: Subscriber) => {\n let hubConnection: HubConnection;\n const connectedSubject = new BehaviorSubject(false);\n\n const connectSubscription = connect\n .pipe(\n startWith(undefined),\n switchMap(() => {\n hubConnection = this.getHubConnection(url);\n hubConnection.onclose(() => connectedSubject.next(false));\n return this.safeStartHubConnection(hubConnection, connectedSubject);\n })\n )\n .subscribe(() => subscriber.next(hubConnection));\n\n const disconnectSubscription = disconnect.pipe(switchMap(() => this.safeStopHubConnection(hubConnection, connectedSubject))).subscribe(() => subscriber.next(hubConnection));\n\n return () => {\n this.safeStopHubConnection(hubConnection, connectedSubject);\n connectSubscription.unsubscribe();\n disconnectSubscription.unsubscribe();\n };\n }).pipe(shareReplay({bufferSize: 1, refCount: true}));\n }\n\n private async safeStartHubConnection(hubConnection: HubConnection, connectedUpdates: BehaviorSubject): Promise {\n await firstValueFrom(connectedUpdates.pipe(filter((connected: boolean) => !connected)));\n await hubConnection.start();\n connectedUpdates.next(true);\n }\n\n private async safeStopHubConnection(hubConnection: HubConnection, connectedUpdates: BehaviorSubject): Promise {\n await firstValueFrom(connectedUpdates.pipe(filter((connected: boolean) => connected)));\n await hubConnection.stop();\n }\n\n private getHubConnection(url: string): HubConnection {\n const connectionOptions: IHttpConnectionOptions = {\n accessTokenFactory: this.accessTokenFactory,\n httpClient: this.httpClient\n };\n\n return new HubConnectionBuilder().withAutomaticReconnect().configureLogging(this.signalrLogger).withUrl(url, connectionOptions).build();\n }\n}\n","import {HttpClient, HubConnection} from '@microsoft/signalr';\nimport {BehaviorSubject, Observable, Subject, Subscriber} from 'rxjs';\nimport {finalize, shareReplay, switchMap, tap} from 'rxjs/operators';\nimport {SignalrHubConnectionBuilder} from './signalr-hub-connection-builder';\nimport {SignalrLogger} from './signalr-logger';\n\nexport class SignalrHubConnectionFactoryService {\n private readonly disconnectAllSubject = new Subject();\n private readonly connectAllSubject = new Subject();\n private readonly connectedSubject = new BehaviorSubject(null);\n private readonly signalrHubConnectionsByUrl = new Map>();\n private readonly signalrHubConnectionsByUrlAndEvent = new Map>>();\n\n public constructor(\n private readonly signalrLogger: SignalrLogger,\n private readonly httpClient: HttpClient,\n private readonly accessTokenFactory: () => Promise,\n private readonly queryFactory: (url: string) => string\n ) {}\n\n public getSignalrHubConnection(url: string): Observable {\n let signalrHubConnection = this.signalrHubConnectionsByUrl.get(url);\n if (!signalrHubConnection) {\n signalrHubConnection = this.createSignalrHubConnection(url, this.connectAllSubject.asObservable(), this.disconnectAllSubject.asObservable());\n this.signalrHubConnectionsByUrl.set(url, signalrHubConnection);\n }\n return signalrHubConnection;\n }\n\n public getSignalrHubEvents(url: string, method: string): Observable {\n let signalrHubConnectionMap = this.signalrHubConnectionsByUrlAndEvent.get(url);\n if (!signalrHubConnectionMap) {\n signalrHubConnectionMap = new Map>();\n this.signalrHubConnectionsByUrlAndEvent.set(url, signalrHubConnectionMap);\n }\n\n let signalrHubConnection = signalrHubConnectionMap.get(method);\n if (!signalrHubConnection) {\n signalrHubConnection = this.createSignalrHubEventsConnection(url, method);\n signalrHubConnectionMap.set(method, signalrHubConnection);\n }\n return signalrHubConnection;\n }\n\n public getConnectedHubConnections(): Observable {\n return this.connectedSubject.asObservable();\n }\n\n public getConnectionId(): string {\n return this.connectedSubject?.value?.connectionId ?? '';\n }\n\n public connectAll(): void {\n this.connectAllSubject.next();\n }\n\n public disconnectAll(): void {\n this.disconnectAllSubject.next();\n }\n\n private createSignalrHubEventsConnection(url: string, method: string): Observable {\n return this.getSignalrHubConnection(url).pipe(\n switchMap(\n (hubConnection: HubConnection) =>\n new Observable((subscriber: Subscriber) => {\n const handler = (event: any): void => subscriber.next(event);\n hubConnection.on(method, handler);\n\n return () => hubConnection.off(method, handler);\n })\n ),\n finalize(() => this.signalrHubConnectionsByUrlAndEvent.get(url).delete(method)),\n shareReplay({bufferSize: 1, refCount: true})\n );\n }\n\n private createSignalrHubConnection(url: string, connect: Observable, disconnect: Observable): Observable {\n return new SignalrHubConnectionBuilder(this.signalrLogger, this.httpClient, this.accessTokenFactory).build(this.queryFactory(url), connect, disconnect).pipe(\n tap((hubConnection: HubConnection) => this.connectedSubject.next(hubConnection)),\n finalize(() => {\n this.signalrHubConnectionsByUrl.delete(url);\n }),\n shareReplay({bufferSize: 1, refCount: true})\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ILogger, LogLevel} from '@microsoft/signalr';\nimport {NGXLogger} from 'ngx-logger';\n\n@Injectable({providedIn: 'root'})\nexport class SignalrLogger implements ILogger {\n private _logger: NGXLogger;\n\n public constructor(logger: NGXLogger) {\n this._logger = logger;\n }\n\n public log(logLevel: LogLevel, message: string): void {\n switch (logLevel) {\n case LogLevel.Critical:\n case LogLevel.Error:\n this._logger.error(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\n break;\n case LogLevel.Warning:\n this._logger.warn(`[${new Date().toISOString()}] ${LogLevel[logLevel]}: ${message}`);\n break;\n default:\n break;\n }\n }\n}\n","import {ColorConstants} from '../common/colors-variables.generated';\nimport {addAlphaToHexRGB} from '../common/converters/convert-color-representation';\n\nexport const MACHINE_GROUP_COLOURS_PALETTE = [\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_ORANGE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_YELLOW, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SKY_BLUE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_BRIGHT_SKY_BLUE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_BABY_BLUE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_BRIGHT_PINK, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_PINK, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_PURPLE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_BLUE, opacity),\n (opacity: number): string => addAlphaToHexRGB(ColorConstants.PLANNING_SOFT_GREY, opacity)\n];\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {VirtualScrollerModule} from '@iharbeck/ngx-virtual-scroller';\nimport {LabelModule} from '../custom-components/ellipsis-label/label.module';\nimport {DateTimePipeModule} from '../custom-pipes/date-time-pipe/date-time-pipe.module';\nimport {TranslationModule} from '../translation/translation.module';\nimport {CurrentTimeIndicatorComponent} from './planning-display/current-time-indicator/current-time-indicator.component';\nimport {DateHeaderRowComponent} from './planning-display/date-header-row/date-header-row.component';\nimport {HourHeaderRowComponent} from './planning-display/hour-header-row/hour-header-row.component';\nimport {PlanningDisplayComponent} from './planning-display/planning-display.component';\nimport {PlanningGridComponent} from './planning-display/planning-grid/planning-grid.component';\nimport {PlanningItemDisplayComponent} from './planning-display/planning-item-display/planning-item-display.component';\nimport {RegimesIndicatorComponent} from './planning-display/regimes-indicator/regimes-indicator.component';\nimport {TimelinePositionDirective} from './planning-display/timeline-position/timeline-position.directive';\nimport {PlanningGroupComponent} from './planning-items/planning-group/planning-group.component';\nimport {PlanningItemDirective} from './planning-items/planning-item/planning-item.directive';\nimport {PlanningRowComponent} from './planning-row/planning-row.component';\nimport {ShiftScheduleComponent} from './shift-schedule/shift-schedule.component';\nimport {ShiftComponent} from './shift-schedule/shift.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, LabelModule, MatButtonModule, TranslationModule, MatTooltipModule, VirtualScrollerModule, DateTimePipeModule],\n declarations: [\n PlanningDisplayComponent,\n PlanningGridComponent,\n PlanningRowComponent,\n DateHeaderRowComponent,\n HourHeaderRowComponent,\n ShiftComponent,\n ShiftScheduleComponent,\n CurrentTimeIndicatorComponent,\n RegimesIndicatorComponent,\n PlanningItemDirective,\n PlanningGroupComponent,\n PlanningItemDisplayComponent,\n TimelinePositionDirective\n ],\n exports: [PlanningDisplayComponent, PlanningGridComponent, PlanningRowComponent, ShiftScheduleComponent, ShiftComponent, PlanningItemDirective, PlanningGroupComponent]\n})\nexport class PlanningDisplayModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatIconModule} from '@angular/material/icon';\nimport {PlanningDragDropDirective} from './planning-drag-drop.directive';\nimport {PlanningDragDropService} from './planning-drag-drop.service';\nimport {PlanningDragIndicatorComponent} from './planning-drag-indicator/planning-drag-indicator.component';\nimport {PlanningHourIndicatorComponent} from './planning-hour-indicator/planning-hour-indicator.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule],\n declarations: [PlanningDragDropDirective, PlanningDragIndicatorComponent, PlanningHourIndicatorComponent],\n providers: [PlanningDragDropService],\n exports: [PlanningDragDropDirective]\n})\nexport class PlanningDragDropModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCheckboxModule} from '@angular/material/checkbox';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {SelectionListComponent} from './selection-list.component';\n\n@NgModule({\n imports: [CommonModule, MatCheckboxModule, TranslationModule],\n declarations: [SelectionListComponent],\n exports: [SelectionListComponent]\n})\nexport class SelectionListModule {}\n","import {NgModule} from '@angular/core';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {SelectionListModule} from '../selection-list/selection-list.module';\nimport {SelectionListContainerComponent} from './selection-list-container.component';\n\n@NgModule({\n imports: [SelectionListModule, TranslationModule],\n declarations: [SelectionListContainerComponent],\n exports: [SelectionListContainerComponent]\n})\nexport class SelectionListContainerModule {}\n","import {NgModule} from '@angular/core';\nimport {TextAreaWithChipsComponent} from './text-area-with-chips.component';\n\n@NgModule({\n declarations: [TextAreaWithChipsComponent],\n exports: [TextAreaWithChipsComponent]\n})\nexport class TextAreaWithChipsModule {}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Injectable()\nexport class LazyLoadingScrollService {\n private pageSize: number;\n private rowHeight: number;\n private scrollContainer: HTMLElement;\n\n public scrolledToTop = new EventEmitter();\n public scrolledToBottom = new EventEmitter();\n public scrolled = new EventEmitter();\n\n private scrollEventListener = (event: Event): void => this.scrolling(event);\n\n public init(pageSize: number, rowHeight: number, scrollContainer: HTMLElement): void {\n this.pageSize = pageSize;\n this.rowHeight = rowHeight;\n this.scrollContainer = scrollContainer;\n\n scrollContainer.addEventListener('scroll', this.scrollEventListener);\n }\n\n private scrolling(event: Event): void {\n this.scrolled.emit(Math.floor(this.scrollContainer.scrollTop / this.rowHeight));\n\n if (this.scrollContainer.scrollTop === 0) {\n this.scrolledToTop.emit();\n }\n\n if (this.scrollContainer.scrollTop > this.scrollContainer.scrollHeight - this.scrollContainer.offsetHeight) {\n this.scrolledToBottom.emit();\n }\n\n event.stopPropagation();\n }\n\n public resetScrollPosition(): void {\n if (!AssertionUtils.isNullOrUndefined(this.scrollContainer)) {\n this.scrollContainer.scrollTop = 1;\n }\n }\n\n public preserveScrollPosition(): void {\n this.scrollContainer.scrollTop = this.pageSize * this.rowHeight;\n }\n\n public removeListeners(): void {\n this.scrollContainer.removeEventListener('scroll', this.scrollEventListener);\n }\n}\n","export enum FilterModelType {\n TEXT,\n NUMBER,\n DATE,\n BOOLEAN,\n SET,\n MULTI\n}\n","export enum FilterType {\n EQUALS,\n NOTEQUAL,\n CONTAINS,\n NOTCONTAINS,\n STARTSWITH,\n ENDSWITH,\n LESSTHAN,\n LESSTHANOREQUAL,\n GREATERTHAN,\n GREATERTHANOREQUAL,\n INRANGE,\n NULL,\n NOTNULL\n}\n","import {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {FilterModelType} from './filter-model-type.enum';\nimport {FilterType} from './filter-type.enum';\n\nexport class FilterModelBuilder {\n private filterType: FilterModelType;\n private filter: any;\n private values: any;\n private type: FilterType;\n private filterModels?: FilterModelBuilder[] = [];\n\n public constructor(filterType: FilterModelType) {\n this.filterType = filterType;\n }\n\n public setType(type: FilterType): FilterModelBuilder {\n this.type = type;\n return this;\n }\n\n public setFilter(filter: any): FilterModelBuilder {\n this.filter = filter;\n return this;\n }\n\n public setValues(values: any): FilterModelBuilder {\n this.values = values;\n return this;\n }\n\n public newFilter(newFilter: FilterModelBuilder): FilterModelBuilder {\n this.filterModels.push(newFilter.build());\n return this;\n }\n\n public build(): any {\n let filterModel: any = {\n filterType: FilterModelType[this.filterType]\n };\n\n if (this.filter) {\n filterModel = {\n ...filterModel,\n filter: this.filter\n };\n }\n\n if (this.values) {\n filterModel = {\n ...filterModel,\n values: this.values\n };\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.type)) {\n filterModel = {\n ...filterModel,\n type: FilterType[this.type]\n };\n }\n\n if (this.filterModels.length > 0) {\n filterModel = {\n ...filterModel,\n filterModels: this.filterModels\n };\n }\n\n return filterModel;\n }\n}\n","import {GridModel} from '../floating-filters/data/grid-model';\nimport {FilterModelBuilder} from './filter-model-builder';\n\nexport class GridModelBuilder {\n private startRow: number;\n private endRow: number;\n private filterList: any = {};\n\n public newFilter(columnName: string, newFilter: FilterModelBuilder): GridModelBuilder {\n this.filterList[columnName] = newFilter.build();\n return this;\n }\n\n public build(): GridModel {\n return new GridModel(this.startRow, this.endRow, undefined, this.filterList);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {FilterModelBuilder} from './grid-model-builder/filter-model-builder';\nimport {FilterModelType} from './grid-model-builder/filter-model-type.enum';\nimport {GridModelBuilder} from './grid-model-builder/grid-model-builder';\n\n@Injectable({providedIn: 'root'})\nexport class GridModelBuilderFactoryService {\n public getBuilder(): GridModelBuilder {\n return new GridModelBuilder();\n }\n\n public getFilterBuilder(filterModelType: FilterModelType): FilterModelBuilder {\n return new FilterModelBuilder(filterModelType);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {DndListModule} from '@ryware/ngx-drag-and-drop-lists';\nimport {DndDragDropHelperService} from './dnd-drag-drop-helper-service/dnd-drag-drop-helper.service';\nimport {DndDragPreviewContentDirective} from './dnd-drag-preview-content.directive';\nimport {DndDraggableDropListComponent} from './dnd-draggable-drop-list/dnd-draggable-drop-list.component';\nimport {DndDropListContentDirective} from './dnd-drop-list-content.directive';\n\n@NgModule({\n imports: [CommonModule, MatExpansionModule, DndListModule],\n providers: [DndDragDropHelperService],\n exports: [DndDraggableDropListComponent, DndListModule, DndDragPreviewContentDirective, DndDropListContentDirective],\n declarations: [DndDraggableDropListComponent, DndDragPreviewContentDirective, DndDropListContentDirective]\n})\nexport class DndDraggableDropListModule {}\n","import {DragDropModule} from '@angular/cdk/drag-drop';\nimport {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatExpansionModule} from '@angular/material/expansion';\nimport {CdkDragDropHelperService} from './cdk-drag-drop-helper-service/cdk-drag-drop-helper.service';\nimport {CdkDragPreviewContentDirective} from './cdk-drag-preview-content.directive';\nimport {CdkDraggableDropListComponent} from './cdk-draggable-drop-list/cdk-draggable-drop-list.component';\nimport {CdkDropListContentDirective} from './cdk-drop-list-content.directive';\n\n@NgModule({\n imports: [CommonModule, DragDropModule, MatExpansionModule],\n providers: [CdkDragDropHelperService],\n exports: [CdkDraggableDropListComponent, CdkDragPreviewContentDirective, CdkDropListContentDirective],\n declarations: [CdkDraggableDropListComponent, CdkDragPreviewContentDirective, CdkDropListContentDirective]\n})\nexport class CdkDraggableDropListModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {ElementPressedDirective} from './element-pressed.directive';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [ElementPressedDirective],\n exports: [ElementPressedDirective]\n})\nexport class ElementPressedModule {}\n","import {NgComponentOutlet} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatSidenavModule} from '@angular/material/sidenav';\nimport {DialogModule} from '../../dialogs/dialog.module';\nimport {HoverDialogBuilderService} from '../../dialogs/hover-dialog/hover-dialog-builder.service';\nimport {ApplicationLayoutService} from './application-layout.service';\n\n@NgModule({\n imports: [NgComponentOutlet, MatSidenavModule, MatButtonModule, MatSidenavModule, MatMenuModule, MatIconModule, DialogModule],\n providers: [ApplicationLayoutService, HoverDialogBuilderService]\n})\nexport class ApplicationLayoutModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {ElementPressedModule} from '../../custom-directives/element-pressed/element-pressed.module';\nimport {HoverDialogBuilderService} from '../../dialogs/hover-dialog/hover-dialog-builder.service';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {ApplicationLayoutModule} from '../application-layout/application-layout.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {MenuItemComponent} from './menu-item/menu-item.component';\nimport {MenuTreeViewContextService} from './menu-tree-view-context.service';\nimport {MenuTreeViewComponent} from './menu-tree-view.component';\n\n@NgModule({\n declarations: [MenuItemComponent, MenuTreeViewComponent],\n providers: [MenuTreeViewContextService, HoverDialogBuilderService],\n imports: [CommonModule, MatIconModule, MatButtonModule, LabelModule, ElementPressedModule, TranslationModule, ApplicationLayoutModule],\n exports: [MenuItemComponent, MenuTreeViewComponent]\n})\nexport class MenuTreeViewModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {AccountSwitchComponent} from './account-switch.component';\n\n@NgModule({\n declarations: [AccountSwitchComponent],\n imports: [MatButtonModule, MatIconModule, LabelModule, CommonModule],\n exports: [AccountSwitchComponent]\n})\nexport class AccountSwitchModule {}\n","
\n
\n \n

{{ config.entityName | bmsTranslate: {count: 2} }}

\n
\n\n \n\n
\n @if (canShowOnlyShowSelectedToggle()) {\n
\n \n
{{ selectedItemCount }} {{ 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.OF' | bmsTranslate }} {{ config.rowData?.length }}
\n
\n }\n\n
\n \n \n
\n
\n
\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {RowNode} from 'ag-grid-community';\nimport {cloneDeep} from 'lodash-es';\nimport {combineLatest, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {GridOptionsBuilderFactoryService} from '../../../grids/grid-options-builder-factory.service';\nimport {TranslateService} from '../../../translation/translate.service';\nimport {FooterConstants} from '../../footer/footer.constants';\nimport {ContentSwitcherNavigationInput} from '../../navigation-helper-prototype/content-switcher-navigation-input.interface';\nimport {NavigationHelperPrototypeService} from '../../navigation-helper-prototype/navigation-helper-prototype.service';\nimport {CrudGridContextService} from '../crud-grid-context-service/crud-grid.context.service';\nimport {CrudOverviewDataConfig} from '../interfaces/crud-overview-data-config.interface';\n\n@Component({\n templateUrl: './crud-object-selection-dialog-new.component.html',\n styleUrls: ['./crud-object-selection-dialog-new.component.scss']\n})\nexport class CrudObjectSelectionDialogNewComponent extends BaseComponent implements OnInit {\n @Input()\n protected config: CrudOverviewDataConfig = {};\n\n @Input() protected newClickedEntry: ContentSwitcherNavigationInput;\n\n protected showSelected: string;\n protected selectedItemCount = 0;\n protected gridReady = false;\n protected readonly CHOOSE_BUTTON_CLASS_NAME = FooterConstants.CHOOSE_BUTTON_CLASS_NAME;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: any,\n private readonly translate: TranslateService,\n protected readonly gridContext: CrudGridContextService,\n private readonly dialogRef: MatDialogRef,\n private readonly navigationHelper: NavigationHelperPrototypeService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService\n ) {\n super();\n\n if (!AssertionUtils.isNullOrUndefined(data.config)) {\n this.config = data.config;\n }\n }\n\n public ngOnInit(): void {\n this.initialiseGrid();\n\n this.setButtons();\n\n this.config?.rowActionComplete?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((data: any) => {\n this.setDataAndInitialiseGridAgain(data);\n });\n }\n\n public initialiseGrid(): void {\n this.config.gridOptions.popupParent = document.getElementById(this.dialogRef.id);\n this.showSelected = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.ONLY_SHOW_SELECTED') + ':';\n this.config.dataObservable?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((data: any[]) => (this.config.rowData = data));\n\n const gridReadyObservable = this.gridContext.gridReady.asObservable();\n\n this.setButtons();\n\n if (this.gridReady) {\n this.setSelectedObject();\n }\n\n gridReadyObservable.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.gridReady = true;\n\n this.setSelectedObject();\n });\n }\n\n public get getGridSelectedRows(): number {\n return this.gridContext?.grid?.api?.getSelectedRows()?.length ?? 0;\n }\n\n protected closeDialog(): void {\n this.navigationHelper.navigateBack();\n }\n\n public back(event: MouseEvent): void {\n AssertionUtils.isNullOrUndefined(this.config.withBackClicked) ? this.dialogRef?.close() : this.config.withBackClicked(event);\n }\n\n public canShowOnlyShowSelectedToggle(): boolean {\n return (this.config.gridOptions?.rowSelection as any)?.mode === 'multiRow' && (this.selectedItemCount !== 0 || this.config.onlyShowSelected);\n }\n\n protected select(): void {\n const data = this.gridContext.grid?.api?.getSelectedRows() ?? [];\n\n AssertionUtils.isNullOrUndefined(this.config.withConfirmClicked) ? this.dialogRef?.close(data) : this.config.withConfirmClicked(data);\n }\n\n protected setButtons(): void {\n if (AssertionUtils.isNullOrUndefined(this.config.withNewClicked) && !AssertionUtils.isNullOrUndefined(this.newClickedEntry)) {\n this.config.withNewClicked = (): void => {\n this.config.selectedObjects = null;\n this.navigationHelper\n .navigateWithContentSwitcher(cloneDeep(this.newClickedEntry))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((data: any) => {\n this.setDataAndInitialiseGridAgain(data);\n });\n };\n }\n\n if (AssertionUtils.isNullOrUndefined(this.config.withBackClicked)) {\n this.config.withBackClicked = (): void => this.navigationHelper.navigateBack();\n }\n\n if (AssertionUtils.isNullOrUndefined(this.config.withConfirmClicked)) {\n this.config.withConfirmClicked = (data: any[]): void => {\n this.navigationHelper.navigateBack(data);\n };\n }\n }\n\n protected setSelectedObject(): void {\n this.gridOptionsBuilderFactoryService\n .getBuilderFromExistingGridApi(this.gridContext.grid.api)\n .withAutomaticRowSelection()\n .withAutomaticButtonFocusOnRowSelection(`[id=\"${this.dialogRef.id}\"] .${FooterConstants.CHOOSE_BUTTON_CLASS_NAME}`);\n\n combineLatest([this.gridContext.grid.firstDataRendered, this.gridContext.grid.rowDataUpdated])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n if (this.config.selectedObjects?.length > 0) {\n this.gridContext.grid.api.forEachNode((node: RowNode) => {\n node.setSelected(this.config.selectedObjects?.some((selectedObject: any) => selectedObject?.id === node.data?.id));\n });\n } else {\n this.config.onlyShowSelected = false;\n }\n });\n\n this.gridContext.grid.rowSelected?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.config.selectedObjects = this.gridContext.grid.api?.getSelectedRows();\n this.selectedItemCount = this.gridContext.grid.api.getSelectedRows()?.length ?? 0;\n\n if (this.config.onlyShowSelected) {\n this.toggleShowOnlySelected(this.selectedItemCount > 0);\n }\n });\n }\n\n protected setDataAndInitialiseGridAgain(data: any): void {\n if (!AssertionUtils.isNullOrUndefined(data)) {\n this.config.selectedObjects = [data];\n }\n this.gridContext.setCurrentGrid.emit();\n this.initialiseGrid();\n }\n\n protected toggleShowOnlySelected(checked: boolean): void {\n this.config.onlyShowSelected = checked;\n\n if (this.config.gridOptions.rowModelType === 'serverSide') {\n this.gridContext.grid.api.onFilterChanged();\n } else {\n checked ? this.gridContext.grid.api.setGridOption('rowData', this.gridContext.grid.api?.getSelectedRows()) : this.gridContext.grid.api.setGridOption('rowData', this.config.rowData);\n }\n }\n}\n","
\r\n
\r\n \r\n

{{ config.entityName | bmsTranslate: {count: 2} }}

\r\n
\r\n\r\n \r\n\r\n
\r\n @if (config.gridOptions?.rowSelection?.mode === 'multiRow' && (selectedItemCount !== 0 || config.onlyShowSelected)) {\r\n
\r\n \r\n
{{ selectedItemCount }} {{ 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.OF' | bmsTranslate }} {{ config.rowData?.length }}
\r\n
\r\n }\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n","import {Component, Inject, Input, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {RowNode} from 'ag-grid-community';\nimport {combineLatest, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {GridOptionsBuilderFactoryService} from '../../../grids/grid-options-builder-factory.service';\nimport {TranslateService} from '../../../translation/translate.service';\nimport {ContentSwitcherDialogService} from '../../content-switcher/content-switcher-dialog.service';\nimport {FooterConstants} from '../../footer/footer.constants';\nimport {CrudGridContextService} from '../crud-grid-context-service/crud-grid.context.service';\nimport {CrudOverviewDataConfig} from '../interfaces/crud-overview-data-config.interface';\n\n@Component({\n templateUrl: './crud-object-selection-dialog.component.html',\n styleUrls: ['./crud-object-selection-dialog.component.scss']\n})\nexport class CrudObjectSelectionDialogComponent extends BaseComponent implements OnInit {\n @Input()\n protected config: CrudOverviewDataConfig = {};\n\n protected showSelected: string;\n protected selectedItemCount = 0;\n protected readonly CHOOSE_BUTTON_CLASS_NAME = FooterConstants.CHOOSE_BUTTON_CLASS_NAME;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: any,\n private readonly translate: TranslateService,\n protected readonly gridContext: CrudGridContextService,\n protected readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly dialogRef: MatDialogRef,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService\n ) {\n super();\n\n if (!AssertionUtils.isNullOrUndefined(data.config)) {\n this.config = data.config;\n }\n }\n\n public ngOnInit(): void {\n this.initialiseGrid();\n }\n\n public initialiseGrid(): void {\n this.config.gridOptions.popupParent = document.getElementById(this.dialogRef.id);\n this.showSelected = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.ONLY_SHOW_SELECTED') + ':';\n this.config.dataObservable?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((data: any[]) => (this.config.rowData = data));\n\n const gridReadyObservable = this.gridContext.gridReady.asObservable();\n\n gridReadyObservable.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.gridOptionsBuilderFactoryService\n .getBuilderFromExistingGridApi(this.gridContext.grid.api)\n .withAutomaticRowSelection()\n .withAutomaticButtonFocusOnRowSelection(`[id=\"${this.dialogRef.id}\"] .${FooterConstants.CHOOSE_BUTTON_CLASS_NAME}`);\n\n combineLatest([this.gridContext.grid.firstDataRendered, this.gridContext.grid.rowDataUpdated])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n if (this.config.selectedObjects?.length > 0 && this.gridContext.grid.api.getSelectedNodes().length !== this.config.selectedObjects?.length) {\n this.gridContext.grid.api.forEachNode((node: RowNode) => {\n node.setSelected(this.config.selectedObjects?.some((selectedObject: any) => selectedObject?.id === node.data?.id));\n });\n }\n });\n\n this.gridContext.grid.rowSelected?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.config.selectedObjects = this.gridContext.grid.api?.getSelectedRows();\n this.selectedItemCount = this.gridContext.grid.api.getSelectedRows()?.length ?? 0;\n\n if (this.config.onlyShowSelected) {\n this.toggleShowOnlySelected(this.selectedItemCount > 0);\n }\n });\n });\n }\n\n public get getGridSelectedRows(): number {\n return this.gridContext?.grid?.api?.getSelectedRows()?.length ?? 0;\n }\n\n protected closeDialog(): void {\n this.contentSwitcher.navigateBack();\n }\n\n public back(event: MouseEvent): void {\n AssertionUtils.isNullOrUndefined(this.config.withBackClicked) ? this.dialogRef?.close() : this.config.withBackClicked(event);\n }\n\n protected select(): void {\n const data = this.gridContext.grid?.api?.getSelectedRows() ?? [];\n\n AssertionUtils.isNullOrUndefined(this.config.withConfirmClicked) ? this.dialogRef?.close(data) : this.config.withConfirmClicked(data);\n }\n\n protected toggleShowOnlySelected(checked: boolean): void {\n this.config.onlyShowSelected = checked;\n\n if (this.config.gridOptions.rowModelType === 'serverSide') {\n this.gridContext.grid.api.onFilterChanged();\n } else {\n checked ? this.gridContext.grid.api.setGridOption('rowData', this.gridContext.grid.api?.getSelectedRows()) : this.gridContext.grid.api.setGridOption('rowData', this.config.rowData);\n }\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {DialogButtonModule} from '../dialog-button/dialog-button.module';\nimport {LabelModule} from '../ellipsis-label/label.module';\nimport {SlideToggleModule} from '../slide-toggle/slide-toggle.module';\nimport {GridSelectionExtraActionsDialogComponent} from './grid-selection-extra-actions-dialog/grid-selection-extra-actions-dialog.component';\nimport {GridSelectionOptionsComponent} from './grid-selection-options.component';\n\n@NgModule({\n imports: [CommonModule, MatIconModule, MatButtonModule, MatTooltipModule, SlideToggleModule, DialogButtonModule, TranslationModule, LabelModule],\n declarations: [GridSelectionOptionsComponent, GridSelectionExtraActionsDialogComponent],\n exports: [GridSelectionOptionsComponent, GridSelectionExtraActionsDialogComponent]\n})\nexport class GridSelectionsOptionsModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {AgGridModule} from 'ag-grid-angular';\nimport {DialogModule} from '../../dialogs/dialog.module';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {GridSelectionsOptionsModule} from '../grid-selection-options/grid-selection-options.module';\nimport {SettingsIconButtonComponent} from '../settings-icon-button/settings-icon-button.component';\nimport {SlideToggleModule} from '../slide-toggle/slide-toggle.module';\nimport {CrudGridContextService} from './crud-grid-context-service/crud-grid.context.service';\nimport {CrudGridWithActionsComponent} from './crud-grid-with-actions/crud-grid-with-actions.component';\nimport {CrudObjectSelectionDialogNewComponent} from './crud-object-selection-dialog-new/crud-object-selection-dialog-new.component';\nimport {CrudObjectSelectionDialogComponent} from './crud-object-selection-dialog/crud-object-selection-dialog.component';\nimport {CrudOverviewDataPageComponent} from './crud-overview-data-page/crud-overview-data-page.component';\n\n@NgModule({\n imports: [CommonModule, AgGridModule, MatIconModule, MatButtonModule, MatTooltipModule, DialogModule, SlideToggleModule, GridSelectionsOptionsModule, TranslationModule, SettingsIconButtonComponent],\n declarations: [CrudGridWithActionsComponent, CrudObjectSelectionDialogComponent, CrudObjectSelectionDialogNewComponent, CrudOverviewDataPageComponent],\n providers: [CrudGridContextService],\n exports: [CrudOverviewDataPageComponent, CrudObjectSelectionDialogComponent]\n})\nexport class CrudOverviewDataModule {}\n","
\n @if (showHeader) {\n
\n \n \n \n \n
\n }\n\n
\n \n
\n
\n","import {Component, Injector, OnInit, Optional, Type} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {debounceTime, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {PrototypeRouteUtils} from '../../common/utils/prototype-route-utils';\nimport {TranslateService} from '../../translation/translate.service';\nimport {CrudGridContextService} from '../crud-overview-data/crud-grid-context-service/crud-grid.context.service';\nimport {CrudObjectSelectionDialogComponent} from '../crud-overview-data/crud-object-selection-dialog/crud-object-selection-dialog.component';\nimport {CrudOverviewDataPageComponent} from '../crud-overview-data/crud-overview-data-page/crud-overview-data-page.component';\nimport {ContentSwitcherDialogService} from './content-switcher-dialog.service';\n\n@Component({\n templateUrl: './content-switcher-dialog.component.html',\n styleUrls: ['./content-switcher-dialog.component.scss']\n})\nexport class ContentSwitcherDialogComponent extends BaseComponent implements OnInit {\n protected injector: Injector;\n protected creatingObjectName: string;\n\n public get component(): Type {\n if (this.contentSwitcher.activeEntry?.component === CrudOverviewDataPageComponent || this.contentSwitcher.activeEntry?.routeData?.route === '') {\n return AssertionUtils.isNullOrUndefined(this.dialog) ? CrudOverviewDataPageComponent : CrudObjectSelectionDialogComponent;\n }\n\n return this.contentSwitcher.activeEntry?.component;\n }\n\n public get showHeader(): boolean {\n return this.component !== CrudObjectSelectionDialogComponent && !AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog) && !this.contentSwitcher.activeEntry?.hideHeader;\n }\n\n public get headerText(): string {\n return `${this.getHeaderPrefix()} ${AssertionUtils.isNullOrUndefined(this.contentSwitcher.activeEntry?.entityName) ? '' : this.translate.instant(this.contentSwitcher.activeEntry?.entityName, {count: 1}).toLowerCase()}`;\n }\n\n public get createdObject(): string {\n return AssertionUtils.isEmpty(this.creatingObjectName) ? '' : `: ${this.creatingObjectName}`;\n }\n\n public get componentInputs(): Record {\n return this.contentSwitcher.getInputs() ?? {};\n }\n\n public constructor(\n private readonly translate: TranslateService,\n @Optional() private readonly dialog: MatDialogRef,\n protected readonly contentSwitcher: ContentSwitcherDialogService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.contentSwitcher.dialog = this.dialog;\n this.contentSwitcher.creatingObjectNameChanged.pipe(takeUntil(this.unSubscribeOnViewDestroy), debounceTime(0)).subscribe((name: string) => (this.creatingObjectName = name));\n\n this.dialog\n ?.beforeClosed()\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.contentSwitcher.reset());\n\n this.injector = Injector.create({providers: [{provide: MatDialogRef, useValue: this.dialog}, CrudGridContextService], parent: this.contentSwitcher.parentInjector});\n }\n\n public getHeaderPrefix(): string {\n const path = AssertionUtils.isNullOrUndefined(this.contentSwitcher.activeEntry?.routeData) ? this.contentSwitcher.activeEntry?.key : this.contentSwitcher.activeEntry?.routeData?.route;\n\n if (PrototypeRouteUtils.isAddPath(path) || PrototypeRouteUtils.isDuplicatePath(path)) {\n return this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.NEW');\n }\n\n if (PrototypeRouteUtils.isEditPath(path)) {\n return this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.EDIT');\n }\n\n return '';\n }\n}\n","import {ColDef, GridOptions} from 'ag-grid-community';\nimport {cloneDeep} from 'lodash-es';\nimport {Observable} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {GridOptionsBuilder} from '../../grids/grid-options-builder';\nimport {GridOptionsBuilderFactoryService} from '../../grids/grid-options-builder-factory.service';\nimport {ContentSwitcherDialogService} from '../content-switcher/content-switcher-dialog.service';\nimport {ContentSwitcherEntry} from '../content-switcher/content-switcher-entry.interface';\nimport {CrudColdef} from './crud-coldef.interface';\nimport {CrudOverviewButtonConfig, CrudOverviewButtonConfigs} from './interfaces/crud-overview-button-config.interface';\nimport {CrudOverviewDataConfig} from './interfaces/crud-overview-data-config.interface';\nimport {CrudOverviewExtraActionConfig} from './interfaces/crud-overview-extra-action-config.interface';\n\nexport class CrudOverviewDataBuilder {\n private readonly config: CrudOverviewDataConfig = {onlyShowSelected: false, buttons: [], extraActions: [], selectedObjects: []};\n private readonly rowActionButtons: CrudOverviewButtonConfig[] = [];\n\n public constructor(\n private readonly gridOptionsBuilderFactory: GridOptionsBuilderFactoryService,\n private readonly contentSwitcher: ContentSwitcherDialogService\n ) {}\n\n public build(): CrudOverviewDataConfig {\n return this.config;\n }\n\n public withGridOptions(colDefs: ColDef[], gridIdentifier: string, data: T[], getOptions?: (builder: GridOptionsBuilder) => GridOptions): this {\n getOptions ??= (builder: GridOptionsBuilder): GridOptions => builder.build();\n this.config.gridOptions = getOptions(this.gridOptionsBuilderFactory.getCrudBuilder(colDefs, gridIdentifier, data, this.rowActionButtons));\n this.config.rowData = data;\n\n return this;\n }\n\n public withCrudGridOptions(crudColdef: CrudColdef, gridIdentifier: string, data: T[], getOptions?: (builder: GridOptionsBuilder) => GridOptions): this {\n getOptions ??= (builder: GridOptionsBuilder): GridOptions => builder.build();\n this.config.gridOptions = getOptions(this.gridOptionsBuilderFactory.getCrudBuilder(crudColdef.colDefs, gridIdentifier, data, this.rowActionButtons));\n this.config.rowData = data;\n\n return this;\n }\n\n public withRowData(dataObservable: Observable): this {\n this.config.dataObservable = dataObservable;\n return this;\n }\n\n public withExtraActions(extraActionConfig: CrudOverviewExtraActionConfig[]): this {\n this.config.extraActions = extraActionConfig;\n return this;\n }\n\n public withDefaultButtons(actionButtonsForGridSelection: CrudOverviewButtonConfigs): this {\n this.config.buttons = actionButtonsForGridSelection.crudOverviewButtonConfigs;\n this.config.rowActionComplete = actionButtonsForGridSelection.rowActionsComplete;\n this.withRowActionButtons(actionButtonsForGridSelection.crudOverviewButtonConfigs);\n return this;\n }\n\n public withSelectedObjects(selectedObjects: T[]): this {\n this.config.selectedObjects = selectedObjects;\n return this;\n }\n\n public withEntityName(title: string): this {\n this.config.entityName = title;\n return this;\n }\n\n public withCustomSettingsClicked(onClick: () => void): this {\n this.config.withCustomSettingsClicked = onClick;\n return this;\n }\n\n public withNewClicked(onClick: (event: MouseEvent) => void): this {\n this.config.withNewClicked = onClick;\n return this;\n }\n\n public withContentSwitcher(newClickedEntry?: ContentSwitcherEntry): this {\n if (AssertionUtils.isNullOrUndefined(this.config.withNewClicked) && !AssertionUtils.isNullOrUndefined(newClickedEntry)) {\n this.config.withNewClicked = (): void => {\n this.config.selectedObjects = null;\n this.contentSwitcher.navigateForward(cloneDeep(newClickedEntry), {});\n };\n }\n\n if (AssertionUtils.isNullOrUndefined(this.config.withBackClicked)) {\n this.config.selectedObjects = null;\n this.config.withBackClicked = (): void => this.contentSwitcher.navigateBack();\n }\n\n if (AssertionUtils.isNullOrUndefined(this.config.withConfirmClicked)) {\n this.config.withConfirmClicked = (data: T[]): void => {\n const shouldClose = !AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog) && AssertionUtils.isEmpty(this.contentSwitcher.navigationHistory);\n\n this.contentSwitcher.activeEntry.data = AssertionUtils.isNullOrUndefined(this.contentSwitcher.activeEntry.data) ? data : {...this.contentSwitcher.activeEntry.data, ...data};\n shouldClose ? this.contentSwitcher.dialog.close(data) : this.contentSwitcher.navigateBack();\n };\n }\n\n return this;\n }\n\n private withRowActionButtons(actionButtonsForGridSelection: CrudOverviewButtonConfig[]): void {\n actionButtonsForGridSelection?.forEach((actionButtonForGridSelection: CrudOverviewButtonConfig) => {\n if (actionButtonForGridSelection.title !== 'ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.EXPORT') {\n this.rowActionButtons.push(actionButtonForGridSelection);\n }\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {filter, Observable, of} from 'rxjs';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {DialogBuilderFactoryService} from '../../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {GridOptionsBuilderFactoryService} from '../../../grids/grid-options-builder-factory.service';\nimport {ContentSwitcherDialogComponent} from '../../content-switcher/content-switcher-dialog.component';\nimport {ContentSwitcherDialogService} from '../../content-switcher/content-switcher-dialog.service';\nimport {CrudObjectSelectionDialogComponent} from '../crud-object-selection-dialog/crud-object-selection-dialog.component';\nimport {CrudOverviewDataBuilder} from '../crud-overview-data-builder';\nimport {CrudOverviewDataConfig} from '../interfaces/crud-overview-data-config.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CrudOverviewDataBuilderFactoryService {\n public constructor(\n private readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly dialogBuilderFactory: DialogBuilderFactoryService,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService\n ) {}\n\n public getBuilder(): CrudOverviewDataBuilder {\n return new CrudOverviewDataBuilder(this.gridOptionsBuilderFactoryService, this.contentSwitcher);\n }\n\n public openObjectSelectionDialog(config: CrudOverviewDataConfig): Observable {\n return this.dialogBuilderFactory\n .getBuilder()\n .withWidth('80vw')\n .withMinWidth(900)\n .withHeight('80vh')\n .withMinHeight(480)\n .openDialog(CrudObjectSelectionDialogComponent, {config})\n .pipe(filter((data: unknown) => !AssertionUtils.isNullOrUndefined(data))) as Observable;\n }\n\n public openContentSwitcherDialog(): Observable {\n return !AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog)\n ? of()\n : (this.dialogBuilderFactory\n .getBuilder()\n .withWidth('80vw')\n .withMinWidth(900)\n .withHeight('80vh')\n .withCloseDisabled()\n .withMinHeight(480)\n .openDialog(ContentSwitcherDialogComponent, {})\n .pipe(filter((data: unknown) => !AssertionUtils.isNullOrUndefined(data))) as Observable);\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatDividerModule} from '@angular/material/divider';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {SettingsIconButtonComponent} from '../settings-icon-button/settings-icon-button.component';\nimport {SplitButtonModule} from '../split-button/split-button.module';\nimport {TabsAndActionsHeaderComponent} from '../tabs-and-actions-header/tabs-and-actions-header.component';\nimport {EditorHeaderComponent} from './editor-header.component';\n\n@NgModule({\n declarations: [EditorHeaderComponent],\n imports: [CommonModule, MatButtonModule, MatDividerModule, MatIconModule, MatMenuModule, TranslationModule, SplitButtonModule, TabsAndActionsHeaderComponent, SettingsIconButtonComponent],\n exports: [EditorHeaderComponent]\n})\nexport class EditorHeaderModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatFormFieldModule} from '@angular/material/form-field';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatInputModule} from '@angular/material/input';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {StringInputComponent} from './string-input.component';\n\n@NgModule({\n declarations: [StringInputComponent],\n imports: [CommonModule, FormsModule, ReactiveFormsModule, TranslationModule, MatFormFieldModule, MatInputModule, MatIconModule, MatButtonModule],\n exports: [StringInputComponent]\n})\nexport class StringInputModule {}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {DateTime, Duration} from 'luxon';\nimport {ColorConstants} from '../../../common/colors-variables.generated';\n\n@Component({\n selector: 'vdw-schedule-item',\n templateUrl: './schedule-item.component.html',\n styleUrls: ['./schedule-item.component.scss']\n})\nexport class ScheduleItemComponent implements OnInit {\n @Input() public name: string;\n @Input() public color: string;\n @Input() public startTime: Duration;\n @Input() public endTime: Duration;\n @Input() public isPastDay: boolean;\n @Input() public isCurrentDay: boolean;\n @Output() public deleteEvent = new EventEmitter();\n\n public startDateTime: DateTime;\n public endDateTime: DateTime;\n public backgroundColor = '';\n public borderColor = '';\n public boxShadow = '';\n\n public ngOnInit(): void {\n const currentDate = DateTime.now().startOf('day');\n this.startDateTime = currentDate.plus({days: this.startTime.days, hours: this.startTime.hours, minutes: this.startTime.minutes});\n this.endDateTime = currentDate.plus({days: this.endTime.days, hours: this.endTime.hours, minutes: this.endTime.minutes});\n this.updateColors();\n }\n\n private updateColors(): void {\n this.backgroundColor = this.isPastDay || this.hasShiftStarted() ? ColorConstants.NEUTRAL_900 : ColorConstants[`${this.color}_900`];\n this.borderColor = this.isPastDay || this.hasShiftStarted() ? ColorConstants.NEUTRAL_700 : ColorConstants[`${this.color}_500`];\n this.boxShadow = this.isPastDay || this.hasShiftStarted() ? 'none' : '0 0 3px 0 ' + ColorConstants.TINT_NEUTRAL_BLACK_30_TRANSPARENT;\n }\n\n private hasShiftStarted(): boolean {\n if (this.isCurrentDay) {\n const gap = this.startDateTime.diff(DateTime.now(), 'minutes').minutes;\n return gap <= 0;\n }\n return false;\n }\n}\n","
\n \n
\n {{ name }}\n {{ startDateTime | DateTime: 'TIME_SIMPLE' }} - {{ endDateTime | DateTime: 'TIME_SIMPLE' }}\n
\n \n
\n\n","
\n @for (item of timeList; track $index) {\n {{ item | DateTime: 'TIME_SIMPLE' }}\n }\n
\n","import {Component} from '@angular/core';\nimport {DateTime, Duration} from 'luxon';\nimport {TimelineHeaderParams} from './timeline-header.interface';\n\n@Component({\n templateUrl: './timeline-header.component.html',\n styleUrls: ['./timeline-header.component.scss']\n})\nexport class TimelineHeaderComponent {\n public timeList: DateTime[] = [];\n private readonly BOX_WIDTH = 48;\n\n public agInit(params: TimelineHeaderParams): void {\n this.timeList = this.generateTimeArray(params.startTime, params.totalHours);\n params.api.setColumnWidths([{key: params.column, newWidth: params.totalHours * this.BOX_WIDTH}]);\n }\n\n private generateTimeArray(startTime: Duration, totalHours: number): DateTime[] {\n const times = [];\n\n let dateTime = DateTime.now().startOf('day').plus({hours: startTime.hours, minutes: startTime.minutes});\n\n for (let i = 0; i < totalHours; i++) {\n times.push(dateTime);\n dateTime = dateTime.plus({hours: 1});\n }\n\n return times;\n }\n}\n","import {Injectable} from '@angular/core';\nimport {Duration} from 'luxon';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {ScheduleItem} from '../schedule-item.interface';\nimport {ScheduleItemWithWidth} from './schedule-item-with-width.interface';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class TimelineRowService {\n private newScheduleItems: ScheduleItemWithWidth[];\n private readonly BOX_WIDTH = 48;\n\n public getScheduleItems(scheduleItems: ScheduleItem[], startTime: Duration, endTime: Duration): ScheduleItemWithWidth[] {\n this.newScheduleItems = [];\n\n if (scheduleItems.length === 0) {\n this.pushDataToArray(this.calculateWidth(startTime, endTime), null);\n } else {\n this.pushMultiDataToArray(scheduleItems, startTime, endTime);\n }\n\n return this.newScheduleItems;\n }\n\n public calculateWidth(timeOne: Duration, timeTwo: Duration, gapToBeDeleted: number = 0): string | null {\n const gap = timeTwo.minus(timeOne).as('minutes');\n return this.calculateGapWidth(gap, gapToBeDeleted);\n }\n\n private pushMultiDataToArray(scheduleItems: ScheduleItem[], startTime: Duration, endTime: Duration): void {\n for (let index = 0; index < scheduleItems.length; index++) {\n const element = scheduleItems[index];\n const isLastElement = index === scheduleItems.length - 1;\n const nextElement = scheduleItems[index + 1];\n\n if (index === 0) {\n this.pushDataToArray(this.calculateWidth(startTime, element.startTime), null);\n }\n if (!AssertionUtils.isNullOrUndefined(element.startTime) && !AssertionUtils.isNullOrUndefined(element.endTime)) {\n this.pushDataToArray(this.calculateWidth(element.startTime, element.endTime, 1), element);\n }\n if (!AssertionUtils.isNullOrUndefined(nextElement) && this.checkGapBetweenSchedules(element.endTime, nextElement.startTime)) {\n this.pushDataToArray(this.calculateWidth(element.endTime, nextElement.startTime), null);\n }\n if (isLastElement) {\n this.pushDataToArray(this.calculateWidth(element.endTime, endTime), null);\n }\n }\n }\n\n private pushDataToArray(width: string, schedule: ScheduleItem): void {\n this.newScheduleItems.push({\n width: width,\n scheduleItem: schedule\n });\n }\n\n private checkGapBetweenSchedules(endTime: Duration, startTime: Duration): boolean {\n return !endTime.equals(startTime);\n }\n\n private calculateGapWidth(gap: number, gapMinus: number): string {\n return gap > 0 ? `${(gap / 60) * this.BOX_WIDTH - gapMinus}px` : null;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'vdw-timeline-row-button',\n templateUrl: './timeline-row-button.component.html',\n styleUrls: ['./timeline-row-button.component.scss']\n})\nexport class TimelineRowButtonComponent {\n @Input() public isPastDay: boolean;\n @Input() public isCurrentDay: boolean;\n @Input() public isWorkingDay: boolean;\n}\n","
\n
\n \n
\n
\n","
\n @for (item of scheduleItems; track $index) {\n @if (item.scheduleItem === null) {\n \n } @else {\n
\n \n
\n }\n }\n
\n\n\n @if (width) {\n
\n \n
\n }\n
\n","import {Component} from '@angular/core';\nimport {DateTime} from 'luxon';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {ScheduleItem} from '../schedule-item.interface';\nimport {ScheduleItemWithWidth} from './schedule-item-with-width.interface';\nimport {TimelineRowCellRendererParams} from './timeline-row.interface';\nimport {TimelineRowService} from './timeline-row.service';\n\n@Component({\n selector: 'vdw-timeline-row',\n templateUrl: './timeline-row.component.html',\n styleUrls: ['./timeline-row.component.scss']\n})\nexport class TimelineRowComponent {\n public scheduleItems: ScheduleItemWithWidth[] = [];\n public isPastDay = false;\n public isCurrentDay = false;\n public isWorkingDay = false;\n public date: DateTime;\n public paddingLeft: string;\n public onRowButtonClicked: () => void;\n public onScheduleItemDeleted: (id: number | string) => void;\n\n public constructor(private readonly timelineRowService: TimelineRowService) {}\n\n public agInit(params: TimelineRowCellRendererParams): void {\n this.isWorkingDay = params.data.workingDay ?? true;\n this.date = params.data.date;\n this.isCurrentDay = !AssertionUtils.isNullOrUndefined(params.data.date) && params.data.date?.hasSame(DateTime.now(), 'day');\n this.isPastDay = !AssertionUtils.isNullOrUndefined(params.data.date) && params.data.date < DateTime.now().startOf('day');\n\n const previousDayEndTime = params.api\n ?.getDisplayedRowAtIndex(params.node.rowIndex - 1)\n ?.data?.scheduleItems?.at(-1)\n ?.endTime?.minus({days: 1});\n\n if (previousDayEndTime > params.startTime) {\n this.paddingLeft = this.timelineRowService.calculateWidth(params.startTime, previousDayEndTime);\n }\n if (!AssertionUtils.isNullOrUndefined(params.value)) {\n this.scheduleItems = this.timelineRowService.getScheduleItems(params.value, previousDayEndTime > params.startTime ? previousDayEndTime : params.startTime, params.startTime.plus({days: 1}));\n }\n\n this.onRowButtonClicked = (): void => {\n params.onRowButtonClicked(params.data);\n };\n this.onScheduleItemDeleted = (id: number | string): void => {\n params.data.scheduleItems = params.data.scheduleItems.filter((scheduleItem: ScheduleItem) => scheduleItem.id !== id);\n params.api.applyTransaction({update: [params.data]});\n params.onScheduleItemDeleted(id);\n };\n }\n}\n","import {Directive, EventEmitter, HostListener, OnInit, Output} from '@angular/core';\nimport {distinctUntilChanged, pairwise, Subject, takeUntil, throttleTime} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\n\n@Directive({\n selector: '[vdwShowOverlayForVirtualScroller]'\n})\nexport class ShowOverlayForVirtualScrollerDirective extends BaseComponent implements OnInit {\n @Output() public showOverlayChange = new EventEmitter();\n public forceShowOverlay = new Subject();\n\n private overlayChangeSubject = new Subject();\n private readonly virtualScrollSubject = new Subject();\n\n public constructor() {\n super();\n }\n\n public ngOnInit(): void {\n this.toggleOverlayBasedOnScrollDirection();\n\n this.overlayChangeSubject.pipe(distinctUntilChanged(), throttleTime(100), takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: boolean) => this.showOverlayChange.next(value));\n this.subscribeToForceShowOverlay();\n }\n\n @HostListener('scroll', ['$event'])\n public onScrollEvent(event: Event): void {\n this.virtualScrollSubject.next((event.target as Element).scrollTop);\n }\n\n private toggleOverlayBasedOnScrollDirection(): void {\n this.virtualScrollSubject.pipe(pairwise(), takeUntil(this.unSubscribeOnViewDestroy)).subscribe(([first, second]: [number, number]) => {\n if (second > first) {\n this.overlayChangeSubject.next(false);\n } else {\n this.overlayChangeSubject.next(true);\n }\n });\n }\n\n private subscribeToForceShowOverlay(): void {\n this.forceShowOverlay.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.showOverlayChange.emit(true);\n });\n }\n}\n","import {Directive, OnDestroy} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n@Directive()\nexport abstract class BaseComponent implements OnDestroy {\n public saving = false;\n protected unSubscribeOnViewDestroy: Subject = new Subject();\n\n public finalizeSaving(): () => void {\n return (): boolean => (this.saving = false);\n }\n\n public ngOnDestroy(): void {\n this.unSubscribeOnViewDestroy.next(true);\n this.unSubscribeOnViewDestroy.complete();\n this.onNavigationHelperDestroy();\n }\n\n // eslint-disable-next-line no-empty-function\n public onNavigationHelperDestroy(): void {}\n}\n","import {Component, Input, Optional, Self} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatFormFieldControlHelper} from '../../../custom-components/helper/form-field-control-helper';\n\n@Component({\n selector: 'vdw-bit-pattern-editor-form-field',\n templateUrl: './bit-pattern-editor-form-field.component.html',\n providers: [{provide: MatFormFieldControl, useExisting: BitPatternEditorFormFieldComponent}]\n})\nexport class BitPatternEditorFormFieldComponent extends MatFormFieldControlHelper {\n @Input() public disabled: boolean;\n\n public static nextId = 0;\n\n public id = `vdw-bit-pattern-editor-form-field-${BitPatternEditorFormFieldComponent.nextId++}`;\n\n public constructor(@Optional() @Self() public readonly ngControl: NgControl) {\n super(ngControl);\n }\n\n public onBitPatternChanged(value: number): void {\n this.onChange(value);\n }\n}\n","\n","
\n {{ bitPattern.toString() | hexValue }}\n
\n
\n {{ item }}\n
\n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Component({\n selector: 'vdw-bit-pattern-editor',\n styleUrls: ['./bit-pattern-editor.component.scss'],\n templateUrl: './bit-pattern-editor.component.html'\n})\nexport class BitPatternEditorComponent {\n @Input() public bitPattern = 0;\n @Input() public enabledBits = 1111111111111111;\n @Input() public showHexValue = true;\n @Input() public disabled = false;\n @Output() public bitPatternChange = new EventEmitter();\n\n public readonly checkboxList = ['I16', 'I15', 'I14', 'I13', 'I12', 'I11', 'I10', 'I9', 'I8', 'I7', 'I6', 'I5', 'I4', 'I3', 'I2', 'I1'];\n\n public isDisabled(index: number): boolean {\n return !+this.getStringBits(this.enabledBits)[index] || this.disabled;\n }\n\n public isChecked(index: number): boolean {\n const checked = !!+this.getStringBits(this.bitPattern)[index];\n if (checked && this.isDisabled(index) && !this.disabled) {\n this.checkedChanged(index, false);\n return false;\n }\n return checked;\n }\n\n public checkedChanged(index: number, checked: boolean): void {\n const stringBitPattern = this.getStringBits(this.bitPattern);\n this.bitPattern = +(stringBitPattern.substring(0, index) + +checked + stringBitPattern.substring(index + 1));\n this.bitPatternChange.emit(this.bitPattern);\n }\n\n private getStringBits(bits: number): string {\n return AssertionUtils.isNullOrUndefined(bits) ? '0000000000000000' : bits.toString().padStart(16, '0');\n }\n}\n","import {animate, AnimationTriggerMetadata, query, style, transition, trigger} from '@angular/animations';\n\nexport function skeletonViewAnimation(querySelector: string): AnimationTriggerMetadata {\n return trigger('fadeIn', [\n transition('true => false', [\n query(':leave', [style({display: 'none'})], {optional: true}),\n query(`${querySelector}, :enter`, [style({opacity: 0})], {optional: true}),\n query(`${querySelector}, :enter`, [animate('300ms ease-in', style({opacity: 1}))], {\n optional: true\n })\n ])\n ]);\n}\n","// IMPORTANT: THIS IS A GENERATED FILE AND SHOULD NOT BE EDITED OR CHECKED INTO VERSION CONTROL!\n/* eslint-disable */\nexport class ColorConstants {\n public static readonly NEUTRAL_BLACK: string = '#1b1d22';\n public static readonly NEUTRAL_200: string = '#454a54';\n public static readonly NEUTRAL_300: string = '#585f6d';\n public static readonly NEUTRAL_400: string = '#666f7d';\n public static readonly NEUTRAL_500: string = '#7d8494';\n public static readonly NEUTRAL_600: string = '#959ca9';\n public static readonly NEUTRAL_700: string = '#b5b9c2';\n public static readonly NEUTRAL_800: string = '#d7d9de';\n public static readonly NEUTRAL_850: string = '#e3e5e8';\n public static readonly NEUTRAL_900: string = '#f5f6f8';\n public static readonly NEUTRAL_950: string = '#f9f9fa';\n public static readonly NEUTRAL_WHITE: string = '#ffffff';\n public static readonly TINT_NEUTRAL_BLACK_6_TRANSPARENT: string = 'rgba(27, 29, 34, 0.06)';\n public static readonly TINT_NEUTRAL_BLACK_15_TRANSPARENT: string = 'rgba(27, 29, 34, 0.15)';\n public static readonly TINT_NEUTRAL_BLACK_20_TRANSPARENT: string = 'rgba(27, 29, 34, 0.2)';\n public static readonly TINT_NEUTRAL_BLACK_25_TRANSPARENT: string = 'rgba(27, 29, 34, 0.25)';\n public static readonly TINT_NEUTRAL_BLACK_30_TRANSPARENT: string = 'rgba(27, 29, 34, 0.3)';\n public static readonly TINT_NEUTRAL_950_80_TRANSPARENT: string = 'rgba(249, 249, 250, 0.8)';\n public static readonly PRIMARY_300: string = '#0055cc';\n public static readonly PRIMARY_400: string = '#0c66e4';\n public static readonly PRIMARY_500: string = '#1d7afc';\n public static readonly PRIMARY_600: string = '#579dff';\n public static readonly PRIMARY_700: string = '#9ac4ff';\n public static readonly PRIMARY_800: string = '#cce0ff';\n public static readonly PRIMARY_850: string = '#e7f0ff';\n public static readonly PRIMARY_900: string = '#f2f7ff';\n public static readonly PRIMARY_AQUA_200: string = '#206a83';\n public static readonly PRIMARY_AQUA_400: string = '#2898bd';\n public static readonly PRIMARY_AQUA_500: string = '#42b2d7';\n public static readonly PRIMARY_AQUA_600: string = '#6cc3e0';\n public static readonly PRIMARY_AQUA_800: string = '#c6edfb';\n public static readonly PRIMARY_AQUA_900: string = '#edfbff';\n public static readonly PRIMARY_TEAL_200: string = '#216e4e';\n public static readonly PRIMARY_TEAL_400: string = '#22a06b';\n public static readonly PRIMARY_TEAL_500: string = '#2abb7f';\n public static readonly PRIMARY_TEAL_600: string = '#4bce97';\n public static readonly PRIMARY_TEAL_800: string = '#baf3db';\n public static readonly PRIMARY_TEAL_900: string = '#e0fff3';\n public static readonly PRIMARY_YELLOW_200: string = '#a16207';\n public static readonly PRIMARY_YELLOW_400: string = '#dca908';\n public static readonly PRIMARY_YELLOW_500: string = '#f0c82b';\n public static readonly PRIMARY_YELLOW_600: string = '#fde047';\n public static readonly PRIMARY_YELLOW_700: string = '#fef08a';\n public static readonly PRIMARY_YELLOW_800: string = '#fef9c3';\n public static readonly PRIMARY_YELLOW_850: string = '#fefbd9';\n public static readonly PRIMARY_YELLOW_900: string = '#fffded';\n public static readonly PRIMARY_PINK_200: string = '#943d73';\n public static readonly PRIMARY_PINK_400: string = '#cf5aa2';\n public static readonly PRIMARY_PINK_500: string = '#da62ac';\n public static readonly PRIMARY_PINK_600: string = '#e774bb';\n public static readonly PRIMARY_PINK_800: string = '#fdd0ec';\n public static readonly PRIMARY_PINK_900: string = '#fff2fa';\n public static readonly PRIMARY_PURPLE_200: string = '#6f4db2';\n public static readonly PRIMARY_PURPLE_400: string = '#9470db';\n public static readonly PRIMARY_PURPLE_500: string = '#a17ee7';\n public static readonly PRIMARY_PURPLE_600: string = '#af8fef';\n public static readonly PRIMARY_PURPLE_800: string = '#e5d8fd';\n public static readonly PRIMARY_PURPLE_900: string = '#f8f5ff';\n public static readonly PRIMARY_VIOLET_200: string = '#4d5eb2';\n public static readonly PRIMARY_VIOLET_400: string = '#7082db';\n public static readonly PRIMARY_VIOLET_500: string = '#7f90e7';\n public static readonly PRIMARY_VIOLET_600: string = '#8f9fef';\n public static readonly PRIMARY_VIOLET_800: string = '#d8defd';\n public static readonly PRIMARY_VIOLET_900: string = '#f5f6ff';\n public static readonly SEMANTIC_ERROR_200: string = '#ae2424';\n public static readonly SEMANTIC_ERROR_300: string = '#c92c2c';\n public static readonly SEMANTIC_ERROR_400: string = '#db3b3b';\n public static readonly SEMANTIC_ERROR_500: string = '#f15050';\n public static readonly SEMANTIC_ERROR_600: string = '#f86868';\n public static readonly SEMANTIC_ERROR_700: string = '#fd9191';\n public static readonly SEMANTIC_ERROR_800: string = '#ffd2d2';\n public static readonly SEMANTIC_ERROR_850: string = '#ffe4e4';\n public static readonly SEMANTIC_ERROR_900: string = '#fff5f5';\n public static readonly SEMANTIC_WARNING_200: string = '#a55300';\n public static readonly SEMANTIC_WARNING_400: string = '#da740f';\n public static readonly SEMANTIC_WARNING_500: string = '#f3993f';\n public static readonly SEMANTIC_WARNING_600: string = '#feb062';\n public static readonly SEMANTIC_WARNING_800: string = '#fee2c8';\n public static readonly SEMANTIC_WARNING_900: string = '#fff6ed';\n public static readonly SEMANTIC_SUCCESS_200: string = '#4c6b1f';\n public static readonly SEMANTIC_SUCCESS_400: string = '#6a9a23';\n public static readonly SEMANTIC_SUCCESS_500: string = '#82b536';\n public static readonly SEMANTIC_SUCCESS_600: string = '#94c748';\n public static readonly SEMANTIC_SUCCESS_800: string = '#d3f1a7';\n public static readonly SEMANTIC_SUCCESS_900: string = '#effcd9';\n public static readonly PRIMARY_COLOR_DARK_BLUE: string = '#13296d';\n public static readonly PRIMARY_COLOR_VDW_BLUE: string = '#2b4ec0';\n public static readonly PRIMARY_COLOR_HIGHLIGHT_BLUE: string = '#4269e2';\n public static readonly PRIMARY_COLOR_LIGHTBLUE: string = '#9dc1ff';\n public static readonly PRIMARY_COLOR_VDW_PINK: string = '#e0669e';\n public static readonly PRIMARY_COLOR_GREY: string = '#737b92';\n public static readonly PRIMARY_COLOR_WHITE: string = '#ffffff';\n public static readonly PRIMARY_COLOR_BLACK: string = '#101a43';\n public static readonly PRIMARY_COLOR_JUTE: string = '#dc895b';\n public static readonly PRIMARY_COLOR_JUTE_NEW: string = '#c26100';\n public static readonly FUNCTIONAL_COLOR_RED: string = '#fa3d3d';\n public static readonly FUNCTIONAL_COLOR_ORANGE: string = '#fa8b3d';\n public static readonly FUNCTIONAL_COLOR_GREEN: string = '#0fba4c';\n public static readonly FUNCTIONAL_COLOR_SAT_PURPLE: string = '#7506e5';\n public static readonly FUNCTIONAL_COLOR_SAT_PINK: string = '#f07';\n public static readonly FUNCTIONAL_COLOR_SAT_TURQUOISE: string = '#019db8';\n public static readonly FUNCTIONAL_COLOR_SAT_BROWN: string = '#86492c';\n public static readonly PRIMARY_COLOR_VDW_GRADIENT: string = 'linear-gradient(221.58deg, #2b4ec0 14.25%, #294ab7 25.87%, #1e388c 85.4%)';\n public static readonly TINT_DARKBLUE_70: string = '#5a6a9a';\n public static readonly TINT_DARKBLUE_70_TRANSPARENT: string = 'rgba(19, 41, 109, 0.7)';\n public static readonly TINT_DARKBLUE_60: string = '#717fa7';\n public static readonly TINT_DARKBLUE_50: string = '#8a94b7';\n public static readonly TINT_DARKBLUE_50_TRANSPARENT: string = 'rgba(19, 41, 109, 0.5)';\n public static readonly TINT_DARKBLUE_30: string = '#b9bfd4';\n public static readonly TINT_DARKBLUE_30_TRANSPARENT: string = 'rgba(19, 41, 109, 0.3)';\n public static readonly TINT_DARKBLUE_20: string = '#d0d4e2';\n public static readonly TINT_DARKBLUE_20_TRANSPARENT: string = 'rgba(19, 41, 109, 0.2)';\n public static readonly TINT_DARKBLUE_13_TRANSPARENT: string = 'rgba(19, 41, 109, 0.13)';\n public static readonly TINT_DARKBLUE_10_TRANSPARENT: string = 'rgba(19, 41, 109, 0.1)';\n public static readonly TINT_DARKBLUE_10: string = '#e8eaf1';\n public static readonly TINT_DARKBLUE_6: string = '#f1f2f6';\n public static readonly TINT_DARKBLUE_6_TRANSPARENT: string = 'rgba(19, 41, 109, 0.06)';\n public static readonly TINT_DARKBLUE_2: string = '#fafbfc';\n public static readonly TINT_DARKBLUE_2_TRANSPARENT: string = 'rgba(19, 41, 109, 0.02)';\n public static readonly TINT_VDW_BLUE_HOVER: string = '#223e9a';\n public static readonly TINT_VDW_BLUE_70: string = '#6b84d3';\n public static readonly TINT_VDW_BLUE_70_TRANSPARENT: string = 'rgba(43, 78, 192, 0.7)';\n public static readonly TINT_VDW_BLUE_60: string = '#8095d9';\n public static readonly TINT_VDW_BLUE_50: string = '#95a7e0';\n public static readonly TINT_VDW_BLUE_40_TRANSPARENT: string = 'rgba(43, 78, 192, 0.4)';\n public static readonly TINT_VDW_BLUE_30: string = '#c0caed';\n public static readonly TINT_VDW_BLUE_30_TRANSPARENT: string = 'rgba(43, 78, 192, 0.3)';\n public static readonly TINT_VDW_BLUE_20: string = '#d5dcf2';\n public static readonly TINT_VDW_BLUE_20_TRANSPARENT: string = 'rgba(43, 78, 192, 0.2)';\n public static readonly TINT_VDW_BLUE_10: string = '#eaeef9';\n public static readonly TINT_VDW_BLUE_10_TRANSPARENT: string = 'rgba(43, 78, 192, 0.1)';\n public static readonly TINT_VDW_BLUE_6: string = '#f3f5fc';\n public static readonly TINT_VDW_BLUE_6_TRANSPARENT: string = 'rgba(43, 78, 192, 0.06)';\n public static readonly TINT_BLACK_50: string = '#888da1';\n public static readonly TINT_BLACK_50_TRANSPARENT: string = 'rgba(16, 26, 67, 0.5)';\n public static readonly TINT_BLACK_40_TRANSPARENT: string = 'rgba(16, 26, 67, 0.4)';\n public static readonly TINT_BLACK_30_TRANSPARENT: string = 'rgba(16, 26, 67, 0.3)';\n public static readonly TINT_BLACK_20: string = '#cfd1d9';\n public static readonly TINT_BLACK_20_TRANSPARENT: string = 'rgba(16, 26, 67, 0.2)';\n public static readonly TINT_BLACK_10_TRANSPARENT: string = 'rgba(16, 26, 67, 0.1)';\n public static readonly TINT_LIGHTBLUE_70: string = '#bbd4ff';\n public static readonly TINT_LIGHTBLUE_40_TRANSPARENT: string = 'rgba(157, 193, 255, 0.4)';\n public static readonly TINT_LIGHTBLUE_30: string = '#e2edff';\n public static readonly TINT_LIGHTBLUE_30_TRANSPARENT: string = 'rgba(157, 193, 255, 0.3)';\n public static readonly TINT_LIGHTBLUE_20: string = '#ebf3ff';\n public static readonly TINT_LIGHTBLUE_20_TRANSPARENT: string = 'rgba(157, 193, 255, 0.2)';\n public static readonly TINT_LIGHTBLUE_10: string = '#f6f9ff';\n public static readonly TINT_LIGHTBLUE_10_TRANSPARENT: string = 'rgba(157, 193, 255, 0.1)';\n public static readonly TINT_LIGHTBLUE_6: string = '#f9fcff';\n public static readonly TINT_RED_70: string = '#fc7777';\n public static readonly TINT_RED_70_TRANSPARENT: string = 'rgba(250, 61, 61, 0.7)';\n public static readonly TINT_RED_50: string = '#fd9e9e';\n public static readonly TINT_RED_50_TRANSPARENT: string = 'rgba(250, 61, 61, 0.5)';\n public static readonly TINT_RED_30: string = '#fec5c5';\n public static readonly TINT_RED_30_TRANSPARENT: string = 'rgba(250, 61, 61, 0.3)';\n public static readonly TINT_RED_20: string = '#fed8d8';\n public static readonly TINT_RED_20_TRANSPARENT: string = 'rgba(250, 61, 61, 0.2)';\n public static readonly TINT_RED_10: string = '#ffecec';\n public static readonly TINT_RED_10_TRANSPARENT: string = 'rgba(250, 61, 61, 0.1)';\n public static readonly TINT_RED_6: string = '#fff4f4';\n public static readonly TINT_RED_6_TRANSPARENT: string = 'rgba(250, 61, 61, 0.06)';\n public static readonly TINT_ORANGE_70: string = '#fcae78';\n public static readonly TINT_ORANGE_50: string = '#fdc59e';\n public static readonly TINT_ORANGE_20: string = '#fee8d8';\n public static readonly TINT_ORANGE_20_TRANSPARENT: string = 'rgba(250, 139, 61, 0.2)';\n public static readonly TINT_ORANGE_10: string = '#fff4ec';\n public static readonly TINT_ORANGE_10_TRANSPARENT: string = 'rgba(250, 139, 61, 0.1)';\n public static readonly TINT_ORANGE_6: string = '#fff8f4';\n public static readonly TINT_GREEN_70: string = '#57cf85';\n public static readonly TINT_GREEN_50: string = '#87dda6';\n public static readonly TINT_GREEN_20: string = '#cff1db';\n public static readonly TINT_GREEN_20_TRANSPARENT: string = 'rgba(15, 186, 76, 0.2)';\n public static readonly TINT_GREEN_10: string = '#e7f9ee';\n public static readonly TINT_GREEN_6: string = '#f1fbf4';\n public static readonly TINT_PINK_70: string = '#ea94bc';\n public static readonly TINT_PINK_50: string = '#f0b3cf';\n public static readonly TINT_PINK_20: string = '#f9e0ec';\n public static readonly TINT_PINK_10: string = '#fcf0f6';\n public static readonly TINT_PINK_6: string = '#fdf6f9';\n public static readonly PLANNING_SOFT_ORANGE: string = '#ffcab9';\n public static readonly PLANNING_SOFT_YELLOW: string = '#fcecc5';\n public static readonly PLANNING_SKY_BLUE: string = '#9ae1ff';\n public static readonly PLANNING_BRIGHT_SKY_BLUE: string = '#b2f4f8';\n public static readonly PLANNING_BABY_BLUE: string = '#e2f5ff';\n public static readonly PLANNING_BRIGHT_PINK: string = '#f2aefe';\n public static readonly PLANNING_SOFT_PINK: string = '#fcceec';\n public static readonly PLANNING_SOFT_PURPLE: string = '#ded7f3';\n public static readonly PLANNING_SOFT_BLUE: string = '#c4cded';\n public static readonly PLANNING_SOFT_GREY: string = '#e7e6ee';\n public static readonly TINT_WHITE_90_TRANSPARENT: string = 'rgba(255, 255, 255, 0.9)';\n public static readonly TINT_WHITE_7_TRANSPARENT: string = 'rgba(255, 255, 255, 0.07)';\n public static readonly TINT_JUTE_20_TRANSPARENT: string = 'rgba(220, 137, 91, 0.2)';\n}\n","export const shade = [\n {name: 'aliceblue', hex: '#F0F8FF', red: 240, green: 248, blue: 255, hue: 208, saturation: 100, luminance: 97},\n {name: 'antiquewhite', hex: '#FAEBD7', red: 250, green: 235, blue: 215, hue: 34, saturation: 78, luminance: 91},\n {name: 'aqua', hex: '#00FFFF', red: 0, green: 255, blue: 255, hue: 180, saturation: 100, luminance: 50},\n {name: 'aquamarine', hex: '#7FFFD4', red: 127, green: 255, blue: 212, hue: 160, saturation: 100, luminance: 75},\n {name: 'azure', hex: '#F0FFFF', red: 240, green: 255, blue: 255, hue: 180, saturation: 100, luminance: 97},\n {name: 'beige', hex: '#F5F5DC', red: 245, green: 245, blue: 220, hue: 60, saturation: 56, luminance: 91},\n {name: 'bisque', hex: '#FFE4C4', red: 255, green: 228, blue: 196, hue: 33, saturation: 100, luminance: 88},\n {name: 'black', hex: '#000000', red: 0, green: 0, blue: 0, hue: 0, saturation: 0, luminance: 0},\n {name: 'blanchedalmond', hex: '#FFEBCD', red: 255, green: 235, blue: 205, hue: 36, saturation: 100, luminance: 90},\n {name: 'blue', hex: '#0000FF', red: 0, green: 0, blue: 255, hue: 240, saturation: 100, luminance: 50},\n {name: 'blueviolet', hex: '#8A2BE2', red: 138, green: 43, blue: 226, hue: 271, saturation: 76, luminance: 53},\n {name: 'brown', hex: '#A52A2A', red: 165, green: 42, blue: 42, hue: 0, saturation: 59, luminance: 41},\n {name: 'burlywood', hex: '#DEB887', red: 222, green: 184, blue: 135, hue: 34, saturation: 57, luminance: 70},\n {name: 'cadetblue', hex: '#5F9EA0', red: 95, green: 158, blue: 160, hue: 182, saturation: 25, luminance: 50},\n {name: 'chartreuse', hex: '#7FFF00', red: 127, green: 255, blue: 0, hue: 90, saturation: 100, luminance: 50},\n {name: 'chocolate', hex: '#D2691E', red: 210, green: 105, blue: 30, hue: 25, saturation: 75, luminance: 47},\n {name: 'coral', hex: '#FF7F50', red: 255, green: 127, blue: 80, hue: 16, saturation: 100, luminance: 66},\n {name: 'cornflowerblue', hex: '#6495ED', red: 100, green: 149, blue: 237, hue: 219, saturation: 79, luminance: 66},\n {name: 'cornsilk', hex: '#FFF8DC', red: 255, green: 248, blue: 220, hue: 48, saturation: 100, luminance: 93},\n {name: 'crimson', hex: '#DC143C', red: 220, green: 20, blue: 60, hue: 348, saturation: 83, luminance: 47},\n {name: 'cyan', hex: '#00FFFF', red: 0, green: 255, blue: 255, hue: 180, saturation: 100, luminance: 50},\n {name: 'darkblue', hex: '#00008B', red: 0, green: 0, blue: 139, hue: 240, saturation: 100, luminance: 27},\n {name: 'darkcyan', hex: '#008B8B', red: 0, green: 139, blue: 139, hue: 180, saturation: 100, luminance: 27},\n {name: 'darkgoldenrod', hex: '#B8860B', red: 184, green: 134, blue: 11, hue: 43, saturation: 89, luminance: 38},\n {name: 'darkgray', hex: '#A9A9A9', red: 169, green: 169, blue: 169, hue: 0, saturation: 0, luminance: 66},\n {name: 'darkgreen', hex: '#006400', red: 0, green: 100, blue: 0, hue: 120, saturation: 100, luminance: 20},\n {name: 'darkgrey', hex: '#A9A9A9', red: 169, green: 169, blue: 169, hue: 0, saturation: 0, luminance: 66},\n {name: 'darkkhaki', hex: '#BDB76B', red: 189, green: 183, blue: 107, hue: 56, saturation: 38, luminance: 58},\n {name: 'darkmagenta', hex: '#8B008B', red: 139, green: 0, blue: 139, hue: 300, saturation: 100, luminance: 27},\n {name: 'darkolivegreen', hex: '#556B2F', red: 85, green: 107, blue: 47, hue: 82, saturation: 39, luminance: 30},\n {name: 'darkorange', hex: '#FF8C00', red: 255, green: 140, blue: 0, hue: 33, saturation: 100, luminance: 50},\n {name: 'darkorchid', hex: '#9932CC', red: 153, green: 50, blue: 204, hue: 280, saturation: 61, luminance: 50},\n {name: 'darkred', hex: '#8B0000', red: 139, green: 0, blue: 0, hue: 0, saturation: 100, luminance: 27},\n {name: 'darksalmon', hex: '#E9967A', red: 233, green: 150, blue: 122, hue: 15, saturation: 72, luminance: 70},\n {name: 'darkseagreen', hex: '#8FBC8F', red: 143, green: 188, blue: 143, hue: 120, saturation: 25, luminance: 65},\n {name: 'darkslateblue', hex: '#483D8B', red: 72, green: 61, blue: 139, hue: 248, saturation: 39, luminance: 39},\n {name: 'darkslategray', hex: '#2F4F4F', red: 47, green: 79, blue: 79, hue: 180, saturation: 25, luminance: 25},\n {name: 'darkslategrey', hex: '#2F4F4F', red: 47, green: 79, blue: 79, hue: 180, saturation: 25, luminance: 25},\n {name: 'darkturquoise', hex: '#00CED1', red: 0, green: 206, blue: 209, hue: 181, saturation: 100, luminance: 41},\n {name: 'darkviolet', hex: '#9400D3', red: 148, green: 0, blue: 211, hue: 282, saturation: 100, luminance: 41},\n {name: 'deeppink', hex: '#FF1493', red: 255, green: 20, blue: 147, hue: 328, saturation: 100, luminance: 54},\n {name: 'deepskyblue', hex: '#00BFFF', red: 0, green: 191, blue: 255, hue: 195, saturation: 100, luminance: 50},\n {name: 'dimgray', hex: '#696969', red: 105, green: 105, blue: 105, hue: 0, saturation: 0, luminance: 41},\n {name: 'dimgrey', hex: '#696969', red: 105, green: 105, blue: 105, hue: 0, saturation: 0, luminance: 41},\n {name: 'dodgerblue', hex: '#1E90FF', red: 30, green: 144, blue: 255, hue: 210, saturation: 100, luminance: 56},\n {name: 'firebrick', hex: '#B22222', red: 178, green: 34, blue: 34, hue: 0, saturation: 68, luminance: 42},\n {name: 'floralwhite', hex: '#FFFAF0', red: 255, green: 250, blue: 240, hue: 40, saturation: 100, luminance: 97},\n {name: 'forestgreen', hex: '#228B22', red: 34, green: 139, blue: 34, hue: 120, saturation: 61, luminance: 34},\n {name: 'fuchsia', hex: '#FF00FF', red: 255, green: 0, blue: 255, hue: 300, saturation: 100, luminance: 50},\n {name: 'gainsboro', hex: '#DCDCDC', red: 220, green: 220, blue: 220, hue: 0, saturation: 0, luminance: 86},\n {name: 'ghostwhite', hex: '#F8F8FF', red: 248, green: 248, blue: 255, hue: 240, saturation: 100, luminance: 99},\n {name: 'gold', hex: '#FFD700', red: 255, green: 215, blue: 0, hue: 51, saturation: 100, luminance: 50},\n {name: 'goldenrod', hex: '#DAA520', red: 218, green: 165, blue: 32, hue: 43, saturation: 74, luminance: 49},\n {name: 'gray', hex: '#808080', red: 128, green: 128, blue: 128, hue: 0, saturation: 0, luminance: 50},\n {name: 'green', hex: '#008000', red: 0, green: 128, blue: 0, hue: 120, saturation: 100, luminance: 25},\n {name: 'greenyellow', hex: '#ADFF2F', red: 173, green: 255, blue: 47, hue: 84, saturation: 100, luminance: 59},\n {name: 'grey', hex: '#808080', red: 128, green: 128, blue: 128, hue: 0, saturation: 0, luminance: 50},\n {name: 'honeydew', hex: '#F0FFF0', red: 240, green: 255, blue: 240, hue: 120, saturation: 100, luminance: 97},\n {name: 'hotpink', hex: '#FF69B4', red: 255, green: 105, blue: 180, hue: 330, saturation: 100, luminance: 71},\n {name: 'indianred', hex: '#CD5C5C', red: 205, green: 92, blue: 92, hue: 0, saturation: 53, luminance: 58},\n {name: 'indigo', hex: '#4B0082', red: 75, green: 0, blue: 130, hue: 275, saturation: 100, luminance: 25},\n {name: 'ivory', hex: '#FFFFF0', red: 255, green: 255, blue: 240, hue: 60, saturation: 100, luminance: 97},\n {name: 'khaki', hex: '#F0E68C', red: 240, green: 230, blue: 140, hue: 54, saturation: 77, luminance: 75},\n {name: 'lavender', hex: '#E6E6FA', red: 230, green: 230, blue: 250, hue: 240, saturation: 67, luminance: 94},\n {name: 'lavenderblush', hex: '#FFF0F5', red: 255, green: 240, blue: 245, hue: 340, saturation: 100, luminance: 97},\n {name: 'lawngreen', hex: '#7CFC00', red: 124, green: 252, blue: 0, hue: 90, saturation: 100, luminance: 49},\n {name: 'lemonchiffon', hex: '#FFFACD', red: 255, green: 250, blue: 205, hue: 54, saturation: 100, luminance: 90},\n {name: 'lightblue', hex: '#ADD8E6', red: 173, green: 216, blue: 230, hue: 195, saturation: 53, luminance: 79},\n {name: 'lightcoral', hex: '#F08080', red: 240, green: 128, blue: 128, hue: 0, saturation: 79, luminance: 72},\n {name: 'lightcyan', hex: '#E0FFFF', red: 224, green: 255, blue: 255, hue: 180, saturation: 100, luminance: 94},\n {name: 'lightgoldenrodyellow', hex: '#FAFAD2', red: 250, green: 250, blue: 210, hue: 60, saturation: 80, luminance: 90},\n {name: 'lightgray', hex: '#D3D3D3', red: 211, green: 211, blue: 211, hue: 0, saturation: 0, luminance: 83},\n {name: 'lightgreen', hex: '#90EE90', red: 144, green: 238, blue: 144, hue: 120, saturation: 73, luminance: 75},\n {name: 'lightgrey', hex: '#D3D3D3', red: 211, green: 211, blue: 211, hue: 0, saturation: 0, luminance: 83},\n {name: 'lightpink', hex: '#FFB6C1', red: 255, green: 182, blue: 193, hue: 351, saturation: 100, luminance: 86},\n {name: 'lightsalmon', hex: '#FFA07A', red: 255, green: 160, blue: 122, hue: 17, saturation: 100, luminance: 74},\n {name: 'lightseagreen', hex: '#20B2AA', red: 32, green: 178, blue: 170, hue: 177, saturation: 70, luminance: 41},\n {name: 'lightskyblue', hex: '#87CEFA', red: 135, green: 206, blue: 250, hue: 203, saturation: 92, luminance: 75},\n {name: 'lightslategray', hex: '#778899', red: 119, green: 136, blue: 153, hue: 210, saturation: 14, luminance: 53},\n {name: 'lightslategrey', hex: '#778899', red: 119, green: 136, blue: 153, hue: 210, saturation: 14, luminance: 53},\n {name: 'lightsteelblue', hex: '#B0C4DE', red: 176, green: 196, blue: 222, hue: 214, saturation: 41, luminance: 78},\n {name: 'lightyellow', hex: '#FFFFE0', red: 255, green: 255, blue: 224, hue: 60, saturation: 100, luminance: 94},\n {name: 'lime', hex: '#00FF00', red: 0, green: 255, blue: 0, hue: 120, saturation: 100, luminance: 50},\n {name: 'limegreen', hex: '#32CD32', red: 50, green: 205, blue: 50, hue: 120, saturation: 61, luminance: 50},\n {name: 'linen', hex: '#FAF0E6', red: 250, green: 240, blue: 230, hue: 30, saturation: 67, luminance: 94},\n {name: 'magenta', hex: '#FF00FF', red: 255, green: 0, blue: 255, hue: 300, saturation: 100, luminance: 50},\n {name: 'maroon', hex: '#800000', red: 128, green: 0, blue: 0, hue: 0, saturation: 100, luminance: 25},\n {name: 'mediumaquamarine', hex: '#66CDAA', red: 102, green: 205, blue: 170, hue: 160, saturation: 51, luminance: 60},\n {name: 'mediumblue', hex: '#0000CD', red: 0, green: 0, blue: 205, hue: 240, saturation: 100, luminance: 40},\n {name: 'mediumorchid', hex: '#BA55D3', red: 186, green: 85, blue: 211, hue: 288, saturation: 59, luminance: 58},\n {name: 'mediumpurple', hex: '#9370DB', red: 147, green: 112, blue: 219, hue: 260, saturation: 60, luminance: 65},\n {name: 'mediumseagreen', hex: '#3CB371', red: 60, green: 179, blue: 113, hue: 147, saturation: 50, luminance: 47},\n {name: 'mediumslateblue', hex: '#7B68EE', red: 123, green: 104, blue: 238, hue: 249, saturation: 80, luminance: 67},\n {name: 'mediumspringgreen', hex: '#00FA9A', red: 0, green: 250, blue: 154, hue: 157, saturation: 100, luminance: 49},\n {name: 'mediumturquoise', hex: '#48D1CC', red: 72, green: 209, blue: 204, hue: 178, saturation: 60, luminance: 55},\n {name: 'mediumvioletred', hex: '#C71585', red: 199, green: 21, blue: 133, hue: 322, saturation: 81, luminance: 43},\n {name: 'midnightblue', hex: '#191970', red: 25, green: 25, blue: 112, hue: 240, saturation: 64, luminance: 27},\n {name: 'mintcream', hex: '#F5FFFA', red: 245, green: 255, blue: 250, hue: 150, saturation: 100, luminance: 98},\n {name: 'mistyrose', hex: '#FFE4E1', red: 255, green: 228, blue: 225, hue: 6, saturation: 100, luminance: 94},\n {name: 'moccasin', hex: '#FFE4B5', red: 255, green: 228, blue: 181, hue: 38, saturation: 100, luminance: 85},\n {name: 'navajowhite', hex: '#FFDEAD', red: 255, green: 222, blue: 173, hue: 36, saturation: 100, luminance: 84},\n {name: 'navy', hex: '#000080', red: 0, green: 0, blue: 128, hue: 240, saturation: 100, luminance: 25},\n {name: 'oldlace', hex: '#FDF5E6', red: 253, green: 245, blue: 230, hue: 39, saturation: 85, luminance: 95},\n {name: 'olive', hex: '#808000', red: 128, green: 128, blue: 0, hue: 60, saturation: 100, luminance: 25},\n {name: 'olivedrab', hex: '#6B8E23', red: 107, green: 142, blue: 35, hue: 80, saturation: 60, luminance: 35},\n {name: 'orange', hex: '#FFA500', red: 255, green: 165, blue: 0, hue: 39, saturation: 100, luminance: 50},\n {name: 'orangered', hex: '#FF4500', red: 255, green: 69, blue: 0, hue: 16, saturation: 100, luminance: 50},\n {name: 'orchid', hex: '#DA70D6', red: 218, green: 112, blue: 214, hue: 302, saturation: 59, luminance: 65},\n {name: 'palegoldenrod', hex: '#EEE8AA', red: 238, green: 232, blue: 170, hue: 55, saturation: 67, luminance: 80},\n {name: 'palegreen', hex: '#98FB98', red: 152, green: 251, blue: 152, hue: 120, saturation: 93, luminance: 79},\n {name: 'paleturquoise', hex: '#AFEEEE', red: 175, green: 238, blue: 238, hue: 180, saturation: 65, luminance: 81},\n {name: 'palevioletred', hex: '#DB7093', red: 219, green: 112, blue: 147, hue: 340, saturation: 60, luminance: 65},\n {name: 'papayawhip', hex: '#FFEFD5', red: 255, green: 239, blue: 213, hue: 37, saturation: 100, luminance: 92},\n {name: 'peachpuff', hex: '#FFDAB9', red: 255, green: 218, blue: 185, hue: 28, saturation: 100, luminance: 86},\n {name: 'peru', hex: '#CD853F', red: 205, green: 133, blue: 63, hue: 30, saturation: 59, luminance: 53},\n {name: 'pink', hex: '#FFC0CB', red: 255, green: 192, blue: 203, hue: 350, saturation: 100, luminance: 88},\n {name: 'plum', hex: '#DDA0DD', red: 221, green: 160, blue: 221, hue: 300, saturation: 47, luminance: 75},\n {name: 'powderblue', hex: '#B0E0E6', red: 176, green: 224, blue: 230, hue: 187, saturation: 52, luminance: 80},\n {name: 'purple', hex: '#800080', red: 128, green: 0, blue: 128, hue: 300, saturation: 100, luminance: 25},\n {name: 'rebeccapurple', hex: '#663399', red: 102, green: 51, blue: 153, hue: 270, saturation: 50, luminance: 40},\n {name: 'red', hex: '#FF0000', red: 255, green: 0, blue: 0, hue: 0, saturation: 100, luminance: 50},\n {name: 'rosybrown', hex: '#BC8F8F', red: 188, green: 143, blue: 143, hue: 0, saturation: 25, luminance: 65},\n {name: 'royalblue', hex: '#4169E1', red: 65, green: 105, blue: 225, hue: 225, saturation: 73, luminance: 57},\n {name: 'saddlebrown', hex: '#8B4513', red: 139, green: 69, blue: 19, hue: 25, saturation: 76, luminance: 31},\n {name: 'salmon', hex: '#FA8072', red: 250, green: 128, blue: 114, hue: 6, saturation: 93, luminance: 71},\n {name: 'sandybrown', hex: '#F4A460', red: 244, green: 164, blue: 96, hue: 28, saturation: 87, luminance: 67},\n {name: 'seagreen', hex: '#2E8B57', red: 46, green: 139, blue: 87, hue: 146, saturation: 50, luminance: 36},\n {name: 'seashell', hex: '#FFF5EE', red: 255, green: 245, blue: 238, hue: 25, saturation: 100, luminance: 97},\n {name: 'sienna', hex: '#A0522D', red: 160, green: 82, blue: 45, hue: 19, saturation: 56, luminance: 40},\n {name: 'silver', hex: '#C0C0C0', red: 192, green: 192, blue: 192, hue: 0, saturation: 0, luminance: 75},\n {name: 'skyblue', hex: '#87CEEB', red: 135, green: 206, blue: 235, hue: 197, saturation: 71, luminance: 73},\n {name: 'slateblue', hex: '#6A5ACD', red: 106, green: 90, blue: 205, hue: 248, saturation: 53, luminance: 58},\n {name: 'slategray', hex: '#708090', red: 112, green: 128, blue: 144, hue: 210, saturation: 13, luminance: 50},\n {name: 'slategrey', hex: '#708090', red: 112, green: 128, blue: 144, hue: 210, saturation: 13, luminance: 50},\n {name: 'snow', hex: '#FFFAFA', red: 255, green: 250, blue: 250, hue: 0, saturation: 100, luminance: 99},\n {name: 'springgreen', hex: '#00FF7F', red: 0, green: 255, blue: 127, hue: 150, saturation: 100, luminance: 50},\n {name: 'steelblue', hex: '#4682B4', red: 70, green: 130, blue: 180, hue: 207, saturation: 44, luminance: 49},\n {name: 'tan', hex: '#D2B48C', red: 210, green: 180, blue: 140, hue: 34, saturation: 44, luminance: 69},\n {name: 'teal', hex: '#008080', red: 0, green: 128, blue: 128, hue: 180, saturation: 100, luminance: 25},\n {name: 'thistle', hex: '#D8BFD8', red: 216, green: 191, blue: 216, hue: 300, saturation: 24, luminance: 80},\n {name: 'tomato', hex: '#FF6347', red: 255, green: 99, blue: 71, hue: 9, saturation: 100, luminance: 64},\n {name: 'turquoise', hex: '#40E0D0', red: 64, green: 224, blue: 208, hue: 174, saturation: 72, luminance: 56},\n {name: 'violet', hex: '#EE82EE', red: 238, green: 130, blue: 238, hue: 300, saturation: 76, luminance: 72},\n {name: 'wheat', hex: '#F5DEB3', red: 245, green: 222, blue: 179, hue: 39, saturation: 77, luminance: 83},\n {name: 'white', hex: '#FFFFFF', red: 255, green: 255, blue: 255, hue: 0, saturation: 0, luminance: 100},\n {name: 'whitesmoke', hex: '#F5F5F5', red: 245, green: 245, blue: 245, hue: 0, saturation: 0, luminance: 96},\n {name: 'yellow', hex: '#FFFF00', red: 255, green: 255, blue: 0, hue: 60, saturation: 100, luminance: 50},\n {name: 'yellowgreen', hex: '#9ACD32', red: 154, green: 205, blue: 50, hue: 80, saturation: 61, luminance: 5}\n];\n","import {isEqual} from 'lodash-es';\nimport {shade} from '../data/shade';\nimport {ColorHSLRepresentation} from '../interfaces/color-hsl-representation';\nimport {ColorHSVRepresentation} from '../interfaces/color-hsv-representation';\nimport {ColorRGBRepresentation} from '../interfaces/color-rgb-representation';\nimport {ColorRGBARepresentation} from './../interfaces/color-rgba-representation';\n\nexport function convertHSLToRGB(hslRepresentation: ColorHSLRepresentation): ColorRGBRepresentation {\n let red: number;\n let green: number;\n let blue: number;\n\n const hue: number = hslRepresentation.hue / 360;\n const saturation: number = hslRepresentation.saturation / 100;\n const luminance: number = hslRepresentation.luminance / 100;\n\n if (isEqual(saturation, 0)) {\n red = green = blue = luminance;\n } else {\n const temporaryValue1: number = luminance < 0.5 ? luminance * (1 + saturation) : luminance + saturation - luminance * saturation;\n const temporaryValue2: number = 2 * luminance - temporaryValue1;\n\n red = hslHueToRGB(temporaryValue1, temporaryValue2, hue + 1 / 3);\n green = hslHueToRGB(temporaryValue1, temporaryValue2, hue);\n blue = hslHueToRGB(temporaryValue1, temporaryValue2, hue - 1 / 3);\n }\n\n return {red: red * 255, green: green * 255, blue: blue * 255};\n}\n\nexport function convertHSVToRGB(hsvRepresentation: ColorHSVRepresentation): ColorRGBRepresentation {\n let red: number;\n let green: number;\n let blue: number;\n\n const hue: number = hsvRepresentation.hue / 360;\n const saturation: number = hsvRepresentation.saturation / 100;\n const value: number = hsvRepresentation.value / 100;\n\n const temporaryValue1: number = Math.floor(hue * 6);\n const temporaryValue2: number = hue * 6 - temporaryValue1;\n const possibleValue1: number = value * (1 - saturation);\n const possibleValue2: number = value * (1 - temporaryValue2 * saturation);\n const possibleValue3: number = value * (1 - (1 - temporaryValue2) * saturation);\n\n switch (temporaryValue1 % 6) {\n case 0:\n red = value;\n green = possibleValue3;\n blue = possibleValue1;\n break;\n case 1:\n red = possibleValue2;\n green = value;\n blue = possibleValue1;\n break;\n case 2:\n red = possibleValue1;\n green = value;\n blue = possibleValue3;\n break;\n case 3:\n red = possibleValue1;\n green = possibleValue2;\n blue = value;\n break;\n case 4:\n red = possibleValue3;\n green = possibleValue1;\n blue = value;\n break;\n case 5:\n red = value;\n green = possibleValue1;\n blue = possibleValue2;\n break;\n }\n\n return {red: red * 255, green: green * 255, blue: blue * 255};\n}\n\nexport function convertRGBToHexadecimalColorCode(rgbRepresentation: ColorRGBRepresentation): string {\n const hexadecimalRed: string = decimalToHexadecimal(Math.round(rgbRepresentation.red));\n const hexadecimalGreen: string = decimalToHexadecimal(Math.round(rgbRepresentation.green));\n const hexadecimalBlue: string = decimalToHexadecimal(Math.round(rgbRepresentation.blue));\n return `#${hexadecimalRed}${hexadecimalGreen}${hexadecimalBlue}`;\n}\n\nexport function convertRGBAToHexadecimalColorCode(rgbaRepresentation: ColorRGBARepresentation): string {\n return convertRGBToHexadecimalColorCode(rgbaRepresentation) + `${decimalToHexadecimal(rgbaRepresentation.alpha)}`;\n}\n\nexport function convertRGBToHSL(rgbRepresentation: ColorRGBRepresentation): ColorHSLRepresentation {\n const red: number = rgbRepresentation.red / 255;\n const green: number = rgbRepresentation.green / 255;\n const blue: number = rgbRepresentation.blue / 255;\n\n const max: number = Math.max(red, green, blue);\n const min: number = Math.min(red, green, blue);\n const maxMinDifference: number = max - min;\n const luminance: number = (max + min) / 2;\n let saturation: number;\n\n if (isEqual(max, min)) {\n saturation = 0;\n } else if (luminance > 0.5) {\n saturation = maxMinDifference / (2 - max - min);\n } else {\n saturation = maxMinDifference / (max + min);\n }\n\n return {hue: convertRGBToHue(red, green, blue) * 360, saturation: saturation * 100, luminance: luminance * 100};\n}\n\nexport function convertRGBToHSV(rgbRepresentation: ColorRGBRepresentation): ColorHSVRepresentation {\n const red: number = rgbRepresentation.red / 255;\n const green: number = rgbRepresentation.green / 255;\n const blue: number = rgbRepresentation.blue / 255;\n\n const max: number = Math.max(red, green, blue);\n const min: number = Math.min(red, green, blue);\n const maxMinDifference: number = max - min;\n let saturation: number;\n if (isEqual(max, 0)) {\n saturation = 0;\n } else {\n saturation = maxMinDifference / max;\n }\n\n return {hue: convertRGBToHue(red, green, blue) * 360, saturation: saturation * 100, value: max * 100};\n}\n\nexport function convertRGBToRGBA(rgbRepresentation: ColorRGBRepresentation, alpha: number): ColorRGBARepresentation {\n return {red: rgbRepresentation.red, blue: rgbRepresentation.blue, green: rgbRepresentation.green, alpha: Math.round(alpha * 255)};\n}\n\nexport function convertHexadecimalColorCodeToRGB(hex: string): ColorRGBRepresentation {\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n return {\n red: parseInt(result[1], 16),\n green: parseInt(result[2], 16),\n blue: parseInt(result[3], 16)\n };\n}\n\nexport function addAlphaToHexRGB(rgbHex: string, alpha: number): string {\n const rgb = convertHexadecimalColorCodeToRGB(rgbHex);\n const rgba = convertRGBToRGBA(rgb, alpha);\n return convertRGBAToHexadecimalColorCode(rgba);\n}\n\nexport function convertRGBToShadeName(red: number, green: number, blue: number): string {\n const colorRGBRepresentation: ColorRGBRepresentation = {red, green, blue};\n const hsl = convertRGBToHSL(colorRGBRepresentation);\n const hex = convertRGBToHexadecimalColorCode(colorRGBRepresentation);\n\n let rgbDistance = 0;\n let hslDistance = 0;\n let totalDistance = 0;\n let smallIndex = -1;\n let smallestDistance = -1;\n\n for (let i = 0; i < shade.length; i++) {\n if (hex === shade[i].hex) {\n return shade[i].name;\n }\n\n rgbDistance = Math.pow(colorRGBRepresentation.red - shade[i].red, 2) + Math.pow(colorRGBRepresentation.green - shade[i].green, 2) + Math.pow(colorRGBRepresentation.blue - shade[i].blue, 2);\n hslDistance = Math.pow(hsl.hue - shade[i].hue, 2) + Math.pow(hsl.saturation - shade[i].saturation, 2) + Math.pow(hsl.luminance - shade[i].luminance, 2);\n totalDistance = rgbDistance + hslDistance * 2;\n if (smallestDistance < 0 || smallestDistance > totalDistance) {\n smallestDistance = totalDistance;\n smallIndex = i;\n }\n }\n\n return shade[smallIndex].name;\n}\n\nfunction decimalToHexadecimal(decimal: number): string {\n return decimal.toString(16).padStart(2, '0');\n}\n\nfunction hslHueToRGB(temporaryValue1: number, temporaryValue2: number, hueWithOffset: number): number {\n if (hueWithOffset < 0) {\n hueWithOffset += 1;\n }\n if (hueWithOffset > 1) {\n hueWithOffset -= 1;\n }\n let result: number;\n if (hueWithOffset < 1 / 6) {\n result = temporaryValue2 + (temporaryValue1 - temporaryValue2) * 6 * hueWithOffset;\n } else if (hueWithOffset < 1 / 2) {\n result = temporaryValue1;\n } else if (hueWithOffset < 2 / 3) {\n result = temporaryValue2 + (temporaryValue1 - temporaryValue2) * (2 / 3 - hueWithOffset) * 6;\n } else {\n result = temporaryValue2;\n }\n return result;\n}\n\nfunction convertRGBToHue(red: number, green: number, blue: number): number {\n const max: number = Math.max(red, green, blue);\n const min: number = Math.min(red, green, blue);\n let hue: number;\n if (isEqual(max, min)) {\n hue = 0;\n } else {\n const maxMinDifference: number = max - min;\n switch (max) {\n case red:\n hue = (green - blue) / maxMinDifference + (green < blue ? 6 : 0);\n break;\n case green:\n hue = (blue - red) / maxMinDifference + 2;\n break;\n case blue:\n hue = (red - green) / maxMinDifference + 4;\n break;\n }\n hue /= 6;\n }\n return hue;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {convertToCommercialUnitCentimeter} from './convert-to-commercial-unit-centimeter';\nimport {convertToCommercialUnitDecimeter} from './convert-to-commercial-unit-decimeter';\nimport {convertToCommercialUnitMeter} from './convert-to-commercial-unit-meter';\nimport {convertToCommercialUnitMillimeter} from './convert-to-commercial-unit-millimeter';\nimport {convertToCommercialUnitSquareCentimeter} from './convert-to-commercial-unit-square-centimeter';\nimport {convertToCommercialUnitSquareMeter} from './convert-to-commercial-unit-square-meter';\nimport {convertToCommercialUnitSquareMillimeter} from './convert-to-commercial-unit-square-millimeter';\nimport {UnitConversionParameters} from './unit-conversion-parameters';\n\nexport function convertCommercialUnit(unitConversionParameters: UnitConversionParameters): number {\n let result: number;\n\n if (unitConversionParameters.from.value === undefined) {\n return undefined;\n } else if (unitConversionParameters.from.value === null) {\n return null;\n }\n\n switch (unitConversionParameters.to) {\n case Unit.MILLIMETER:\n result = convertToCommercialUnitMillimeter(unitConversionParameters.from);\n break;\n case Unit.CENTIMETER:\n result = convertToCommercialUnitCentimeter(unitConversionParameters.from);\n break;\n case Unit.DECIMETER:\n result = convertToCommercialUnitDecimeter(unitConversionParameters.from);\n break;\n case Unit.METER:\n result = convertToCommercialUnitMeter(unitConversionParameters.from);\n break;\n case Unit.SQUARE_MILLIMETER:\n result = convertToCommercialUnitSquareMillimeter(unitConversionParameters.from);\n break;\n case Unit.SQUARE_CENTIMETER:\n result = convertToCommercialUnitSquareCentimeter(unitConversionParameters.from);\n break;\n case Unit.SQUARE_METER:\n result = convertToCommercialUnitSquareMeter(unitConversionParameters.from);\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitConversionParameters.from.unit} to ${unitConversionParameters.to}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitSquareMillimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.SQUARE_MILLIMETER:\n result = unitValue.value;\n break;\n case Unit.SQUARE_CENTIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.SQUARE_METER:\n result = unitValue.value * 1000000;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.METER}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitSquareCentimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.SQUARE_MILLIMETER:\n result = unitValue.value / 100;\n break;\n case Unit.SQUARE_CENTIMETER:\n result = unitValue.value;\n break;\n case Unit.SQUARE_METER:\n result = unitValue.value * 10000;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.METER}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitSquareMeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.SQUARE_MILLIMETER:\n result = unitValue.value / 1000000;\n break;\n case Unit.SQUARE_CENTIMETER:\n result = unitValue.value / 10000;\n break;\n case Unit.SQUARE_METER:\n result = unitValue.value;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.METER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {convertToDensityUnitDentsPerCentimeter} from './convert-to-density-unit-dents-per-centimeter';\nimport {convertToDensityUnitDentsPerMeter} from './convert-to-density-unit-dents-per-meter';\nimport {convertToDensityUnitDentsPerMillimeter} from './convert-to-density-unit-dents-per-millimeter';\nimport {convertToDensityUnitPicksPerCentimeter} from './convert-to-density-unit-picks-per-centimeter';\nimport {convertToDensityUnitPicksPerDecimeter} from './convert-to-density-unit-picks-per-decimeter';\nimport {convertToDensityUnitPicksPerMeter} from './convert-to-density-unit-picks-per-meter';\nimport {convertToDensityUnitPicksPerMillimeter} from './convert-to-density-unit-picks-per-millimeter';\nimport {convertToDensityUnitWeftsPerCentimeter} from './convert-to-density-unit-wefts-per-centimeter';\nimport {convertToDensityUnitWeftsPerDecimeter} from './convert-to-density-unit-wefts-per-decimeter';\nimport {convertToDensityUnitWeftsPerMeter} from './convert-to-density-unit-wefts-per-meter';\nimport {convertToDensityUnitWeftsPerMillimeter} from './convert-to-density-unit-wefts-per-millimeter';\nimport {UnitConversionParameters} from './unit-conversion-parameters';\n\nexport function convertDensityUnit(unitConversionParameters: UnitConversionParameters): number {\n let result: number;\n\n if (unitConversionParameters.from.value === undefined) {\n return undefined;\n } else if (unitConversionParameters.from.value === null) {\n return null;\n }\n\n switch (unitConversionParameters.to) {\n case Unit.DENTS_PER_METER:\n result = convertToDensityUnitDentsPerMeter(unitConversionParameters.from);\n break;\n case Unit.DENTS_PER_CENTIMETER:\n result = convertToDensityUnitDentsPerCentimeter(unitConversionParameters.from);\n break;\n case Unit.DENTS_PER_MILLIMETER:\n result = convertToDensityUnitDentsPerMillimeter(unitConversionParameters.from);\n break;\n case Unit.PICKS_PER_METER:\n result = convertToDensityUnitPicksPerMeter(unitConversionParameters.from);\n break;\n case Unit.PICKS_PER_DECIMETER:\n result = convertToDensityUnitPicksPerDecimeter(unitConversionParameters.from);\n break;\n case Unit.PICKS_PER_CENTIMETER:\n result = convertToDensityUnitPicksPerCentimeter(unitConversionParameters.from);\n break;\n case Unit.PICKS_PER_MILLIMETER:\n result = convertToDensityUnitPicksPerMillimeter(unitConversionParameters.from);\n break;\n case Unit.WEFTS_PER_METER:\n result = convertToDensityUnitWeftsPerMeter(unitConversionParameters.from);\n break;\n case Unit.WEFTS_PER_DECIMETER:\n result = convertToDensityUnitWeftsPerDecimeter(unitConversionParameters.from);\n break;\n case Unit.WEFTS_PER_CENTIMETER:\n result = convertToDensityUnitWeftsPerCentimeter(unitConversionParameters.from);\n break;\n case Unit.WEFTS_PER_MILLIMETER:\n result = convertToDensityUnitWeftsPerMillimeter(unitConversionParameters.from);\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitConversionParameters.from.unit} to ${unitConversionParameters.to}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitDentsPerMeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.DENTS_PER_MILLIMETER:\n result = unitValue.value * 1000;\n break;\n case Unit.DENTS_PER_CENTIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.DENTS_PER_METER:\n result = unitValue.value;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DENTS_PER_METER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitDentsPerCentimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.DENTS_PER_MILLIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.DENTS_PER_CENTIMETER:\n result = unitValue.value;\n break;\n case Unit.DENTS_PER_METER:\n result = unitValue.value / 100;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DENTS_PER_CENTIMETER}`);\n }\n\n return result;\n}\n","import {isEqual, isFinite, max, round} from 'lodash-es';\nimport {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {convertToTextileUnitDecitex} from './convert-to-textile-unit-decitex';\nimport {convertToTextileUnitDenier} from './convert-to-textile-unit-denier';\nimport {convertToTextileUnitEnglishCottonCount} from './convert-to-textile-unit-english-cotton-count';\nimport {convertToTextileUnitLibraPounds} from './convert-to-textile-unit-libra-pounds';\nimport {convertToTextileUnitLinencount} from './convert-to-textile-unit-linencount';\nimport {convertToTextileUnitNumberMetric} from './convert-to-textile-unit-number-metric';\nimport {convertToTextileUnitTex} from './convert-to-textile-unit-tex';\nimport {UnitConversionParameters} from './unit-conversion-parameters';\n\nexport const minValueForTexUnit = 1;\nexport const minValueForOtherTextileUnits = 0.01;\n\nexport function convertTextileUnit(unitConversionParameters: UnitConversionParameters): number {\n let result: number;\n\n if (unitConversionParameters.from.value === undefined) {\n return undefined;\n } else if (unitConversionParameters.from.value === null) {\n return null;\n }\n\n const isToUnitTex = isEqual(unitConversionParameters.to, Unit.TEX);\n const minValue = isToUnitTex ? minValueForTexUnit : minValueForOtherTextileUnits;\n\n switch (unitConversionParameters.to) {\n case Unit.NUMBER_METRIC:\n result = convertToTextileUnitNumberMetric(unitConversionParameters.from);\n break;\n case Unit.DENIER:\n result = convertToTextileUnitDenier(unitConversionParameters.from);\n break;\n case Unit.DECITEX:\n result = convertToTextileUnitDecitex(unitConversionParameters.from);\n break;\n case Unit.TEX:\n result = convertToTextileUnitTex(unitConversionParameters.from);\n break;\n case Unit.LINENCOUNT:\n result = convertToTextileUnitLinencount(unitConversionParameters.from);\n break;\n case Unit.LIBRA_POUNDS:\n result = convertToTextileUnitLibraPounds(unitConversionParameters.from);\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = convertToTextileUnitEnglishCottonCount(unitConversionParameters.from);\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitConversionParameters.from.unit} to ${unitConversionParameters.to}`);\n }\n\n if (isFinite(result)) {\n result = max([round(result, isToUnitTex ? 0 : 2), minValue]);\n } else {\n result = minValue;\n }\n\n return result;\n}\n","import {toNumber} from 'lodash-es';\nimport {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitCentimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.MILLIMETER:\n result = toNumber(unitValue.value) / 10;\n break;\n case Unit.CENTIMETER:\n result = unitValue.value;\n break;\n case Unit.DECIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.METER:\n result = unitValue.value * 100;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.CENTIMETER}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitDecimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.MILLIMETER:\n result = unitValue.value * 0.01;\n break;\n case Unit.CENTIMETER:\n result = unitValue.value * 0.1;\n break;\n case Unit.DECIMETER:\n result = unitValue.value;\n break;\n case Unit.METER:\n result = unitValue.value * 10;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DECIMETER}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitMeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.MILLIMETER:\n result = unitValue.value / 1000;\n break;\n case Unit.CENTIMETER:\n result = unitValue.value / 100;\n break;\n case Unit.DECIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.METER:\n result = unitValue.value;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.METER}`);\n }\n\n return result;\n}\n","import {CommercialUnitConversionError} from '../error/commercial-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToCommercialUnitMillimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.MILLIMETER:\n result = unitValue.value;\n break;\n case Unit.CENTIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.DECIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.METER:\n result = unitValue.value * 1000;\n break;\n default:\n throw new CommercialUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.MILLIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitDentsPerMillimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.DENTS_PER_MILLIMETER:\n result = unitValue.value;\n break;\n case Unit.DENTS_PER_CENTIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.DENTS_PER_METER:\n result = unitValue.value / 1000;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DENTS_PER_MILLIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitPicksPerCentimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.PICKS_PER_MILLIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.PICKS_PER_CENTIMETER:\n result = unitValue.value;\n break;\n case Unit.PICKS_PER_DECIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.PICKS_PER_METER:\n result = unitValue.value / 100;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.PICKS_PER_CENTIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitPicksPerDecimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.PICKS_PER_MILLIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.PICKS_PER_CENTIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.PICKS_PER_DECIMETER:\n result = unitValue.value;\n break;\n case Unit.PICKS_PER_METER:\n result = unitValue.value / 10;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.PICKS_PER_DECIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitPicksPerMeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.PICKS_PER_MILLIMETER:\n result = unitValue.value * 1000;\n break;\n case Unit.PICKS_PER_CENTIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.PICKS_PER_DECIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.PICKS_PER_METER:\n result = unitValue.value;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.PICKS_PER_METER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitPicksPerMillimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.PICKS_PER_MILLIMETER:\n result = unitValue.value;\n break;\n case Unit.PICKS_PER_CENTIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.PICKS_PER_DECIMETER:\n result = unitValue.value / 100;\n break;\n case Unit.PICKS_PER_METER:\n result = unitValue.value / 1000;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.PICKS_PER_MILLIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitWeftsPerCentimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.WEFTS_PER_MILLIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.WEFTS_PER_CENTIMETER:\n result = unitValue.value;\n break;\n case Unit.WEFTS_PER_DECIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.WEFTS_PER_METER:\n result = unitValue.value / 100;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.WEFTS_PER_CENTIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitWeftsPerDecimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.WEFTS_PER_MILLIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.WEFTS_PER_CENTIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.WEFTS_PER_DECIMETER:\n result = unitValue.value;\n break;\n case Unit.WEFTS_PER_METER:\n result = unitValue.value / 10;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.WEFTS_PER_DECIMETER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitWeftsPerMeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.WEFTS_PER_MILLIMETER:\n result = unitValue.value * 1000;\n break;\n case Unit.WEFTS_PER_CENTIMETER:\n result = unitValue.value * 100;\n break;\n case Unit.WEFTS_PER_DECIMETER:\n result = unitValue.value * 10;\n break;\n case Unit.WEFTS_PER_METER:\n result = unitValue.value;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.WEFTS_PER_METER}`);\n }\n\n return result;\n}\n","import {DensityUnitConversionError} from '../error/density-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToDensityUnitWeftsPerMillimeter(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.WEFTS_PER_MILLIMETER:\n result = unitValue.value;\n break;\n case Unit.WEFTS_PER_CENTIMETER:\n result = unitValue.value / 10;\n break;\n case Unit.WEFTS_PER_DECIMETER:\n result = unitValue.value / 100;\n break;\n case Unit.WEFTS_PER_METER:\n result = unitValue.value / 1000;\n break;\n default:\n throw new DensityUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.WEFTS_PER_MILLIMETER}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitDecitex(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = 10000 / unitValue.value;\n break;\n case Unit.DENIER:\n result = unitValue.value / 0.9;\n break;\n case Unit.TEX:\n result = 10 * unitValue.value;\n break;\n case Unit.LINENCOUNT:\n result = 1 / (0.06 * unitValue.value);\n break;\n case Unit.LIBRA_POUNDS:\n result = unitValue.value / 2.88;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = 5910 / unitValue.value;\n break;\n case Unit.DECITEX:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DECITEX}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitDenier(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = 9000 / unitValue.value;\n break;\n case Unit.TEX:\n result = unitValue.value * 9;\n break;\n case Unit.DECITEX:\n result = unitValue.value * 0.9;\n break;\n case Unit.LINENCOUNT:\n result = 15 / unitValue.value;\n break;\n case Unit.LIBRA_POUNDS:\n result = unitValue.value / 3.2;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = 5319 / unitValue.value;\n break;\n case Unit.DENIER:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.DENIER}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitEnglishCottonCount(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = unitValue.value * 0.591;\n break;\n case Unit.DENIER:\n result = 5319 / unitValue.value;\n break;\n case Unit.TEX:\n result = 591 / unitValue.value;\n break;\n case Unit.DECITEX:\n result = 5910 / unitValue.value;\n break;\n case Unit.LINENCOUNT:\n result = unitValue.value * 354.6;\n break;\n case Unit.LIBRA_POUNDS:\n result = 17020.8 / unitValue.value;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.ENGLISH_COTTON_COUNT}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitLibraPounds(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = 28.8 / unitValue.value;\n break;\n case Unit.DENIER:\n result = 3.2 * unitValue.value;\n break;\n case Unit.TEX:\n result = 28.8 * unitValue.value;\n break;\n case Unit.DECITEX:\n result = 2.88 * unitValue.value;\n break;\n case Unit.LINENCOUNT:\n result = 48 / unitValue.value;\n break;\n case Unit.LIBRA_POUNDS:\n result = unitValue.value;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = 17020.8 / unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.LIBRA_POUNDS}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitLinencount(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = unitValue.value / 600;\n break;\n case Unit.DENIER:\n result = 15 / unitValue.value;\n break;\n case Unit.TEX:\n result = 1 / (0.6 * unitValue.value);\n break;\n case Unit.DECITEX:\n result = 1 / (0.06 * unitValue.value);\n break;\n case Unit.LINENCOUNT:\n result = unitValue.value;\n break;\n case Unit.LIBRA_POUNDS:\n result = 48 / unitValue.value;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = unitValue.value / 354.6;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.LINENCOUNT}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitNumberMetric(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.DENIER:\n result = 9000 / unitValue.value;\n break;\n case Unit.TEX:\n result = 1000 / unitValue.value;\n break;\n case Unit.DECITEX:\n result = 10000 / unitValue.value;\n break;\n case Unit.LINENCOUNT:\n result = unitValue.value * 600;\n break;\n case Unit.LIBRA_POUNDS:\n result = 28.8 / unitValue.value;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = unitValue.value / 0.591;\n break;\n case Unit.NUMBER_METRIC:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.NUMBER_METRIC}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertToTextileUnitTex(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.NUMBER_METRIC:\n result = 1000 / unitValue.value;\n break;\n case Unit.DENIER:\n result = unitValue.value / 9;\n break;\n case Unit.DECITEX:\n result = unitValue.value / 10;\n break;\n case Unit.LINENCOUNT:\n result = 1 / (0.6 * unitValue.value);\n break;\n case Unit.LIBRA_POUNDS:\n result = unitValue.value / 28.8;\n break;\n case Unit.ENGLISH_COTTON_COUNT:\n result = 591 / unitValue.value;\n break;\n case Unit.TEX:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.TEX}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {convertCommercialUnit} from './convert-commercial-unit';\nimport {convertDensityUnit} from './convert-density-unit';\nimport {convertFileSizeUnit} from './convert-file-size-unit';\nimport {convertTextileUnit} from './convert-textile-unit';\nimport {UnitConversionParameters} from './unit-conversion-parameters';\n\nexport function convertUnit(unitConversionParameters: UnitConversionParameters): number {\n let result: number;\n\n if (Unit.isConvertibleToCommercialUnit(unitConversionParameters.from.unit)) {\n result = convertCommercialUnit(unitConversionParameters);\n } else if (Unit.isConvertibleToDensityUnit(unitConversionParameters.from.unit)) {\n result = convertDensityUnit(unitConversionParameters);\n } else if (Unit.isConvertibleToTextileUnit(unitConversionParameters.from.unit)) {\n result = convertTextileUnit(unitConversionParameters);\n } else if (Unit.isConvertibleToFileSizeUnit(unitConversionParameters.from.unit)) {\n result = convertFileSizeUnit(unitConversionParameters);\n } else {\n throw new TextileUnitConversionError(`No conversion found from ${unitConversionParameters.from.unit} to ${unitConversionParameters.to}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {convertFileSizeUnitByte} from './convert-to-file-size-unit-byte';\nimport {convertFileSizeUnitKilobyte} from './convert-to-file-size-unit-kilobyte';\nimport {UnitConversionParameters} from './unit-conversion-parameters';\n\nexport function convertFileSizeUnit(unitConversionParameters: UnitConversionParameters): number {\n let result: number;\n\n if (unitConversionParameters.from.value === undefined) {\n return undefined;\n } else if (unitConversionParameters.from.value === null) {\n return null;\n }\n\n switch (unitConversionParameters.to) {\n case Unit.KILOBYTE:\n result = convertFileSizeUnitKilobyte(unitConversionParameters.from);\n break;\n case Unit.BYTE:\n result = convertFileSizeUnitByte(unitConversionParameters.from);\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitConversionParameters.from.unit} to ${unitConversionParameters.to}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertFileSizeUnitKilobyte(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.KILOBYTE:\n result = unitValue.value;\n break;\n case Unit.BYTE:\n result = unitValue.value / 1000;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.KILOBYTE}`);\n }\n\n return result;\n}\n","import {TextileUnitConversionError} from '../error/textile-unit-conversion-error';\nimport {Unit} from '../unit.enum';\nimport {UnitValue} from './unit-value';\n\nexport function convertFileSizeUnitByte(unitValue: UnitValue): number {\n let result: number;\n\n switch (unitValue.unit) {\n case Unit.KILOBYTE:\n result = unitValue.value * 1000;\n break;\n case Unit.BYTE:\n result = unitValue.value;\n break;\n default:\n throw new TextileUnitConversionError(`No conversion found from ${unitValue.unit} to ${Unit.BYTE}`);\n }\n\n return result;\n}\n","import {convertRGBToHexadecimalColorCode, convertRGBToShadeName} from '../converters/convert-color-representation';\nimport {ColorRGBRepresentation} from '../interfaces/color-rgb-representation';\n\nexport class Color {\n private _id: number;\n private _name: string;\n private _rgb: ColorRGBRepresentation;\n private _used: boolean;\n private _shade: string;\n private _description: string;\n\n public constructor(id: number, name: string, rgb: ColorRGBRepresentation, used: boolean, shade?: string, description: string = null) {\n this._id = id;\n this._name = name;\n this._rgb = rgb;\n this._used = used;\n this._shade = shade;\n this._description = description;\n }\n\n public get id(): number {\n return this._id;\n }\n\n public set id(id: number) {\n this._id = id;\n }\n\n public get name(): string {\n return this._name;\n }\n\n public set name(name: string) {\n this._name = name;\n }\n\n public get rgb(): ColorRGBRepresentation {\n return this._rgb;\n }\n\n public set rgb(rgbRepresentation: ColorRGBRepresentation) {\n this._rgb = {\n red: Color.inRangeRGBComponent(rgbRepresentation.red),\n green: Color.inRangeRGBComponent(rgbRepresentation.green),\n blue: Color.inRangeRGBComponent(rgbRepresentation.blue)\n };\n }\n\n public get hexadecimalColorCode(): string {\n return convertRGBToHexadecimalColorCode(this._rgb);\n }\n\n public get used(): boolean {\n return this._used;\n }\n\n public set used(used: boolean) {\n this._used = used;\n }\n\n public get shade(): string {\n return this._shade;\n }\n\n public set shade(shade: string) {\n this._shade = shade;\n }\n\n public get description(): string {\n return this._description;\n }\n\n public set description(description: string) {\n this._description = description;\n }\n\n public static fromJSON(colorJSON: any): Color {\n return new Color(\n colorJSON.id,\n colorJSON.name,\n {\n red: colorJSON.rgb.red,\n green: colorJSON.rgb.green,\n blue: colorJSON.rgb.blue\n },\n colorJSON.used,\n convertRGBToShadeName(colorJSON.rgb.red, colorJSON.rgb.green, colorJSON.rgb.blue),\n colorJSON.description\n );\n }\n\n public static createEmptyColor(): Color {\n return new Color(\n null,\n null,\n {\n red: 0,\n green: 0,\n blue: 0\n },\n null,\n null,\n null\n );\n }\n\n public static inRangeRGBComponent(decimal: number): number {\n return Math.max(0, Math.min(255, Math.round(decimal)));\n }\n\n public toJSON(): JSON {\n return {\n id: this._id,\n name: this._name,\n rgb: {\n red: this._rgb.red,\n green: this._rgb.green,\n blue: this._rgb.blue\n },\n description: this._description\n } as any as JSON;\n }\n\n public getRgbAsCommaSeparatedValue(): string {\n return Object.values(this._rgb).join(', ');\n }\n\n public canDuplicate(): boolean {\n return true;\n }\n\n public getReasonForPreventingDuplicate(): string {\n return '';\n }\n}\n","import {AssertionUtils} from '../utils/assertion-utils';\n\nexport enum MessageType {\n ERROR = 'error',\n WARNING = 'warning',\n INFO = 'info',\n CONFIRMATION = 'confirmation'\n}\n\nexport namespace MessageType {\n export function getMessageTypeByLabel(label: string): MessageType {\n return AssertionUtils.isNullOrUndefined(label) || AssertionUtils.isNullOrUndefined(MessageType[`${label}`]) ? null : MessageType[`${label}`];\n }\n}\n","export enum DateTimeFormat {\n TIME_SIMPLE = 'TIME_SIMPLE',\n TIME_WITH_SECONDS = 'TIME_WITH_SECONDS',\n DATETIME_SHORT = 'DATETIME_SHORT',\n DATE_SHORT = 'DATE_SHORT',\n DATETIME_SHORT_WITH_SECONDS = 'DATETIME_SHORT_WITH_SECONDS',\n DATE_HUGE = 'DATE_HUGE',\n DAY_WEEKDAY = 'DAY_WEEKDAY',\n DATETIME_MED_WITH_WEEKDAY = 'DATETIME_MED_WITH_WEEKDAY',\n MONTH_YEAR = 'MONTH_YEAR',\n DAY_MONTH_SHORT_TIME_WITH_SECONDS = 'DAY_MONTH_SHORT_TIME_WITH_SECONDS'\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const ENVIRONMENT = new InjectionToken('environment');\n\nexport interface EnvironmentVariables {\n production: boolean;\n isDebugMode: boolean;\n helpUrl: string;\n}\n","import {UnitConversionError} from './unit-conversion-error';\n\nexport class CommercialUnitConversionError extends UnitConversionError {}\n","import {UnitConversionError} from './unit-conversion-error';\n\nexport class DensityUnitConversionError extends UnitConversionError {}\n","import {UnitConversionError} from './unit-conversion-error';\n\nexport class TextileUnitConversionError extends UnitConversionError {}\n","/**\n * Workaround to be able to catch the instance of the error\n * https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\n */\n\nexport class BaseError extends Error {\n public constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import {BaseError} from './base-error';\n\nexport class UnitConversionError extends BaseError {}\n","export enum MimeType {\n TEXT = 'text',\n PLAIN_TEXT = 'text/plain',\n PDF = 'application/pdf',\n XML = 'application/xml',\n MP4 = 'video/mp4',\n ZIP = 'application/zip',\n BINARY = 'application/binary'\n}\n","import Moment from 'moment';\nimport {extendMoment} from 'moment-range';\nimport 'moment-timezone';\n\nexport const moment = extendMoment(Moment);\n","import {BreakpointObserver, Breakpoints, BreakpointState} from '@angular/cdk/layout';\nimport {Injectable} from '@angular/core';\nimport {Observable, Subject} from 'rxjs';\nimport {startWith} from 'rxjs/operators';\nimport {Device} from './device.enum';\nimport {ResponsivenessViewMode} from './responsiveness-view.mode';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class BreakpointResponsivenessViewModeService implements ResponsivenessViewMode {\n private deviceChangeSubject: Subject;\n private currentDevice: Device;\n\n public constructor(private breakpointObserver: BreakpointObserver) {\n this.deviceChangeSubject = new Subject();\n\n this.observeDefaultBreakpointChanges();\n }\n\n public get isDesktop(): boolean {\n return this.currentDevice === Device.DESKTOP;\n }\n\n public get isPhone(): boolean {\n return this.currentDevice === Device.PHONE;\n }\n\n public get isTablet(): boolean {\n return this.currentDevice === Device.TABLET;\n }\n\n public observeBreakpointChanges(mediaQuery: string | string[]): Observable {\n return this.breakpointObserver.observe(mediaQuery);\n }\n\n public matchesBreakpoint(mediaQuery: string): boolean {\n return this.breakpointObserver.isMatched(mediaQuery);\n }\n\n public observeDeviceChanges(): Observable {\n return this.deviceChangeSubject.asObservable().pipe(startWith(this.currentDevice));\n }\n\n private observeDefaultBreakpointChanges(): void {\n this.getInitialDevice();\n\n this.breakpointObserver.observe(Breakpoints.XSmall).subscribe((breakpointState: BreakpointState) => {\n if (breakpointState.matches) {\n this.currentDevice = Device.PHONE;\n this.deviceChangeSubject.next(this.currentDevice);\n }\n });\n\n this.breakpointObserver.observe(Breakpoints.Tablet).subscribe((breakpointState: BreakpointState) => {\n if (breakpointState.matches) {\n this.currentDevice = Device.TABLET;\n this.deviceChangeSubject.next(this.currentDevice);\n }\n });\n\n this.breakpointObserver.observe(Breakpoints.WebLandscape).subscribe((breakpointState: BreakpointState) => {\n if (breakpointState.matches) {\n this.currentDevice = Device.DESKTOP;\n this.deviceChangeSubject.next(this.currentDevice);\n }\n });\n }\n\n private getInitialDevice(): void {\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall)) {\n this.currentDevice = Device.PHONE;\n } else if (this.breakpointObserver.isMatched(Breakpoints.Tablet)) {\n this.currentDevice = Device.TABLET;\n } else {\n this.currentDevice = Device.DESKTOP;\n }\n }\n}\n","export enum Device {\n PHONE,\n TABLET,\n DESKTOP\n}\n","/* eslint-disable @angular-eslint/directive-selector */\nimport {BreakpointState} from '@angular/cdk/layout';\nimport {Directive, ElementRef, Inject, Input, OnChanges, OnInit, Renderer2, SimpleChanges} from '@angular/core';\nimport {BehaviorSubject, combineLatest, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../utils/assertion-utils';\nimport {RESPONSIVENESS_VIEW_MODE, ResponsivenessViewMode} from './responsiveness-view.mode';\n\nconst mediaQueries: {[key: string]: string} = {\n 'gt-xs': '(min-width: 600px)',\n 'gt-sm': '(min-width: 960px)',\n 'gt-md': '(min-width: 1280px)',\n 'gt-lg': '(min-width: 1920px)',\n 'lt-sm': '(max-width: 599.98px)',\n 'lt-md': '(max-width: 959.97px)',\n 'lt-lg': '(max-width: 1279.98px)',\n 'lt-xl': '(max-width: 1919.98px)'\n};\n\n@Directive({\n selector: '[vdwBp.gt-xs], [vdwBp.gt-sm], [vdwBp.gt-md], [vdwBp.gt-lg], [vdwBp.lt-sm], [vdwBp.lt-md], [vdwBp.lt-lg], [vdwBp.lt-xl]'\n})\nexport class ResponsiveClassDirective extends BaseComponent implements OnInit, OnChanges {\n @Input('vdwBp.gt-xs') public classGtXs: string | {[key: string]: boolean} = '';\n @Input('vdwBp.gt-sm') public classGtSm: string | {[key: string]: boolean} = '';\n @Input('vdwBp.gt-md') public classGtMd: string | {[key: string]: boolean} = '';\n @Input('vdwBp.gt-lg') public classGtLg: string | {[key: string]: boolean} = '';\n @Input('vdwBp.lt-sm') public classLtSm: string | {[key: string]: boolean} = '';\n @Input('vdwBp.lt-md') public classLtMd: string | {[key: string]: boolean} = '';\n @Input('vdwBp.lt-lg') public classLtLg: string | {[key: string]: boolean} = '';\n @Input('vdwBp.lt-xl') public classLtXl: string | {[key: string]: boolean} = '';\n\n private readonly reevaluateSubject = new BehaviorSubject(null);\n private classMap: {[key: string]: string} = {};\n\n public constructor(\n private readonly elementRef: ElementRef,\n private readonly renderer: Renderer2,\n @Inject(RESPONSIVENESS_VIEW_MODE) private readonly responsivenessViewMode: ResponsivenessViewMode\n ) {\n super();\n }\n\n public ngOnChanges(_: SimpleChanges): void {\n this.evaluateClassMap();\n\n this.reevaluateSubject.next(null);\n }\n\n public ngOnInit(): void {\n this.evaluateClassMap();\n\n this.applyResponsiveClass();\n }\n\n private applyResponsiveClass(): void {\n combineLatest([this.responsivenessViewMode.observeBreakpointChanges(Object.values(mediaQueries)), this.reevaluateSubject])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(([breakpointState, _]: [BreakpointState, any]) => {\n this.removeClasses();\n\n Object.keys(mediaQueries)\n .filter((key: string) => breakpointState.breakpoints[mediaQueries[key]] && this.classMap[key])\n .forEach((key: string) => this.applyClass(this.classMap[key]));\n });\n }\n\n private applyClass(className: string): void {\n const classNames = className.split(' ');\n for (const cn of classNames) {\n this.renderer.addClass(this.elementRef.nativeElement, cn);\n }\n }\n\n private removeClasses(): void {\n Object.values(this.classMap).forEach((className: string) => {\n if (className) {\n const classNames = className.split(' ');\n for (const c of classNames) {\n this.renderer.removeClass(this.elementRef.nativeElement, c);\n }\n }\n });\n }\n\n private evaluateClassMap(): void {\n this.classMap = {\n 'gt-xs': ResponsiveClassDirective.createClasses(this.classGtXs),\n 'gt-sm': ResponsiveClassDirective.createClasses(this.classGtSm),\n 'gt-md': ResponsiveClassDirective.createClasses(this.classGtMd),\n 'gt-lg': ResponsiveClassDirective.createClasses(this.classGtLg),\n 'lt-sm': ResponsiveClassDirective.createClasses(this.classLtSm),\n 'lt-md': ResponsiveClassDirective.createClasses(this.classLtMd),\n 'lt-lg': ResponsiveClassDirective.createClasses(this.classLtLg),\n 'lt-xl': ResponsiveClassDirective.createClasses(this.classLtXl)\n };\n }\n\n private static createClasses(className: string | {[key: string]: boolean}): string {\n if (AssertionUtils.isString(className)) {\n return className;\n }\n\n return Object.entries(className)\n .filter(([_, value]: [string, boolean]) => value)\n .map(([key, _]: [string, boolean]) => key)\n .join(' ');\n }\n}\n","import {BreakpointState} from '@angular/cdk/layout';\nimport {InjectionToken} from '@angular/core';\nimport {Observable} from 'rxjs';\nimport {Device} from './device.enum';\n\nexport const RESPONSIVENESS_VIEW_MODE = new InjectionToken('ResponsivenessViewMode');\n\nexport interface ResponsivenessViewMode {\n readonly isPhone: boolean;\n readonly isTablet: boolean;\n readonly isDesktop: boolean;\n\n observeBreakpointChanges(mediaQuery: string | string[]): Observable;\n\n matchesBreakpoint(mediaQuery: string): boolean;\n\n observeDeviceChanges(): Observable;\n}\n","import {EnumUtils} from './utils/enum-utils';\n\nexport enum Unit {\n DENTS = 'd',\n PICKS = 'p',\n DENTS_PER_METER = 'd/m',\n DENTS_PER_CENTIMETER = 'd/cm',\n DENTS_PER_MILLIMETER = 'd/mm',\n PICKS_PER_METER = 'p/m',\n PICKS_PER_DECIMETER = 'p/dm',\n PICKS_PER_CENTIMETER = 'p/cm',\n PICKS_PER_MILLIMETER = 'p/mm',\n WEFTS_PER_METER = 'w/m',\n WEFTS_PER_DECIMETER = 'w/dm',\n WEFTS_PER_CENTIMETER = 'w/cm',\n WEFTS_PER_MILLIMETER = 'w/mm',\n METER = 'm',\n DECIMETER = 'dm',\n CENTIMETER = 'cm',\n MILLIMETER = 'mm',\n SQUARE_METER = 'm²',\n SQUARE_CENTIMETER = 'cm²',\n SQUARE_MILLIMETER = 'mm²',\n NUMBER_METRIC = 'nm',\n DENIER = 'den',\n TEX = 'tex',\n DECITEX = 'decitex',\n PER_METER = '/m',\n PER_INCH = '/i',\n INCH = 'inch',\n ROTATIONS_PER_MINUTE = 'rpm',\n ENGLISH_COTTON_COUNT = 'NeC',\n LINENCOUNT = 'LEA',\n LIBRA_POUNDS = 'LBS',\n PIXEL = 'px',\n PERCENTAGE = '%',\n BYTE = 'Byte',\n KILOBYTE = 'KB',\n KILOGRAM = 'kg',\n GRAMS_PER_METER = 'g/m',\n METER_PER_MINUTE = 'm/min',\n KILOWATT_HOUR = 'kWh',\n CUBIC_METERS = 'm³',\n DEGREES_CELSIUS = '°C',\n NORMAL_CUBIC_METER = 'Nm³',\n NORMAL_CUBIC_METER_PER_SQUARE_METER = 'Nm³/m²',\n KILOWATT_HOUR_PER_SQUARE_METER = 'kWh/m²',\n PER_CENTIMETER = '/cm',\n PATHS_PER_CENTIMETER = 'paths/cm',\n PATHS_PER_DENTS = 'paths/d',\n LENGTH_PER_METER = 'length/m',\n LENGTH_PER_PICKS = 'length/p',\n SPEED = 'rpm/ppm'\n}\n\nexport namespace Unit {\n export function getKeyFromValue(value: string): string {\n return EnumUtils.getKeyFromValue(Unit, value);\n }\n\n export function isConvertibleToCommercialUnit(unit: Unit): boolean {\n let convertible = false;\n\n switch (unit) {\n case Unit.MILLIMETER:\n case Unit.CENTIMETER:\n case Unit.DECIMETER:\n case Unit.METER:\n case Unit.SQUARE_MILLIMETER:\n case Unit.SQUARE_CENTIMETER:\n case Unit.SQUARE_METER:\n convertible = true;\n break;\n }\n\n return convertible;\n }\n\n export function isConvertibleToDensityUnit(unit: Unit): boolean {\n let convertible = false;\n\n switch (unit) {\n case Unit.DENTS_PER_METER:\n case Unit.DENTS_PER_CENTIMETER:\n case Unit.DENTS_PER_MILLIMETER:\n case Unit.PICKS_PER_METER:\n case Unit.PICKS_PER_DECIMETER:\n case Unit.PICKS_PER_CENTIMETER:\n case Unit.PICKS_PER_MILLIMETER:\n case Unit.WEFTS_PER_METER:\n case Unit.WEFTS_PER_DECIMETER:\n case Unit.WEFTS_PER_CENTIMETER:\n case Unit.WEFTS_PER_MILLIMETER:\n case Unit.PATHS_PER_CENTIMETER:\n case Unit.PATHS_PER_DENTS:\n case Unit.LENGTH_PER_METER:\n case Unit.LENGTH_PER_PICKS:\n convertible = true;\n break;\n }\n\n return convertible;\n }\n\n export function isConvertibleToTextileUnit(unit: Unit): boolean {\n let convertible = false;\n\n switch (unit) {\n case Unit.NUMBER_METRIC:\n case Unit.DENIER:\n case Unit.DECITEX:\n case Unit.TEX:\n case Unit.LINENCOUNT:\n case Unit.LIBRA_POUNDS:\n case Unit.ENGLISH_COTTON_COUNT:\n convertible = true;\n break;\n }\n\n return convertible;\n }\n\n export function isConvertibleToFileSizeUnit(unit: Unit): boolean {\n let convertible = false;\n\n switch (unit) {\n case Unit.BYTE:\n case Unit.KILOBYTE:\n convertible = true;\n break;\n }\n\n return convertible;\n }\n}\n","export class AssertionUtils {\n public static isNullOrUndefined(value: any): boolean {\n return value === null || value === undefined;\n }\n\n public static isNullOrWhitespace(value: string): boolean {\n return AssertionUtils.isEmpty(value?.trim());\n }\n\n public static isEmpty(value: any[] | string | undefined): boolean {\n return !(value?.length > 0);\n }\n\n public static isString(value: any): value is string {\n return typeof value === 'string';\n }\n\n public static isNumber(value: any): value is number {\n return typeof value === 'number';\n }\n\n public static datesAreEqual(a: Date, b: Date): boolean {\n return a?.getTime() === b?.getTime();\n }\n}\n","import {Observable, Observer} from 'rxjs';\n\nexport class DOMUtils {\n public static observeResize(target: Element): Observable {\n return new Observable((observer: Observer) => {\n const resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n observer.next(entries);\n });\n\n resizeObserver.observe(target);\n\n return function unsubscribe(): void {\n resizeObserver.unobserve(target);\n resizeObserver.disconnect();\n };\n });\n }\n\n public static observeMutations(target: Node, options: MutationObserverInit): Observable {\n return new Observable((observer: Observer) => {\n const mutationObserver = new MutationObserver((mutations: MutationRecord[]) => {\n observer.next(mutations);\n });\n\n mutationObserver.observe(target, options);\n\n return function unsubscribe(): void {\n mutationObserver.disconnect();\n };\n });\n }\n\n public static observeWindowEvents(window: Window, type: K): Observable {\n return new Observable((observer: Observer) => {\n const handler = (event: WindowEventMap[K]): void => observer.next(event);\n\n window.addEventListener(type, handler);\n\n return function unsubscribe(): void {\n window.removeEventListener(type, handler);\n };\n });\n }\n}\n","import {find, isEqual, isFunction, isNaN, isNumber, map, reject} from 'lodash-es';\n\nexport class EnumUtils {\n public static getEnumNames(enumObject: T): string[] {\n return Object.keys(enumObject).filter((value: string) => isNaN(Number(value)) && !isFunction(enumObject[value]));\n }\n\n public static getEnumValues(enumObject: E): T[] {\n return map(EnumUtils.getEnumNames(enumObject), (name: string) => enumObject[name]);\n }\n\n public static getKeyFromValue(enumObject: E, value: string | number): string {\n return find(\n reject(Object.keys(enumObject), (key: string) => typeof enumObject[key] !== 'string' && !isNumber(enumObject[key])),\n (key: string) => isEqual(enumObject[key], value)\n );\n }\n}\n","import {L10nIntlService} from 'angular-l10n';\nimport {isEmpty, isEqual, isNil, isNumber} from 'lodash-es';\n\nexport class LocaleUtils {\n public static getDecimalSeparator(l10nIntlService: L10nIntlService): string {\n return this.formatNumber(1.1, l10nIntlService).charAt(1);\n }\n\n public static formatNumber(value: number, l10nIntlService: L10nIntlService, maximumFractionDigits: number = 13): string {\n const decimalPlacesLength = LocaleUtils.getDecimalCasesNumber(value);\n const nonDecimalValue = Math.trunc(value);\n const decimalValue = Math.abs(value - nonDecimalValue);\n const decimalFormat = l10nIntlService.formatNumber(decimalValue.toFixed(decimalPlacesLength), {digits: `1.0-${maximumFractionDigits}`});\n\n return !isNil(value) ? `${nonDecimalValue}${decimalFormat.substring(1)}` : null;\n }\n\n public static parseNumber(s: string | number, l10nIntlService: L10nIntlService): number {\n if (isNumber(s)) {\n return s;\n }\n\n return isEmpty(s) ? null : Number(s.replace(this.getDecimalSeparator(l10nIntlService), '.'));\n }\n\n private static getDecimalCasesNumber(value: number): number {\n let result = 0;\n if (!isEqual(Math.floor(value), value) && !isNil(value)) {\n result = value.toString().split('.')[1].length || 0;\n }\n return result;\n }\n}\n","import {isEmpty, isEqual, size, truncate} from 'lodash-es';\nimport {AssertionUtils} from './assertion-utils';\n\nexport class StringUtils {\n public static slugifyString(text: string): string {\n return text\n .toString()\n .toLowerCase()\n .trim()\n .replace(/\\s+/g, '-')\n .replace(/&/g, '-and-')\n .replace(/[^\\w\\-]+/g, '')\n .replace(/\\-\\-+/g, '-');\n }\n\n public static stringEndingWithNumberComparator(valueA: string, valueB: string): number {\n if (!valueA && !valueB) {\n return 0;\n }\n\n if (!valueA) {\n return -1;\n }\n if (!valueB) {\n return 1;\n }\n\n if (StringUtils.endsWithNumber(valueA) && StringUtils.endsWithNumber(valueB) && valueA.split(' ')[0] === valueB.split(' ')[0]) {\n const numberA = Number(valueA.split(' ')[1]);\n const numberB = Number(valueB.split(' ')[1]);\n const numberComparison = numberA > numberB ? 1 : -1;\n return numberA === numberB ? 0 : numberComparison;\n }\n\n const upperValueA = valueA.toUpperCase();\n const upperValueB = valueB.toUpperCase();\n const comparison = upperValueA > upperValueB ? 1 : -1;\n return upperValueA === upperValueB ? 0 : comparison;\n }\n\n public static stringComparator(valueA: string, valueB: string): number {\n if (!valueA && !valueB) {\n return 0;\n }\n\n if (!valueA) {\n return -1;\n }\n if (!valueB) {\n return 1;\n }\n\n const upperValueA = valueA.toUpperCase();\n const upperValueB = valueB.toUpperCase();\n const comparison = upperValueA > upperValueB ? 1 : -1;\n return isEqual(upperValueA, upperValueB) ? 0 : comparison;\n }\n\n public static truncateString(text: string, length: number): string {\n return truncate(text, {length});\n }\n\n public static hasStringExceededGivenMaxSize(text: string, maxSize: number): boolean {\n return size(text) > maxSize;\n }\n\n public static isEqualIgnoreCase(text1: string, text2: string): boolean {\n return isEqual(text1.toLocaleLowerCase(), text2.toLocaleLowerCase());\n }\n\n public static createNameWithVersion(name: string, version: number): string {\n let result = '';\n\n if (!isEmpty(name)) {\n result = name;\n if (version) {\n result += ` (v${version})`;\n }\n }\n\n return result;\n }\n\n public static endsWithNumber(string: string): boolean {\n return !isNaN(parseInt(string.slice(-1)[0], 10));\n }\n\n public static htmlToText(html: string): string {\n let htmlText = html?.split('
').join('\\n');\n htmlText = htmlText?.split(' ').join(' ');\n\n const tempElement = document.createElement('div');\n tempElement.innerHTML = htmlText;\n\n return tempElement.innerText === 'undefined' ? undefined : tempElement.innerText;\n }\n\n public static textToHtml(text: string): string {\n const tempElement = document.createElement('div');\n tempElement.innerText = text;\n\n return tempElement.innerHTML === 'undefined' ? undefined : tempElement.innerHTML;\n }\n\n public static kebabCase(string: string): string {\n const kebabRegex = /(\\d+|([A-Z][a-z]+)|[a-z]+|([A-Z]+)(?![a-z]))/g;\n if (AssertionUtils.isNullOrUndefined(string)) {\n return string;\n }\n return (string.match(kebabRegex) ?? []).map((section: string) => section.toLocaleLowerCase()).join('-');\n }\n\n public static dotLargeNumber(number: number): string {\n // conversion eg. 10000.1 -> 10.000,1\n // not used anywhere yet\n const parts = number.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, '.');\n return parts.join(',');\n }\n\n public static toDate(date: string): Date {\n return date ? new Date(date) : undefined;\n }\n}\n","export class UuidUtils {\n public static generateV4Uuid(): string {\n return crypto.randomUUID();\n }\n}\n","import {UntypedFormGroup} from '@angular/forms';\nimport {isNil} from 'lodash-es';\n\nexport function canShowErrorForErrorCodeAndFormControlForFormGroup(errorCode: string, formControlName: string, formGroup: UntypedFormGroup): boolean {\n return !isNil(formGroup?.get(formControlName)) && formGroup?.get(formControlName).hasError(errorCode) && formGroup?.get(formControlName).enabled;\n}\n","import {ChangeDetectorRef, EventEmitter, Injectable, Type} from '@angular/core';\nimport {MatDrawer} from '@angular/material/sidenav';\nimport {takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {ArrowPosition} from '../../dialogs/dialog-reposition/arrow-position.enum';\nimport {HoverDialogBuilderService} from '../../dialogs/hover-dialog/hover-dialog-builder.service';\nimport {MenuItemEntry} from '../menu-tree-view/menu-item/menu-item-entry.interface';\n\n@Injectable({providedIn: 'root'})\nexport class ApplicationLayoutService extends BaseComponent {\n public sidebarIcon: string;\n public resizeHovered = false;\n public matDrawer: MatDrawer;\n public hoverDialogOpened: boolean;\n public sidebarHoverButton: HTMLElement;\n public hideFavorites = true;\n\n public sidebarType: Type;\n public navigationHeaderType: Type;\n public menuItemsChanged = new EventEmitter();\n\n private _menuItems: MenuItemEntry[];\n private readonly HORIZONTAL_DIALOG_OFFSET = 96;\n\n public constructor(private readonly hoverDialogBuilderService: HoverDialogBuilderService) {\n super();\n }\n\n public get menuItems(): MenuItemEntry[] {\n return this._menuItems;\n }\n\n public toggle(): void {\n this.matDrawer?.toggle();\n }\n\n public isDrawerOpened(): boolean {\n return this.matDrawer?.opened ?? false;\n }\n\n public openHoverDialog(hoveredElement: HTMLElement, otherElements: HTMLElement[], data: any, component: Type, changeDetectorRef: ChangeDetectorRef): void {\n if (this.hoverDialogOpened || this.isDrawerOpened()) {\n return;\n }\n\n this.hoverDialogOpened = true;\n this.sidebarIcon = 'solid-keyboard-double-arrow-right';\n\n this.hoverDialogBuilderService\n .getBuilderWithHoverElements(hoveredElement, otherElements)\n .withClass(['bms-theme', 'no-left-border-radius'])\n .withWidth('240px')\n .withHeight('calc(100vh - 80px)')\n .withoutBackdrop()\n .openAtElement(hoveredElement, ArrowPosition.TOP, component, data, changeDetectorRef, false, null, null, this.HORIZONTAL_DIALOG_OFFSET, 0)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => {\n this.hoverDialogOpened = false;\n this.sidebarIcon = this.isDrawerOpened() ? 'solid-keyboard-double-arrow-left' : 'solid-menu';\n });\n }\n\n public getFlattenedMenuItems(): MenuItemEntry[] {\n return this._menuItems.flatMap((entry: MenuItemEntry) => this.flattenMenuItems(entry));\n }\n\n public flattenMenuItems(menuItem: MenuItemEntry): MenuItemEntry[] {\n const menuItems = [menuItem];\n\n if (!AssertionUtils.isEmpty(menuItem.childEntries)) {\n menuItems.push(...menuItem.childEntries.flatMap((entry: MenuItemEntry) => this.flattenMenuItems(entry)));\n }\n\n return menuItems;\n }\n\n public getMenuItemPath(itemToFind: MenuItemEntry): MenuItemEntry[] {\n return this._menuItems.flatMap((entry: MenuItemEntry) => this.findMenuItemPath(entry, itemToFind, []));\n }\n\n public findParentEntry(group: MenuItemEntry): MenuItemEntry {\n return this._menuItems?.map((groupEntry: MenuItemEntry) => this.getParentOfChildEntry(groupEntry, group))?.find((groupEntry: MenuItemEntry) => !AssertionUtils.isNullOrUndefined(groupEntry));\n }\n\n public setMenuItems(menuItems: MenuItemEntry[]): void {\n this._menuItems = menuItems;\n\n this.menuItemsChanged.emit();\n }\n\n private findMenuItemPath(parentMenuItem: MenuItemEntry, itemToFind: MenuItemEntry, path: MenuItemEntry[]): MenuItemEntry[] {\n if (AssertionUtils.isEmpty(parentMenuItem.childEntries)) {\n return [];\n }\n\n if (parentMenuItem.childEntries.includes(itemToFind)) {\n return [...path, parentMenuItem];\n }\n\n return parentMenuItem.childEntries.flatMap((entry: MenuItemEntry) => this.findMenuItemPath(entry, itemToFind, [parentMenuItem]));\n }\n\n private getParentOfChildEntry(startGroup: MenuItemEntry, childGroup: MenuItemEntry): MenuItemEntry {\n if (startGroup.childEntries?.find((group: MenuItemEntry) => group.navigationKey === childGroup.navigationKey && group.route === childGroup.route)) {\n return startGroup;\n }\n\n return startGroup.childEntries?.map((group: MenuItemEntry) => this.getParentOfChildEntry(group, childGroup))?.find((group: MenuItemEntry) => !AssertionUtils.isNullOrUndefined(group));\n }\n}\n","
\n \n

\n {{ item.key?.toString() ?? '' | bmsTranslate: {count: 2} }}\n \n

\n

/

\n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {BreadcrumbItem} from './breadcrumb-item.interface';\n\n@Component({\n selector: 'vdw-breadcrumb',\n styleUrls: ['./breadcrumb.component.scss'],\n templateUrl: './breadcrumb.component.html'\n})\nexport class BreadcrumbComponent {\n @Output() public itemsChanged = new EventEmitter();\n @Input() public items: BreadcrumbItem[];\n @Input() public disablePredicate: (breadcrumb: any) => boolean = (): boolean => false;\n\n public navigateTo(index: number): void {\n if (!this.disablePredicate(this.items[index])) {\n if (!AssertionUtils.isNullOrUndefined(this.items[index]?.data?.route)) {\n this.itemsChanged.emit(this.items[index]);\n } else {\n this.items.splice(index + 1, this.items.length - index - 1);\n this.itemsChanged.emit(this.items);\n }\n }\n }\n}\n","@if (limited) {\n
\n \n
\n} @else {\n
\n \n \n \n \n
\n}\n\n
\n @for (color of getPresetColorsWithTone(tone); track $index) {\n
\n \n
\n }\n
\n
\n","import {Component, Inject, OnDestroy} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {Observable, Subject} from 'rxjs';\nimport {ColorConstants} from '../../../common/colors-variables.generated';\nimport {EnumUtils} from '../../../common/utils/enum-utils';\nimport {DialogData} from '../../dialog-button/dialog-data.interface';\nimport {PresetColors} from './preset-colors.enum';\n\n@Component({\n templateUrl: './color-preset-picker-menu.component.html',\n styleUrls: ['./color-preset-picker-menu.component.scss']\n})\nexport class ColorPresetPickerMenuComponent implements DialogData, OnDestroy {\n public limited: boolean;\n public selectedColor: string;\n public selectedColorChanges = new Subject();\n public readonly presetColors = EnumUtils.getEnumValues(PresetColors);\n\n public constructor(@Inject(MAT_DIALOG_DATA) data: {limited: boolean; selectedColor: string}) {\n this.limited = data.limited;\n this.selectedColor = data.selectedColor;\n }\n\n public ngOnDestroy(): void {\n this.selectedColorChanges.complete();\n }\n\n public getPresetColorsWithTone(tone: number): string[] {\n return this.presetColors.map((presetColor: string) => ColorConstants[`${presetColor}_${tone.toString()}`]);\n }\n\n public isColorSelected(color: string): boolean {\n return color === this.selectedColor;\n }\n\n public selectColor(color: string): void {\n this.selectedColor = color;\n this.selectedColorChanges.next(this.selectedColor);\n }\n\n public getValue(): Observable {\n return this.selectedColorChanges.asObservable();\n }\n}\n","
\n @if (mode === COLOR_PICKER_MODE.NATIVE) {\n \n } @else {\n \n \n \n }\n \n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {ColorPickerMode} from './color-picker-mode.enum';\nimport {ColorPresetPickerMenuComponent} from './color-preset-picker-menu/color-preset-picker-menu.component';\n\n@Component({\n selector: 'vdw-color-picker-form-input',\n templateUrl: './color-picker-form-input.component.html',\n styleUrls: ['./color-picker-form-input.component.scss']\n})\nexport class ColorPickerFormInputComponent {\n @Input() public mode = ColorPickerMode.NATIVE;\n @Input() public selectedColor: string;\n @Output() public selectedColorChange = new EventEmitter();\n\n public readonly COLOR_PICKER_MODE = ColorPickerMode;\n public readonly COLOR_PRESET_PICKER_MENU_COMPONENT = ColorPresetPickerMenuComponent;\n\n public getDialogData(): {limited: boolean; selectedColor: string} {\n return {limited: this.mode === ColorPickerMode.LIMITED, selectedColor: this.selectedColor};\n }\n\n public onSelectedColorChanged(color: string): void {\n this.selectedColorChange.emit(color);\n }\n}\n","export enum ColorPickerMode {\n NATIVE,\n LIMITED,\n FULL\n}\n","export enum PresetColors {\n VIOLET = 'PRIMARY_VIOLET',\n AQUA = 'PRIMARY_AQUA',\n TEAL = 'PRIMARY_TEAL',\n GREEN = 'SEMANTIC_SUCCESS',\n YELLOW = 'PRIMARY_YELLOW',\n ORANGE = 'SEMANTIC_WARNING',\n RED = 'SEMANTIC_ERROR',\n PINK = 'PRIMARY_PINK',\n PURPLE = 'PRIMARY_PURPLE'\n}\n","import {AfterViewInit, Directive, ElementRef, Input, OnChanges, SimpleChanges} from '@angular/core';\n\n@Directive({\n selector: '[vdwSliderTrackBackground]'\n})\nexport class SliderTrackBackgroundDirective implements AfterViewInit, OnChanges {\n @Input() public sliderTrackBackground: string;\n\n private readonly QUERY_NAME_FOR_SLIDER_TRACK = 'div.mdc-slider__track--inactive';\n private elementReference: ElementRef;\n private sliderTrackBackgroundElement: HTMLDivElement;\n\n public constructor(elementRef: ElementRef) {\n this.elementReference = elementRef;\n }\n\n public ngAfterViewInit(): void {\n this.sliderTrackBackgroundElement = this.elementReference.nativeElement.querySelector(this.QUERY_NAME_FOR_SLIDER_TRACK);\n this.updateSliderTrackBackground();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.updateSliderTrackBackground();\n }\n\n private updateSliderTrackBackground(): void {\n if (this.sliderTrackBackgroundElement) {\n this.sliderTrackBackgroundElement.style.background = this.sliderTrackBackground;\n }\n }\n}\n","
\n
\n
\n

{{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.COLOR_PICKER' | bmsTranslate }}

\n
\n
\n
\n
\n
\n
\n
\n\n
\n
\n
\n
\n \n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.NAME' | bmsTranslate }}\n \n \n \n {{ 'GENERAL.ACTIONS.APPLY' | bmsTranslate }}\n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.NAME_DUPLICATE' | bmsTranslate }}\n {{ 'GENERAL.ACTIONS.LOAD' | bmsTranslate }}\n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.REQUIRED' | bmsTranslate }}\n \n \n
\n\n
\n \n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.PREVIEW' | bmsTranslate }}\n \n \n
\n
\n\n
\n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.DESCRIPTION' | bmsTranslate }}\n ({{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n
\n\n
\n
\n \n R \n \n \n
\n\n
\n \n G \n \n \n
\n\n
\n \n B \n \n \n
\n
\n\n
\n
\n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.HUE' | bmsTranslate }} \n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n
\n
\n\n
\n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.SATURATION' | bmsTranslate }}\n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n
\n
\n\n
\n {{ 'ANGULAR_COMPONENT_LIBRARY.COLOR_PICKER.LUMINANCE' | bmsTranslate }}\n
\n
\n \n \n \n
\n\n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {Component, EventEmitter, Inject, Input, OnChanges, OnDestroy, Output, SimpleChanges} from '@angular/core';\nimport {AsyncValidatorFn, FormBuilder, FormControl, FormGroup, Validators} from '@angular/forms';\nimport {some} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {debounceTime, takeUntil, tap} from 'rxjs/operators';\nimport {BaseComponent} from '../../../base-component';\nimport {convertHSLToRGB, convertHSVToRGB, convertRGBToHexadecimalColorCode, convertRGBToHSL, convertRGBToHSV} from '../../../common/converters/convert-color-representation';\nimport {Color} from '../../../common/data/color';\nimport {ColorHSLRepresentation} from '../../../common/interfaces/color-hsl-representation';\nimport {ColorHSVRepresentation} from '../../../common/interfaces/color-hsv-representation';\nimport {ColorRGBRepresentation} from '../../../common/interfaces/color-rgb-representation';\nimport {Point} from '../../../common/interfaces/point';\nimport {notEmptyValidator} from '../../../common/validators/not-empty-validator';\nimport {FormValidationHelper} from '../../../forms/form-validation-helper';\n\n@Component({\n selector: 'vdw-add-color',\n templateUrl: './add-color.component.html',\n styleUrls: ['./add-color.component.scss']\n})\nexport class AddColorComponent extends BaseComponent implements OnChanges, OnDestroy {\n private static readonly colorPickerHeightInPx = 275;\n private static readonly colorPickerIndicatorSizeInPx = 20;\n private static readonly colorPickerWidthInPx = 275;\n @Input() public colorToSave: Color = Color.createEmptyColor();\n @Input() public canEdit = true;\n @Input() public validatorFunction: () => AsyncValidatorFn;\n @Input() public loadLink: string;\n @Input() public suggestedColorName: string;\n @Output() public save: EventEmitter = new EventEmitter();\n @Output() public nameChanged: EventEmitter = new EventEmitter();\n @Output() public loadClicked: EventEmitter = new EventEmitter();\n @Output() public getSuggestedColorName: EventEmitter = new EventEmitter();\n\n public addColorForm: FormGroup<{\n name: FormControl;\n description: FormControl;\n rgb: FormGroup<{\n red: FormControl;\n green: FormControl;\n blue: FormControl;\n }>;\n hsl: FormGroup<{\n hue: FormControl;\n saturation: FormControl;\n luminance: FormControl;\n }>;\n }>;\n\n public previewHSL: ColorHSLRepresentation;\n private readonly previewHSLChange: Subject = new Subject();\n private saveButtonTouched = false;\n\n public constructor(\n private readonly formBuilder: FormBuilder,\n @Inject(DOCUMENT) private readonly document: Document\n ) {\n super();\n }\n\n private static calculateHSLForPositionInRectangle(hue: number, position: Point): ColorHSLRepresentation {\n const horizontalOffset: number = position.x / AddColorComponent.colorPickerWidthInPx;\n const verticalOffset: number = 1 - position.y / AddColorComponent.colorPickerHeightInPx;\n const saturation: number = 100 * horizontalOffset;\n const value: number = 100 * verticalOffset;\n let result = convertRGBToHSL(convertHSVToRGB({hue, saturation, value}));\n result = {\n hue: Math.round(result.hue),\n saturation: Math.round(result.saturation),\n luminance: Math.round(result.luminance)\n };\n return result;\n }\n\n private static calculatePositionInRectangleForHSL(hsl: ColorHSLRepresentation): Point {\n const hsv: ColorHSVRepresentation = convertRGBToHSV(convertHSLToRGB(hsl));\n const horizontalOffset: number = hsv.saturation / 100;\n const verticalOffset: number = hsv.value / 100;\n return {\n x: horizontalOffset * AddColorComponent.colorPickerWidthInPx,\n y: (1 - verticalOffset) * AddColorComponent.colorPickerHeightInPx\n };\n }\n\n private static getHSLWithLuminance(hsl: ColorHSLRepresentation, luminance: number): ColorHSLRepresentation {\n return {hue: hsl.hue, saturation: hsl.saturation, luminance};\n }\n\n private static getHSLWithSaturation(hsl: ColorHSLRepresentation, saturation: number): ColorHSLRepresentation {\n return {hue: hsl.hue, saturation, luminance: hsl.luminance};\n }\n\n private static getRoundedHSL(hsl: ColorHSLRepresentation): ColorHSLRepresentation {\n return {hue: Math.round(hsl.hue), saturation: Math.round(hsl.saturation), luminance: Math.round(hsl.luminance)};\n }\n\n private static getRoundedRGB(rgb: ColorRGBRepresentation): ColorRGBRepresentation {\n return {red: Math.round(rgb.red), green: Math.round(rgb.green), blue: Math.round(rgb.blue)};\n }\n\n private static getInRangeHSL(hsl: ColorHSLRepresentation): ColorHSLRepresentation {\n return {\n hue: AddColorComponent.getInRangeValue(hsl.hue, 0, 360),\n saturation: AddColorComponent.getInRangeValue(hsl.saturation, 0, 100),\n luminance: AddColorComponent.getInRangeValue(hsl.luminance, 0, 100)\n };\n }\n\n private static getInRangeRGB(rgb: ColorRGBRepresentation): ColorRGBRepresentation {\n return {\n red: AddColorComponent.getInRangeValue(rgb.red, 0, 255),\n blue: AddColorComponent.getInRangeValue(rgb.blue, 0, 255),\n green: AddColorComponent.getInRangeValue(rgb.green, 0, 255)\n };\n }\n\n private static getInRangeValue(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, Math.round(value)));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.colorToSave) {\n if (this.addColorForm) {\n this.setFormFieldValues();\n this.getSuggestedColorName.emit(this.colorToSave);\n } else {\n this.setFormFields();\n }\n }\n }\n\n public canShowSuggestedColorName(): boolean {\n return this.suggestedColorName?.length > 0 && this.addColorForm.value.name !== this.suggestedColorName;\n }\n\n public applySuggestionForColorName(): void {\n this.addColorForm.controls.name.patchValue(this.suggestedColorName);\n }\n\n public getStyleForColorPickerContainer(): any {\n return {\n width: AddColorComponent.colorPickerWidthInPx + 2 * AddColorComponent.colorPickerIndicatorSizeInPx + 'px',\n height: AddColorComponent.colorPickerHeightInPx + 2 * AddColorComponent.colorPickerIndicatorSizeInPx + 'px',\n position: 'relative',\n left: `${-AddColorComponent.colorPickerIndicatorSizeInPx}px`,\n top: `${-AddColorComponent.colorPickerIndicatorSizeInPx}px`\n };\n }\n\n public getStyleForColorPicker(): any {\n const colorPickerTopRightColorCode: string = convertRGBToHexadecimalColorCode(\n convertHSVToRGB({\n hue: this.previewHSL.hue,\n saturation: 100,\n value: 100\n })\n );\n\n return {\n background: `linear-gradient(to top, black, transparent), linear-gradient(to right, white, ${colorPickerTopRightColorCode})`,\n width: `${AddColorComponent.colorPickerWidthInPx}px`,\n height: `${AddColorComponent.colorPickerHeightInPx}px`,\n position: 'relative',\n left: `${AddColorComponent.colorPickerIndicatorSizeInPx}px`,\n top: `${AddColorComponent.colorPickerIndicatorSizeInPx}px`\n };\n }\n\n public onColorPickerClick(event: MouseEvent): void {\n if (this.canEditColor()) {\n const eventTarget = event.target as Element;\n const position: Point = {x: 0, y: 0};\n\n switch (eventTarget.id) {\n case 'colorPickerContainer':\n position.x = Math.max(0, Math.min(AddColorComponent.colorPickerWidthInPx, event.offsetX - AddColorComponent.colorPickerIndicatorSizeInPx));\n position.y = Math.max(0, Math.min(AddColorComponent.colorPickerHeightInPx, event.offsetY - AddColorComponent.colorPickerIndicatorSizeInPx));\n break;\n case 'colorPicker':\n position.x = event.offsetX;\n position.y = event.offsetY;\n break;\n default:\n return;\n }\n this.previewHSLChange.next(AddColorComponent.calculateHSLForPositionInRectangle(this.previewHSL.hue, position));\n }\n }\n\n public getStyleForColorPickerIndicator(): any {\n const position: Point = AddColorComponent.calculatePositionInRectangleForHSL(this.previewHSL);\n const translateX: number = position.x - AddColorComponent.colorPickerIndicatorSizeInPx / 2;\n const translateY: number = position.y - AddColorComponent.colorPickerIndicatorSizeInPx / 2;\n return {\n background: this.getPreviewColorCode(),\n width: `${AddColorComponent.colorPickerIndicatorSizeInPx}px`,\n height: `${AddColorComponent.colorPickerIndicatorSizeInPx}px`,\n transform: `translateX(${translateX}px) translateY(${translateY}px)`\n };\n }\n\n public getPreviewColorCode(): string {\n return convertRGBToHexadecimalColorCode(convertHSLToRGB(this.previewHSL));\n }\n\n public getTrackBackgroundForHueSlider(): string {\n return 'linear-gradient(90deg, red, yellow, lime, cyan, blue, magenta, red)';\n }\n\n public onHueChange(newValue: number): void {\n this.previewHSLChange.next({\n hue: newValue,\n saturation: this.previewHSL.saturation,\n luminance: this.previewHSL.luminance\n });\n }\n\n public getTrackBackgroundForSaturationSlider(): string {\n const colorCodeForGradientStart: string = this.getColorCodeForPreviewHSLWithSaturation(0);\n const colorCodeForGradientEnd: string = this.getColorCodeForPreviewHSLWithSaturation(100);\n return `linear-gradient(90deg, ${colorCodeForGradientStart}, ${colorCodeForGradientEnd})`;\n }\n\n public onSaturationChange(newValue: number): void {\n this.previewHSLChange.next({\n hue: this.previewHSL.hue,\n saturation: newValue,\n luminance: this.previewHSL.luminance\n });\n }\n\n public getTrackBackgroundForLuminanceSlider(): string {\n const colorCodeForGradientStart: string = this.getColorCodeForPreviewHSLWithLuminance(0);\n const colorCodeForGradientMiddle: string = this.getColorCodeForPreviewHSLWithLuminance(50);\n const colorCodeForGradientEnd: string = this.getColorCodeForPreviewHSLWithLuminance(100);\n return `linear-gradient(90deg, ${colorCodeForGradientStart}, ${colorCodeForGradientMiddle}, ${colorCodeForGradientEnd})`;\n }\n\n public onLuminanceChange(newValue: number): void {\n this.previewHSLChange.next({\n hue: this.previewHSL.hue,\n saturation: this.previewHSL.saturation,\n luminance: newValue\n });\n }\n\n public saveColor(): void {\n this.saveButtonTouched = true;\n const isValid = new FormValidationHelper().checkForm(this.addColorForm, this.document);\n if (isValid) {\n this.save.emit(this.getCurrentColor());\n }\n }\n\n public canShowInvalidFormMessageError(): boolean {\n const isFormInvalid = this.addColorForm ? some(this.addColorForm.controls, (control: FormControl) => control.invalid && control.touched) : false;\n if (!isFormInvalid) {\n this.saveButtonTouched = false;\n }\n return isFormInvalid && this.saveButtonTouched;\n }\n\n public canEditColor(): boolean {\n return this.canEdit && !this.colorToSave.used;\n }\n\n public getLoadLink(): string {\n const id = this.addColorForm.controls['name'].errors.entityId;\n return this.loadLink?.replace(':id', id.toString());\n }\n\n public onLoadClick(event: MouseEvent): void {\n event?.preventDefault();\n this.loadClicked.emit(this.getLoadLink());\n }\n\n public getCurrentColor(): Color {\n return new Color(this.colorToSave.id, this.addColorForm.value.name, this.getFormRGB(), this.colorToSave.used, undefined, this.addColorForm.value.description);\n }\n\n private setFormFields(): void {\n this.previewHSL = AddColorComponent.getRoundedHSL(convertRGBToHSL(this.colorToSave.rgb));\n\n this.addColorForm = this.formBuilder.group({\n name: this.formBuilder.control(this.colorToSave.name, [Validators.required, notEmptyValidator()], this.validatorFunction ? this.validatorFunction() : null),\n description: this.formBuilder.control(this.colorToSave.description),\n rgb: this.formBuilder.group({\n red: this.formBuilder.control(this.colorToSave.rgb.red, [Validators.required, Validators.min(0), Validators.max(255)]),\n green: this.formBuilder.control(this.colorToSave.rgb.green, [Validators.required, Validators.min(0), Validators.max(255)]),\n blue: this.formBuilder.control(this.colorToSave.rgb.blue, [Validators.required, Validators.min(0), Validators.max(255)])\n }),\n hsl: this.formBuilder.group({\n hue: this.formBuilder.control(this.previewHSL.hue, [Validators.required, Validators.min(0), Validators.max(360)]),\n saturation: this.formBuilder.control(this.previewHSL.saturation, [Validators.required, Validators.min(0), Validators.max(100)]),\n luminance: this.formBuilder.control(this.previewHSL.luminance, [Validators.required, Validators.min(0), Validators.max(100)])\n })\n });\n\n this.addColorForm.controls.name.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: string) => setTimeout(() => this.nameChanged.emit(value), 0));\n\n this.subscribeToPreviewHSL();\n }\n\n private subscribeToPreviewHSL(): void {\n const rgbFormGroup = this.addColorForm.controls.rgb;\n const hslFormGroup = this.addColorForm.controls.hsl;\n this.previewHSLChange\n .pipe(\n tap((hsl: ColorHSLRepresentation) => {\n this.previewHSL = hsl;\n rgbFormGroup.patchValue(AddColorComponent.getRoundedRGB(convertHSLToRGB(this.previewHSL)), {emitEvent: false});\n hslFormGroup.patchValue(AddColorComponent.getRoundedHSL(this.previewHSL), {emitEvent: false});\n }),\n debounceTime(500),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe(() => {\n this.getSuggestedColorName.emit(this.getCurrentColor());\n });\n rgbFormGroup.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n if (rgbFormGroup.valid) {\n this.previewHSLChange.next(convertRGBToHSL(this.getFormRGB()));\n } else {\n rgbFormGroup.patchValue(AddColorComponent.getInRangeRGB(this.getFormRGB()));\n }\n });\n hslFormGroup.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n if (hslFormGroup.valid) {\n this.previewHSLChange.next(this.getFormHSL());\n } else {\n hslFormGroup.patchValue(AddColorComponent.getInRangeHSL(this.getFormHSL()));\n }\n });\n }\n\n private getColorCodeForPreviewHSLWithLuminance(luminance: number): string {\n const colorHSLRepresentation: ColorHSLRepresentation = AddColorComponent.getHSLWithLuminance(this.previewHSL, luminance);\n return convertRGBToHexadecimalColorCode(convertHSLToRGB(colorHSLRepresentation));\n }\n\n private getColorCodeForPreviewHSLWithSaturation(saturation: number): string {\n const colorHSLRepresentation: ColorHSLRepresentation = AddColorComponent.getHSLWithSaturation(this.previewHSL, saturation);\n return convertRGBToHexadecimalColorCode(convertHSLToRGB(colorHSLRepresentation));\n }\n\n private getFormHSL(): ColorHSLRepresentation {\n return {\n hue: this.addColorForm.get('hsl.hue').value,\n saturation: this.addColorForm.get('hsl.saturation').value,\n luminance: this.addColorForm.get('hsl.luminance').value\n };\n }\n\n private getFormRGB(): ColorRGBRepresentation {\n return {\n red: this.addColorForm.get('rgb.red').value,\n green: this.addColorForm.get('rgb.green').value,\n blue: this.addColorForm.get('rgb.blue').value\n };\n }\n\n private setFormFieldValues(): void {\n this.previewHSL = AddColorComponent.getRoundedHSL(convertRGBToHSL(this.colorToSave.rgb));\n\n this.addColorForm.controls.name.setAsyncValidators(this.validatorFunction ? this.validatorFunction() : null);\n\n this.addColorForm.setValue({\n name: this.colorToSave.name,\n description: this.colorToSave.description,\n rgb: {\n red: this.colorToSave.rgb.red,\n green: this.colorToSave.rgb.green,\n blue: this.colorToSave.rgb.blue\n },\n hsl: {\n hue: this.previewHSL.hue,\n saturation: this.previewHSL.saturation,\n luminance: this.previewHSL.luminance\n }\n });\n }\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\n\nexport function notEmptyValidator(): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const value = control.value as string;\n\n if (!value || value.trim() === '') {\n return {required: true};\n }\n\n return null;\n };\n}\n","import {Component, Inject, OnInit, ViewChild, ViewContainerRef} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {Observable, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {ContentComponentInput} from './content-switcher-component-input.interface';\n\n@Component({\n templateUrl: './content-switcher-dialog-prototype.component.html',\n styleUrls: ['./content-switcher-dialog-prototype.component.scss']\n})\nexport class ContentSwitcherDialogPrototypeComponent extends BaseComponent implements OnInit {\n @ViewChild('contentSwitcherContainer', {read: ViewContainerRef, static: true}) private readonly contentSwitcherContainer: ViewContainerRef;\n\n private readonly nextComponentRefAndInfo: Observable;\n\n public constructor(@Inject(MAT_DIALOG_DATA) matDialogData: {nextComponentRefAndInfo: Observable}) {\n super();\n\n this.nextComponentRefAndInfo = matDialogData.nextComponentRefAndInfo;\n }\n\n public ngOnInit(): void {\n this.nextComponentRefAndInfo.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((contentComponentInput: ContentComponentInput) => {\n if (contentComponentInput.destroyPrevious) {\n this.contentSwitcherContainer.clear();\n } else {\n this.contentSwitcherContainer.detach();\n }\n\n this.contentSwitcherContainer.insert(contentComponentInput.componentRef.hostView);\n });\n }\n}\n","
\n \n
\n","import {createComponent, createNgModule, EnvironmentInjector, Injectable, NgModuleRef, Type} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {BehaviorSubject, Observable, Subject, take} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {DialogBuilderFactoryService} from '../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {ContentEntry} from './content-entry.interface';\nimport {ContentSwitcherComponentData} from './content-switcher-component-data.interface';\nimport {ContentComponentInput} from './content-switcher-component-input.interface';\nimport {ContentSwitcherDialogPrototypeComponent} from './content-switcher-dialog-prototype.component';\n\n@Injectable({providedIn: 'root'})\nexport class ContentSwitcherDialogPrototypeService {\n private currentEntry: ContentEntry;\n private contentSwitcherHistory: ContentEntry[] = [];\n\n private readonly nextComponentRefAndInfo: BehaviorSubject = new BehaviorSubject(null);\n\n private dialog: MatDialogRef;\n\n public constructor(\n private readonly dialogBuilderFactory: DialogBuilderFactoryService,\n private readonly environmentInjector: EnvironmentInjector\n ) {}\n\n public navigateForward(componentData: ContentSwitcherComponentData): Observable {\n if (AssertionUtils.isNullOrUndefined(this.dialog)) {\n this.dialog = this.openContentSwitcherDialog();\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.currentEntry)) {\n this.contentSwitcherHistory.push(this.currentEntry);\n }\n\n this.currentEntry = {\n componentData,\n navigateBackData: new Subject(),\n componentRef: createComponent(componentData.component, {\n environmentInjector: this.getInjector(componentData.module)\n })\n };\n\n Object.assign(this.currentEntry.componentRef.instance, this.currentEntry.componentData.componentInputs);\n\n this.nextComponentRefAndInfo.next({componentData, componentRef: this.currentEntry.componentRef, destroyPrevious: false});\n\n return this.currentEntry.navigateBackData.asObservable().pipe(take(1));\n }\n\n public navigateBack(data: T): void {\n if (!AssertionUtils.isNullOrUndefined(this.currentEntry)) {\n this.currentEntry.navigateBackData.next(data);\n\n this.currentEntry.navigateBackData.complete();\n }\n\n this.currentEntry = this.contentSwitcherHistory.pop();\n\n if (!AssertionUtils.isNullOrUndefined(this.currentEntry)) {\n if (AssertionUtils.isNullOrUndefined(this.dialog)) {\n this.dialog = this.openContentSwitcherDialog();\n }\n\n this.nextComponentRefAndInfo.next({componentData: this.currentEntry.componentData, componentRef: this.currentEntry.componentRef, destroyPrevious: true});\n } else if (!AssertionUtils.isNullOrUndefined(this.dialog)) {\n this.closeContentSwitcherDialog();\n }\n }\n\n public resetContentSwitcher(): number {\n this.currentEntry.componentRef.destroy();\n this.currentEntry.navigateBackData.complete();\n this.currentEntry = undefined;\n\n const dialogHistorySize = this.contentSwitcherHistory.length;\n\n this.contentSwitcherHistory.forEach((contentEntry: ContentEntry): void => {\n contentEntry.componentRef.destroy();\n contentEntry.navigateBackData.complete();\n });\n this.contentSwitcherHistory = [];\n\n this.closeContentSwitcherDialog();\n\n return dialogHistorySize;\n }\n\n public closeDialogButMaintainHistory(): void {\n this.contentSwitcherHistory.push(this.currentEntry);\n this.closeContentSwitcherDialog();\n }\n\n private openContentSwitcherDialog(): MatDialogRef {\n return this.dialogBuilderFactory.getBuilder().withWidth('80vw').withMinWidth(900).withHeight('80vh').withCloseDisabled().withMinHeight(480).open(\n ContentSwitcherDialogPrototypeComponent,\n {\n nextComponentRefAndInfo: this.nextComponentRefAndInfo\n },\n true\n );\n }\n\n private getInjector(module?: Type): EnvironmentInjector {\n if (!AssertionUtils.isNullOrUndefined(module)) {\n const moduleRef = createNgModule(module, this.environmentInjector);\n return moduleRef.injector;\n } else if (!AssertionUtils.isNullOrUndefined(this.currentEntry?.componentRef)) {\n return this.currentEntry.componentRef.injector.get(NgModuleRef).injector;\n } else {\n return this.environmentInjector;\n }\n }\n\n private closeContentSwitcherDialog(): undefined {\n this.dialog.close();\n this.dialog = undefined;\n }\n}\n","import {Injectable, Injector} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {cloneDeep} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {ContentSwitcherEntry} from './content-switcher-entry.interface';\n\n@Injectable({providedIn: 'root'})\nexport class ContentSwitcherDialogService {\n public parentInjector: Injector;\n public dialog: MatDialogRef;\n public creatingObjectNameChanged = new Subject();\n\n public activeEntry: ContentSwitcherEntry;\n public navigationHistory: {entry: ContentSwitcherEntry; inputs: Record}[] = [];\n\n private inputs: Record;\n private cachedPreviousEntry: ContentSwitcherEntry;\n\n public setCreatingObjectName(name: string): void {\n this.creatingObjectNameChanged.next(name);\n }\n\n public reset(): void {\n this.dialog = null;\n this.activeEntry = null;\n this.navigationHistory = [];\n }\n\n public getInputs(): Record {\n return this.inputs;\n }\n\n public getActiveEntryData(): T {\n return this.activeEntry ? this.activeEntry.data : null;\n }\n\n public getCachedPreviousEntry(): ContentSwitcherEntry {\n return this.cachedPreviousEntry;\n }\n\n public getEntry(key: string): ContentSwitcherEntry {\n if (AssertionUtils.isEmpty(this.navigationHistory)) {\n return null;\n }\n\n const foundEntry = this.navigationHistory.find((history: {entry: ContentSwitcherEntry; inputs: Record}) => history.entry.key === key);\n\n if (!AssertionUtils.isNullOrUndefined(foundEntry)) {\n return foundEntry.entry;\n }\n\n return this.cachedPreviousEntry?.key === key ? this.cachedPreviousEntry : null;\n }\n\n public navigateBack(): void {\n this.creatingObjectNameChanged.next('');\n this.cachedPreviousEntry = cloneDeep(this.activeEntry);\n const previous = this.navigationHistory.pop();\n\n if (!AssertionUtils.isNullOrUndefined(previous)) {\n this.inputs = previous.inputs;\n this.activeEntry = previous.entry;\n\n if (AssertionUtils.isNullOrUndefined(previous.entry.component)) {\n setTimeout(() => this.navigateBack(), 20);\n }\n } else {\n this.dialog.close();\n }\n }\n\n public navigateForward(entry: ContentSwitcherEntry, newInputs?: Record): void {\n this.creatingObjectNameChanged.next('');\n\n if (!AssertionUtils.isNullOrUndefined(this.dialog)) {\n this.cachedPreviousEntry = cloneDeep(this.activeEntry);\n\n if (!AssertionUtils.isNullOrUndefined(this.activeEntry)) {\n this.navigationHistory.push({entry: this.activeEntry, inputs: this.inputs});\n }\n }\n\n this.activeEntry = entry;\n this.inputs = newInputs;\n }\n}\n","import {ElementRef, EventEmitter, Injectable} from '@angular/core';\r\nimport {AgGridAngular} from 'ag-grid-angular';\r\n\r\n@Injectable({providedIn: 'root'})\r\nexport class CrudGridContextService {\r\n public grid: AgGridAngular;\r\n public gridContainer: ElementRef;\r\n\r\n public setCurrentGrid = new EventEmitter();\r\n public gridReady = new EventEmitter();\r\n}\r\n","
\r\n @if (canShowActions) {\r\n
\r\n
\r\n \r\n \r\n \r\n @if (showCustomSettingsButton) {\r\n \r\n }\r\n @if (withNewClicked) {\r\n \r\n }\r\n
\r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n
\r\n","import {AfterViewInit, ChangeDetectionStrategy, Component, ElementRef, EventEmitter, Input, OnInit, Output, ViewChild} from '@angular/core';\r\nimport {AgGridAngular} from 'ag-grid-angular';\r\nimport {GridOptions} from 'ag-grid-community';\r\nimport {takeUntil} from 'rxjs';\r\nimport {BaseComponent} from '../../../base-component';\r\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\r\nimport {TranslateService} from '../../../translation/translate.service';\r\nimport {CrudGridContextService} from '../crud-grid-context-service/crud-grid.context.service';\r\n\r\n@Component({\r\n selector: 'vdw-crud-grid-with-actions',\r\n templateUrl: './crud-grid-with-actions.component.html',\r\n styleUrls: ['./crud-grid-with-actions.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CrudGridWithActionsComponent extends BaseComponent implements AfterViewInit, OnInit {\r\n @Input() public rowData: any[];\r\n @Input() public entityName: string;\r\n @Input() public gridOptions: GridOptions;\r\n @Input() public canShowActions = true;\r\n @Input() public withNewClicked: (event: MouseEvent) => void;\r\n @Input() public showCustomSettingsButton: boolean;\r\n\r\n @Output() public showCustomSettings = new EventEmitter();\r\n\r\n @ViewChild('grid') public grid: AgGridAngular;\r\n @ViewChild('gridContainer') public gridContainer: ElementRef;\r\n\r\n public constructor(\r\n private readonly translate: TranslateService,\r\n private readonly context: CrudGridContextService\r\n ) {\r\n super();\r\n }\r\n\r\n public ngOnInit(): void {\r\n this.context.setCurrentGrid\r\n .asObservable()\r\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\r\n .subscribe(() => {\r\n this.setGrid();\r\n });\r\n }\r\n\r\n public getNewButtonText(): string {\r\n const newText = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.NEW');\r\n\r\n return AssertionUtils.isNullOrUndefined(this.entityName) ? newText : `${newText} ${this.translate.instant(this.entityName, {count: 1}).toLowerCase()}`;\r\n }\r\n\r\n public ngAfterViewInit(): void {\r\n this.setGrid();\r\n }\r\n\r\n protected exportData(): void {\r\n this.context.grid.api.exportDataAsCsv();\r\n }\r\n\r\n protected setGrid(): void {\r\n this.context.grid = this.grid;\r\n this.context.gridContainer = this.gridContainer;\r\n this.context.gridReady.emit();\r\n }\r\n}\r\n","
\n @for (extraAction of config.extraActions; track extraAction) {\n \n }\n
\n","import {Component, Inject} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {Observable, of} from 'rxjs';\nimport {CrudOverviewExtraActionConfig} from '../../crud-overview-data/interfaces/crud-overview-extra-action-config.interface';\nimport {DialogData} from '../../dialog-button/dialog-data.interface';\n\n@Component({\n templateUrl: './grid-selection-extra-actions-dialog.component.html',\n styleUrls: ['./grid-selection-extra-actions-dialog.component.scss']\n})\nexport class GridSelectionExtraActionsDialogComponent implements DialogData {\n public constructor(\n @Inject(MAT_DIALOG_DATA) public readonly config: {extraActions: CrudOverviewExtraActionConfig[]; grid: AgGridAngular},\n private readonly dialogRef: MatDialogRef\n ) {}\n\n public getValue(): Observable {\n return of();\n }\n\n public isActionAvailable(extraAction: CrudOverviewExtraActionConfig): boolean {\n return extraAction.onlySingleSelection === true ? this.config.grid?.api?.getSelectedRows()?.length === 1 : true;\n }\n\n public evaluateCloseDialog(extraAction: CrudOverviewExtraActionConfig): void {\n if (extraAction.closeMenuOnClick === true) {\n this.dialogRef.close();\n }\n }\n}\n","
\n \n {{ selectedNodes }} {{ 'ANGULAR_COMPONENT_LIBRARY.GRID_SELECTION_OPTIONS.SELECTED' | bmsTranslate }}\n \n
|
\n \n \n \n \n \n \n \n \n \n
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {MAT_DIALOG_DATA, MatDialogRef} from '@angular/material/dialog';\nimport {AgGridAngular} from 'ag-grid-angular';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {CrudOverviewButtonConfig} from '../crud-overview-data/interfaces/crud-overview-button-config.interface';\nimport {CrudOverviewDataConfig} from '../crud-overview-data/interfaces/crud-overview-data-config.interface';\nimport {CrudOverviewExtraActionConfig} from '../crud-overview-data/interfaces/crud-overview-extra-action-config.interface';\nimport {GridSelectionExtraActionsDialogComponent} from './grid-selection-extra-actions-dialog/grid-selection-extra-actions-dialog.component';\n\n@Component({\n selector: 'vdw-grid-selection-options',\n templateUrl: './grid-selection-options.component.html',\n styleUrls: ['./grid-selection-options.component.scss']\n})\nexport class GridSelectionOptionsComponent implements OnInit {\n private cachedSelectedNodes: number;\n private hideButtons: {[id: string]: boolean} = {};\n\n public hasCustomActions: boolean;\n public extraOptionsComponent = GridSelectionExtraActionsDialogComponent;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) protected readonly data: {grid: AgGridAngular; config: CrudOverviewDataConfig},\n private readonly dialogRef: MatDialogRef\n ) {}\n\n public get selectedNodes(): number {\n const selectedRows = this.data.grid?.api?.getSelectedRows()?.length ?? 0;\n\n if (selectedRows !== 0) {\n this.cachedSelectedNodes = selectedRows;\n }\n\n return this.cachedSelectedNodes;\n }\n\n public get buttons(): CrudOverviewButtonConfig[] {\n return this.data.config.buttons;\n }\n\n public get grid(): AgGridAngular {\n return this.data.grid;\n }\n\n public get extraActions(): CrudOverviewExtraActionConfig[] {\n return this.data.config.extraActions;\n }\n\n public get onlyShowSelected(): boolean {\n return this.data.config.onlyShowSelected;\n }\n\n public ngOnInit(): void {\n this.hasCustomActions = this.data.config.extraActions.length !== 0;\n }\n\n public hasClickEvent(button: CrudOverviewButtonConfig): boolean {\n return !AssertionUtils.isNullOrUndefined(button.onClick);\n }\n\n public shouldHideButton(button: CrudOverviewButtonConfig): boolean {\n if (this.data.grid?.api?.getSelectedRows()?.length !== 0) {\n this.hideButtons[button.title] = (button.onlyEnabledOnSingleRowSelection && this.selectedNodes > 1) || !this.hasClickEvent(button);\n }\n\n return this.hideButtons[button.title];\n }\n\n public toggleShowOnlySelected(checked: boolean): void {\n this.data.config.onlyShowSelected = checked;\n if (this.data.config.gridOptions.rowModelType === 'serverSide') {\n this.data.grid.api.onFilterChanged();\n } else {\n const data = AssertionUtils.isNullOrUndefined(this.data.config.rowData) ? this.data.config.gridOptions.rowData : this.data.config.rowData;\n checked ? this.data.grid.api.setGridOption('rowData', this.data.grid?.api?.getSelectedRows()) : this.data.grid.api.setGridOption('rowData', data);\n }\n }\n\n public deselect(): void {\n this.data.grid?.api.deselectAll();\n this.toggleShowOnlySelected(false);\n\n this.dialogRef.close();\n }\n}\n","import {ChangeDetectorRef, Component, Input, OnDestroy, OnInit} from '@angular/core';\nimport {debounceTime, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {DialogBuilder} from '../../../dialogs/dialog-builder/dialog-builder';\nimport {DialogBuilderFactoryService} from '../../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {ArrowPosition} from '../../../dialogs/dialog-reposition/arrow-position.enum';\nimport {ContentSwitcherDialogService} from '../../content-switcher/content-switcher-dialog.service';\nimport {GridSelectionOptionsComponent} from '../../grid-selection-options/grid-selection-options.component';\nimport {NavigationHelperPrototypeService} from '../../navigation-helper-prototype/navigation-helper-prototype.service';\nimport {CrudGridContextService} from '../crud-grid-context-service/crud-grid.context.service';\nimport {CrudOverviewDataConfig} from '../interfaces/crud-overview-data-config.interface';\n\n@Component({\n selector: 'vdw-crud-overview-data-page',\n templateUrl: './crud-overview-data-page.component.html',\n styleUrls: ['./crud-overview-data-page.component.scss']\n})\nexport class CrudOverviewDataPageComponent extends BaseComponent implements OnInit, OnDestroy {\n @Input() public config: CrudOverviewDataConfig = {};\n @Input() public canShowActions = true;\n\n protected showCustomSettingsButton: boolean = false;\n\n private gridRect: DOMRect;\n private selectedItemCount = 0;\n private selectOptionsOpen = false;\n private dialogBuilder: DialogBuilder;\n private readonly DIALOG_VERTICAL_OFFSET = 28;\n\n public constructor(\n private readonly context: CrudGridContextService,\n private readonly changeDetector: ChangeDetectorRef,\n private readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly dialogBuilderFactory: DialogBuilderFactoryService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.showCustomSettingsButton = !AssertionUtils.isNullOrUndefined(this.config.withCustomSettingsClicked);\n\n this.dialogBuilder = this.dialogBuilderFactory.getBuilder();\n this.config.dataObservable?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((data: T[]) => (this.config.rowData = data));\n\n this.context.gridReady.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => this.handleSelectionDialog());\n }\n\n private handleSelectionDialog(): void {\n this.context.grid?.rowSelected?.pipe(takeUntil(this.unSubscribeOnViewDestroy), debounceTime(0)).subscribe(() => {\n setTimeout(() => {\n if (!AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog) || this.navigationHelper.contentSwitcherDialogActive()) {\n return;\n }\n\n this.gridRect = this.context.gridContainer.nativeElement.getBoundingClientRect();\n this.selectedItemCount = this.context.grid.api.getSelectedRows()?.length ?? 0;\n const top = this.gridRect.top - this.DIALOG_VERTICAL_OFFSET;\n\n if (this.config.onlyShowSelected) {\n this.setOnlyShowSelectedToggle(this.selectedItemCount > 0);\n }\n\n if (this.selectedItemCount !== 0 && !this.selectOptionsOpen) {\n this.selectOptionsOpen = true;\n this.dialogBuilder\n .withoutBackdrop()\n .withAutoWidth()\n .withRefData({grid: this.context.grid, config: this.config})\n .openAtPosition(this.gridRect.left, top, ArrowPosition.LEFT, GridSelectionOptionsComponent, {}, this.changeDetector, false)\n .subscribe();\n } else if (this.selectedItemCount === 0) {\n this.dialogBuilder.close();\n this.selectOptionsOpen = false;\n }\n });\n });\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.dialogBuilder?.close();\n }\n\n private setOnlyShowSelectedToggle(hasSelectedItems: boolean): void {\n this.config.onlyShowSelected = hasSelectedItems;\n if (this.config.gridOptions.rowModelType === 'serverSide') {\n this.context.grid.api.onFilterChanged();\n } else {\n const data = AssertionUtils.isNullOrUndefined(this.config.rowData) ? this.config.gridOptions.rowData : this.config.rowData;\n hasSelectedItems ? this.context.grid.api.setGridOption('rowData', this.context.grid?.api?.getSelectedRows()) : this.context.grid.api.setGridOption('rowData', data);\n }\n }\n}\n","\n","\n \n {{ inputLabel }}\n ({{ 'ANGULAR_COMPONENT_LIBRARY.DATEPICKER_FORM.OPTIONAL' | bmsTranslate | lowercase }})\n \n \n \n ({{ hint }})\n \n \n \n\n \n {{ 'ANGULAR_COMPONENT_LIBRARY.DATEPICKER_FORM.REQUIRED' | bmsTranslate }}\n \n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.DATEPICKER_FORM.INVALID_FORMAT' | bmsTranslate }}\n \n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.DATEPICKER_FORM.MIN_VALUE' | bmsTranslate: {min: minValue | DateTime: 'DATE_SHORT'} }}\n \n \n \n {{ 'ANGULAR_COMPONENT_LIBRARY.DATEPICKER_FORM.MAX_VALUE' | bmsTranslate: {max: maxValue | DateTime: 'DATE_SHORT} }}\n \n \n\n \n \n \n \n \n \n \n\n","import {AfterViewInit, Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {MatButton} from '@angular/material/button';\nimport {MatDatepicker, MatDatepickerInputEvent} from '@angular/material/datepicker';\nimport {DateTime} from 'luxon';\nimport {takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {canShowErrorForErrorCodeAndFormControlForFormGroup} from '../../common/validators/can-show-error-for-error-code-and-form-control-for-form-group';\nimport {DatepickerHeaderComponent} from '../datepicker/datepicker-header/datepicker-header.component';\n\n@Component({\n selector: 'vdw-datepicker-form-input',\n templateUrl: './datepicker-form-input.component.html'\n})\nexport class DatepickerFormInputComponent extends BaseComponent implements AfterViewInit {\n @Input() public inputLabel: string;\n @Input() public form: UntypedFormGroup;\n @Input() public formControlNameValue: string;\n @Input() public minValue: DateTime = null;\n @Input() public maxValue: DateTime = null;\n @Input() public value: DateTime = DateTime.now();\n @Input() public showHint = false;\n @Input() public hint: string;\n @Input() public placeholder: string;\n @Input() public optional = false;\n @Input() public canShowBMSTheme = false;\n @Output() public dateChange: EventEmitter> = new EventEmitter>();\n\n public readonly datepickerHeader = DatepickerHeaderComponent;\n\n @ViewChild('datePicker')\n public datePicker: MatDatepicker;\n\n @ViewChild('applyButton')\n public applyButton: MatButton;\n\n private dayClickListeners: (() => void)[] = [];\n private monthNavClickListeners: (() => void)[] = [];\n\n public ngAfterViewInit(): void {\n this.datePicker?.openedStream?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.addDayClickedEvents();\n this.addMonthNavigationEvents();\n });\n }\n\n public onMonthSelected(): void {\n this.addDayClickedEvents();\n }\n\n public onDateChange(event: MatDatepickerInputEvent): void {\n this.dateChange.emit(event);\n this.removeDayClickListeners();\n this.removeMonthNavClickListeners();\n }\n\n public clear(): void {\n this.form.get(this.formControlNameValue).setValue(null);\n this.datePicker.close();\n }\n\n public today(): void {\n this.form.get(this.formControlNameValue).setValue(DateTime.now().startOf('day'));\n this.datePicker.close();\n }\n\n public canShowRequiredError(): boolean {\n return (\n canShowErrorForErrorCodeAndFormControlForFormGroup('required', this.formControlNameValue, this.form) &&\n !canShowErrorForErrorCodeAndFormControlForFormGroup('matDatepickerParse', this.formControlNameValue, this.form)\n );\n }\n\n public canShowClearInputButton(): boolean {\n return (\n this.canShowBMSTheme &&\n !this.form.get(this.formControlNameValue).disabled &&\n (!AssertionUtils.isNullOrUndefined(this.form.get(this.formControlNameValue).value) ||\n canShowErrorForErrorCodeAndFormControlForFormGroup('matDatepickerParse', this.formControlNameValue, this.form))\n );\n }\n\n private addDayClickedEvents(): void {\n setTimeout(() => {\n const cells = document.querySelectorAll('.mat-calendar-body-cell');\n cells.forEach((cell: HTMLElement) => {\n const listener = this.onDateCellClick.bind(this);\n cell.addEventListener('click', listener);\n this.dayClickListeners.push(() => cell.removeEventListener('click', listener));\n });\n }, 100);\n }\n\n private onDateCellClick(): void {\n this.applyButton._elementRef.nativeElement.click();\n this.removeDayClickListeners();\n this.removeMonthNavClickListeners();\n }\n\n private addMonthNavigationEvents(): void {\n setTimeout(() => {\n const monthNavigationButtons = document.getElementsByClassName('mdc-icon-button');\n const monthNavigationButtonsArray = Array.from(monthNavigationButtons) as HTMLElement[];\n monthNavigationButtonsArray.forEach((button: HTMLElement) => {\n const listener = this.onMonthNavigationClick.bind(this);\n button.addEventListener('click', listener);\n this.monthNavClickListeners.push(() => button.removeEventListener('click', listener));\n });\n });\n }\n\n private onMonthNavigationClick(): void {\n this.addDayClickedEvents();\n }\n\n private removeDayClickListeners(): void {\n this.dayClickListeners.forEach((removeListener: () => void) => removeListener());\n this.dayClickListeners = [];\n }\n\n private removeMonthNavClickListeners(): void {\n this.monthNavClickListeners.forEach((removeListener: () => void) => removeListener());\n this.monthNavClickListeners = [];\n }\n}\n","import {AfterViewInit, Component, Input, Output, ViewChild} from '@angular/core';\nimport {FormControl, FormGroup} from '@angular/forms';\nimport {MatDatepicker} from '@angular/material/datepicker';\nimport {DateTime} from 'luxon';\nimport {debounceTime, map, startWith, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {DatepickerHeaderComponent} from '../datepicker-header/datepicker-header.component';\n\n@Component({\n selector: 'vdw-date-range-picker',\n templateUrl: './date-range-picker.component.html',\n styleUrls: ['./date-range-picker.component.scss']\n})\nexport class DateRangePickerComponent extends BaseComponent implements AfterViewInit {\n public readonly DATE_PICKER_HEADER = DatepickerHeaderComponent;\n\n @Input()\n public standardRange = 4;\n\n public readonly dateSelectForm = new FormGroup({\n startDate: new FormControl(DateTime.now()),\n endDate: new FormControl(DateTime.now().plus({days: this.standardRange}))\n });\n\n @Output()\n public readonly dateRangeChanged = this.dateSelectForm.valueChanges.pipe(\n startWith(undefined),\n takeUntil(this.unSubscribeOnViewDestroy),\n debounceTime(100),\n map(() => this.dateSelectForm.value)\n );\n\n @ViewChild('datePicker')\n public datePicker: MatDatepicker;\n\n public get startDate(): DateTime {\n return this.dateSelectForm.controls.startDate.value;\n }\n\n public get endDate(): DateTime {\n return this.dateSelectForm.controls.endDate.value;\n }\n\n public ngAfterViewInit(): void {\n this.datePicker.closedStream.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n const startDateForm = this.dateSelectForm.controls.startDate;\n const endDateForm = this.dateSelectForm.controls.endDate;\n if (AssertionUtils.isNullOrUndefined(endDateForm.value)) {\n endDateForm.setValue(startDateForm.value);\n }\n });\n }\n\n public goForwards(): void {\n this.moveRangeByDays(1);\n }\n\n public goBackwards(): void {\n this.moveRangeByDays(-1);\n }\n\n public clear(): void {\n this.dateSelectForm.controls.startDate.setValue(null);\n this.dateSelectForm.controls.endDate.setValue(null);\n this.datePicker.close();\n }\n\n public today(): void {\n this.dateSelectForm.controls.startDate.setValue(DateTime.now());\n this.dateSelectForm.controls.endDate.setValue(DateTime.now());\n this.datePicker.close();\n }\n\n private moveRangeByDays(amount: number): void {\n const startDateForm = this.dateSelectForm.controls.startDate;\n const endDateForm = this.dateSelectForm.controls.endDate;\n startDateForm.setValue(startDateForm.value.plus({days: amount}));\n endDateForm.setValue(endDateForm.value.plus({days: amount}));\n }\n}\n","
\n \n\n \n \n \n \n \n\n
{{ startDate | DateTime: 'DATE_SHORT' }} - {{ endDate || startDate | DateTime: 'DATE_SHORT' }}
\n\n \n \n \n\n \n \n \n \n \n \n
\n\n \n
\n","import {ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS, MatDateFormats} from '@angular/material/core';\nimport {MatCalendar, MatCalendarHeader, MatDatepickerIntl} from '@angular/material/datepicker';\nimport {isEqual} from 'lodash-es';\nimport {DateTimeFormat} from '../../../common/datetime-format.enum';\nimport {DateTimePipe} from '../../../custom-pipes/date-time-pipe/date-time.pipe';\n\n@Component({\n templateUrl: './datepicker-header.component.html',\n styleUrls: ['./datepicker-header.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerHeaderComponent extends MatCalendarHeader {\n public constructor(\n private readonly dateTimePipe: DateTimePipe,\n intl: MatDatepickerIntl,\n calendar: MatCalendar,\n dateAdapter: DateAdapter,\n @Inject(MAT_DATE_FORMATS) dateFormats: MatDateFormats,\n changeDetectorRef: ChangeDetectorRef\n ) {\n super(intl, calendar, dateAdapter, dateFormats, changeDetectorRef);\n }\n\n public get periodButtonText(): string {\n let result = super.periodButtonText;\n\n if (isEqual(this.calendar.currentView, 'month')) {\n result = this.dateTimePipe.transform(this.calendar.activeDate, DateTimeFormat.MONTH_YEAR);\n }\n\n return result;\n }\n}\n","
\n
\n
\n \n
\n
\n
\n \n \n
\n
\n
\n
\n","import {ComponentType} from '@angular/cdk/portal';\nimport {ChangeDetectorRef, Component, EventEmitter, Input, Output, ViewContainerRef} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {switchMap, takeUntil} from 'rxjs/operators';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {DialogBuilderFactoryService} from '../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {ArrowPosition} from '../../dialogs/dialog-reposition/arrow-position.enum';\nimport {DialogData} from './dialog-data.interface';\n\n@Component({\n selector: 'vdw-dialog-button',\n templateUrl: './dialog-button.component.html',\n styleUrls: ['./dialog-button.component.scss']\n})\nexport class DialogButtonComponent extends BaseComponent {\n @Input() public componentType: ComponentType>;\n @Input() public dialogData: any;\n\n @Input() public dialogClass: string | string[];\n @Input() public iconName = 'settings';\n @Input() public tooltip: string;\n @Input() public verticaloffset = 4;\n @Input() public horizontalOffset = 0;\n @Input() public dialogHeight: string;\n @Input() public showArrow: boolean = false;\n @Input() public align: 'left' | 'right' = 'right';\n @Input() public dialogAutoHeight: boolean = false;\n\n @Output() public dialogDataChanged = new EventEmitter();\n\n public open = false;\n\n public constructor(\n private readonly dialog: DialogBuilderFactoryService,\n private readonly viewContainerRef: ViewContainerRef,\n private readonly changeDetectorRef: ChangeDetectorRef\n ) {\n super();\n }\n\n public toggleDialog(): void {\n if (!this.open) {\n this.dialog\n .getBuilder()\n .withCustomBackdrop('transparent-backdrop')\n .withClass(\n AssertionUtils.isNullOrUndefined(this.dialogClass) ? ['icon-button-dialog-panel'] : ['icon-button-dialog-panel', ...(Array.isArray(this.dialogClass) ? this.dialogClass : [this.dialogClass])]\n )\n .withHeight(this.dialogHeight)\n .withAutoHeight(this.dialogAutoHeight)\n .withOnDialogOpened((dialogRef: MatDialogRef, any>) => this.subscribeToAfterOpened(dialogRef))\n .openAtElement(\n this.viewContainerRef.element.nativeElement,\n ArrowPosition.TOP,\n this.componentType,\n this.dialogData,\n this.changeDetectorRef,\n this.showArrow,\n this.align,\n this.verticaloffset,\n this.horizontalOffset\n )\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.open = false));\n }\n\n this.open = !this.open;\n }\n\n private subscribeToAfterOpened(dialogRef: MatDialogRef, any>): void {\n dialogRef\n .afterOpened()\n .pipe(\n switchMap(() => dialogRef.componentInstance.getValue()),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((dialogData: T) => this.dialogDataChanged.next(dialogData));\n }\n}\n","\n","import {ChangeDetectionStrategy, Component, input, output} from '@angular/core';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\n\r\n@Component({\r\n selector: 'vdw-dialog-header',\r\n templateUrl: './dialog-header.component.html',\r\n styleUrls: ['./dialog-header.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [MatIconModule, MatButtonModule, MatTooltipModule]\r\n})\r\nexport class DialogHeaderComponent {\r\n public title = input.required();\r\n public backEvent = output();\r\n}\r\n","
\r\n \r\n

{{ title() }}

\r\n
\r\n","export enum DistanceSpecifierOrientation {\n HORIZONTAL = 'horizontal',\n VERTICAL = 'vertical'\n}\n","import {Component, Input} from '@angular/core';\nimport {L10nIntlService} from 'angular-l10n';\nimport {convertCommercialUnit} from '../../common/converters/convert-commercial-unit';\nimport {convertUnit} from '../../common/converters/convert-unit';\nimport {Unit} from '../../common/unit.enum';\nimport {TranslateService} from '../../translation/translate.service';\nimport {DistanceSpecifierOrientation} from './distance-specifier-orientation.enum';\n\n@Component({\n selector: 'vdw-distance-specifier',\n templateUrl: './distance-specifier.component.html',\n styleUrls: ['./distance-specifier.component.scss']\n})\nexport class DistanceSpecifierComponent {\n @Input() public containerWidthInPx: number = 300;\n @Input() public commercialDistanceInMM: number = 0;\n @Input() public technicalDistance: number = 0;\n @Input() public orientation: DistanceSpecifierOrientation = DistanceSpecifierOrientation.HORIZONTAL;\n\n private readonly MIN_WIDTH_TO_SHOW_LABEL_NAMES = 150;\n private readonly MIN_WIDTH_TO_SHOW_LABEL = 100;\n private readonly MIN_WIDTH_TO_SHOW = 15;\n\n public constructor(\n private readonly l10nIntlService: L10nIntlService,\n private readonly translate: TranslateService\n ) {}\n\n public getDistanceSpecifierLabel(): string {\n const isHorizontalOrientation = this.orientation === DistanceSpecifierOrientation.HORIZONTAL;\n\n const picksTranslation = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.DISTANCE_SPECIFIER.UNIT.PICKS');\n const dentsTranslation = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.DISTANCE_SPECIFIER.UNIT.DENTS');\n\n const distanceInTechnicalUnit = `${this.technicalDistance} ${isHorizontalOrientation ? dentsTranslation : picksTranslation}`;\n const distanceInCommercialUnit = this.convertValueToCommercialUnit(this.commercialDistanceInMM, Unit.MILLIMETER, Unit.CENTIMETER);\n\n if (this.containerWidthInPx >= this.MIN_WIDTH_TO_SHOW_LABEL_NAMES) {\n return `${distanceInTechnicalUnit} / ${distanceInCommercialUnit}`;\n } else {\n return `${this.technicalDistance} / ${convertCommercialUnit({\n from: {unit: Unit.MILLIMETER, value: this.commercialDistanceInMM},\n to: Unit.CENTIMETER\n })}`;\n }\n }\n\n public getDistanceSpecifierTooltip(): string {\n return this.canShowLabel() ? '' : this.getDistanceSpecifierLabel();\n }\n\n public hasVerticalOrientation(): boolean {\n return this.orientation === DistanceSpecifierOrientation.VERTICAL;\n }\n\n public canShow(): boolean {\n return this.containerWidthInPx >= this.MIN_WIDTH_TO_SHOW;\n }\n\n public canShowLabel(): boolean {\n return this.containerWidthInPx >= this.MIN_WIDTH_TO_SHOW_LABEL;\n }\n\n private convertValueToCommercialUnit(value: number, fromUnit: Unit, toUnit: Unit): string {\n const convertedValue = convertUnit({\n from: {\n value: value,\n unit: fromUnit\n },\n to: toUnit\n });\n\n const formattedNumber = Math.ceil(convertedValue);\n const unit = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.DISTANCE_SPECIFIER.UNIT.CENTIMETER');\n\n return `${formattedNumber} ${unit}`;\n }\n}\n","\n
\n \n \n \n
\n\n {{ getDistanceSpecifierLabel() }}\n\n
\n \n \n \n
\n\n","import {CdkDropList} from '@angular/cdk/drag-drop';\nimport {Injectable} from '@angular/core';\nimport {combineLatest, debounceTime, distinctUntilChanged, map, Observable, of, Subject, tap} from 'rxjs';\nimport {AssertionUtils} from '../../../../common/utils/assertion-utils';\nimport {CdkDraggableDropListEntry} from '../cdk-drop-list-interfaces/cdk-draggable-drop-list-entry';\nimport {CdkDraggableListEntryDraggedData} from '../cdk-drop-list-interfaces/cdk-draggable-list-entry-dragged-data';\nimport {DraggableDropListComparator} from './../../shared-logic/draggable-drop-list-comparator.enum';\n\n@Injectable()\nexport class CdkDragDropHelperService {\n public maxNestedDepth: number = null;\n public draggedElement: CdkDraggableListEntryDraggedData;\n\n public readonly DEFAULT_MAX_NESTED_DEPTH = 6;\n\n private generalDropLists: CdkDropList[] = [];\n private cachedEntries: CdkDraggableDropListEntry[];\n private dropListById: {[id: number]: CdkDropList} = {};\n private _cachedDropList: CdkDropList[] = [];\n\n private readonly dropListsChangedSubject = new Subject();\n\n public get cachedDropList(): CdkDropList[] {\n return this._cachedDropList;\n }\n\n public register(id: number, dropList: CdkDropList): void {\n if (dropList) {\n this.dropListById[id] = dropList;\n this.dropListsChangedSubject.next(null);\n }\n }\n\n public registerGeneralList(dropList: CdkDropList): void {\n if (dropList) {\n this.generalDropLists.push(dropList);\n this.dropListsChangedSubject.next(null);\n }\n }\n\n public getNestedChildEntries(entry: CdkDraggableDropListEntry): CdkDraggableDropListEntry[] {\n const nestedEntries: CdkDraggableDropListEntry[] = [];\n\n nestedEntries.push(entry);\n\n if (!AssertionUtils.isEmpty(entry.childEntries)) {\n nestedEntries.push(...entry.childEntries.flatMap((nestedEntry: CdkDraggableDropListEntry) => this.getNestedChildEntries(nestedEntry)));\n }\n\n return nestedEntries;\n }\n\n public findParentEntry(group: CdkDraggableDropListEntry, comparator: DraggableDropListComparator = DraggableDropListComparator.ID): CdkDraggableDropListEntry {\n return this.cachedEntries\n ?.map((groupEntry: CdkDraggableDropListEntry) => this.getParentOfChildEntry(groupEntry, group, comparator))\n ?.find((groupEntry: CdkDraggableDropListEntry) => !AssertionUtils.isNullOrUndefined(groupEntry));\n }\n\n public moveEntryToRoot(group: CdkDraggableDropListEntry, comparator: DraggableDropListComparator = DraggableDropListComparator.ID): void {\n const parentGroup = this.findParentEntry(group, comparator);\n\n if (AssertionUtils.isNullOrUndefined(parentGroup)) {\n return;\n }\n\n parentGroup.childEntries = parentGroup.childEntries.filter((groupEntry: CdkDraggableDropListEntry) => groupEntry.id !== group.id);\n this.cachedEntries.push(group);\n }\n\n public getLinkedDropLists(entries: CdkDraggableDropListEntry[]): Observable {\n if (!AssertionUtils.isNullOrUndefined(entries)) {\n this.cachedEntries = entries;\n } else {\n entries = this.cachedEntries;\n }\n\n const maxNestedDepth = this.maxNestedDepth ?? this.DEFAULT_MAX_NESTED_DEPTH;\n\n return combineLatest([this.dropListsChangedSubject.asObservable(), of(entries)]).pipe(\n debounceTime(20),\n map(([, rootEntries]: [void, CdkDraggableDropListEntry[]]) => rootEntries),\n map((rootEntry: CdkDraggableDropListEntry[]) => this.levelOrderFlattenEntries(rootEntry).reverse()),\n map((flattenedEntries: CdkDraggableDropListEntry[]) => [\n ...(flattenedEntries.map((flattenedEntry: CdkDraggableDropListEntry) => this.dropListById[flattenedEntry.id]) || []).flat(maxNestedDepth),\n ...(this.generalDropLists || [])\n ]),\n distinctUntilChanged(),\n tap((droplist: CdkDropList[]) => (this._cachedDropList = droplist))\n );\n }\n\n public getNestedDepth(entry: CdkDraggableDropListEntry): number {\n if (AssertionUtils.isEmpty(this.cachedEntries)) {\n return null;\n }\n\n const root = {id: -1, childEntries: this.cachedEntries} as CdkDraggableDropListEntry;\n\n let depthStep = 0;\n let currentEntries = [root];\n\n while (currentEntries?.length ?? false) {\n const childEntries = currentEntries.flatMap((currentEntry: CdkDraggableDropListEntry) => currentEntry.childEntries);\n const foundMatch = childEntries.find((childEntry: CdkDraggableDropListEntry) => childEntry.id === entry?.id);\n\n if (!AssertionUtils.isNullOrUndefined(foundMatch)) {\n return depthStep;\n }\n\n depthStep++;\n currentEntries = childEntries?.flatMap((currentEntry: CdkDraggableDropListEntry) => currentEntry) ?? [];\n }\n }\n\n private levelOrderFlattenEntries(entries: CdkDraggableDropListEntry[], parentGroup?: CdkDraggableDropListEntry): CdkDraggableDropListEntry[] {\n const levelOrderGroups = [];\n const root = AssertionUtils.isNullOrUndefined(parentGroup) ? ({id: -1, childEntries: entries} as CdkDraggableDropListEntry) : parentGroup;\n\n const queue = [root];\n while (queue.length) {\n const group = queue.shift();\n levelOrderGroups.push(group);\n\n queue.push(...group.childEntries);\n }\n\n return levelOrderGroups.filter((group: CdkDraggableDropListEntry) => group.id !== -1);\n }\n\n private getParentOfChildEntry(\n startGroup: CdkDraggableDropListEntry,\n childGroup: CdkDraggableDropListEntry,\n comparator: DraggableDropListComparator\n ): CdkDraggableDropListEntry {\n if (startGroup.childEntries?.find((group: CdkDraggableDropListEntry) => this.getPredicate(group, childGroup, comparator))) {\n return startGroup;\n }\n\n return startGroup.childEntries\n ?.map((group: CdkDraggableDropListEntry) => this.getParentOfChildEntry(group, childGroup, comparator))\n ?.find((group: CdkDraggableDropListEntry) => !AssertionUtils.isNullOrUndefined(group));\n }\n\n private getPredicate(group: CdkDraggableDropListEntry, childGroup: CdkDraggableDropListEntry, comparator: DraggableDropListComparator): boolean {\n switch (comparator) {\n case DraggableDropListComparator.ID:\n return childGroup.id === group.id;\n case DraggableDropListComparator.NAME:\n return childGroup.name === group.name;\n default:\n return childGroup.id === group.id;\n }\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\nimport {CdkDraggableDropListComponent} from './cdk-draggable-drop-list/cdk-draggable-drop-list.component';\n\n@Directive({\n selector: '[vdwCdkDragPreviewContent]'\n})\nexport class CdkDragPreviewContentDirective {\n public constructor(\n template: TemplateRef,\n private readonly dropList: CdkDraggableDropListComponent\n ) {\n this.dropList.dragPreviewContent = template;\n }\n}\n","\n
\n \n
\n\n \n \n
\n \n
\n
\n \n\n
\n \n
\n\n","import {CdkDragDrop, CdkDropList} from '@angular/cdk/drag-drop';\nimport {AfterViewInit, Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {AssertionUtils} from '../../../../common/utils/assertion-utils';\nimport {CdkDragDropHelperService} from '../cdk-drag-drop-helper-service/cdk-drag-drop-helper.service';\nimport {CdkDraggableDropListEntry} from '../cdk-drop-list-interfaces/cdk-draggable-drop-list-entry';\nimport {CdkDraggableListEntryDroppedData} from '../cdk-drop-list-interfaces/cdk-draggable-list-entry-dropped-data';\n\n@Component({\n selector: 'vdw-cdk-draggable-drop-list',\n templateUrl: './cdk-draggable-drop-list.component.html',\n styleUrls: ['./cdk-draggable-drop-list.component.scss']\n})\nexport class CdkDraggableDropListComponent implements OnInit, AfterViewInit {\n @Input() public linkedDropLists: CdkDropList[];\n @Input() public dropListContent: TemplateRef;\n @Input() public dragPreviewContent: TemplateRef;\n @Input() public dropListEntry: CdkDraggableDropListEntry;\n\n @Output() public entryDropped = new EventEmitter>();\n\n @ViewChild(CdkDropList) private dropList: CdkDropList;\n\n private nestedDepth: number;\n\n public isExpanded: boolean;\n public calculatedDropAllowed: boolean;\n\n public get isEmpty(): boolean {\n return AssertionUtils.isEmpty(this.dropListEntry?.childEntries);\n }\n\n public constructor(protected readonly dragDropHelperService: CdkDragDropHelperService) {}\n\n public ngOnInit(): void {\n const nestedChildDepth = this.dragDropHelperService.getNestedDepth(this.dropListEntry);\n this.nestedDepth = AssertionUtils.isNullOrUndefined(nestedChildDepth) ? 1 : nestedChildDepth;\n this.calculatedDropAllowed = this.nestedDepth < (this.dragDropHelperService.maxNestedDepth ?? this.dragDropHelperService.DEFAULT_MAX_NESTED_DEPTH);\n }\n\n public ngAfterViewInit(): void {\n if (!AssertionUtils.isNullOrUndefined(this.dropListEntry) && !AssertionUtils.isNullOrUndefined(this.dropList)) {\n this.dragDropHelperService.register(this.dropListEntry.id, this.dropList);\n }\n }\n\n public dropped(event: CdkDragDrop>): void {\n if (!this.calculatedDropAllowed || !this.dropListEntry.dropAllowed) {\n return;\n }\n\n const oldGroup = event.previousContainer.data;\n const droppedEntry = this.dragDropHelperService.draggedElement?.draggedEntry;\n\n this.entryDropped.emit({draggedEntry: droppedEntry, oldGroup, newGroup: this.dropListEntry, event} as CdkDraggableListEntryDroppedData);\n }\n\n public dragStarted(): void {\n const nestedChildren = this.dragDropHelperService.getNestedChildEntries(this.dropListEntry);\n const nestedChildDepth = this.dragDropHelperService.getNestedDepth(nestedChildren[nestedChildren.length - 1]);\n\n this.dragDropHelperService.draggedElement = {draggedEntry: this.dropListEntry, relativeNestedDepth: nestedChildDepth - this.nestedDepth};\n }\n\n public dragEntered(): void {\n if (AssertionUtils.isNullOrUndefined(this.dragDropHelperService.draggedElement)) {\n return;\n }\n\n const absuluteNestedDepth = this.nestedDepth + this.dragDropHelperService.draggedElement.relativeNestedDepth;\n\n this.calculatedDropAllowed = absuluteNestedDepth < (this.dragDropHelperService.maxNestedDepth ?? this.dragDropHelperService.DEFAULT_MAX_NESTED_DEPTH);\n }\n\n public childEntryDropped(event: CdkDraggableListEntryDroppedData): void {\n this.entryDropped.emit(event);\n }\n}\n","import {Directive, TemplateRef} from '@angular/core';\nimport {CdkDraggableDropListComponent} from './cdk-draggable-drop-list/cdk-draggable-drop-list.component';\n\n@Directive({\n selector: '[vdwCdkDropListContent]'\n})\nexport class CdkDropListContentDirective {\n public constructor(\n template: TemplateRef,\n private readonly dropList: CdkDraggableDropListComponent\n ) {\n this.dropList.dropListContent = template;\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {UUID} from 'crypto';\nimport {AssertionUtils} from '../../../../common/utils/assertion-utils';\nimport {UuidUtils} from '../../../../common/utils/uuid-utils';\nimport {DndDragStartedData} from '../dnd-drop-list-interfaces/dnd-drag-started-data';\nimport {DndDraggableDropListEntry} from '../dnd-drop-list-interfaces/dnd-draggable-drop-list-entry';\nimport {DndEntryRemovedData} from '../dnd-drop-list-interfaces/dnd-entry-removed-data';\n\n@Injectable({providedIn: 'root'})\nexport class DndDragDropHelperService {\n public maxNestedDepth: number = null;\n public dragActive = false;\n public dragStarted = new EventEmitter();\n public dragEnded = new EventEmitter();\n public dragDrop = new EventEmitter();\n public entryRemoved = new EventEmitter();\n\n public readonly DEFAULT_MAX_NESTED_DEPTH = 6;\n\n public rootEntry: DndDraggableDropListEntry;\n private dataByKey: {[id: UUID]: any} = {};\n\n public assignData(data: T[], getChildren: (parent: T) => T[], isExpanded: boolean = true, isExpandedChildren: boolean = true, isDragDisabled: boolean = false): void {\n this.dataByKey = {};\n this.rootEntry = {\n key: '00000000-0000-0000-0000-000000000000',\n childEntries: data.map((item: T) => this.toDraggableDropListEntry(item, getChildren, isExpanded, isExpandedChildren, isDragDisabled))\n };\n }\n\n public getDataByKey(key: UUID): T {\n return this.dataByKey[key];\n }\n\n public getAllData(): T[] {\n return Object.values(this.dataByKey);\n }\n\n public findKeyForData(data: T): UUID {\n return Object.keys(this.dataByKey).find((key: UUID) => this.dataByKey[key] === data) as UUID;\n }\n\n public findDraggableDropListEntryByKey(key: UUID, parent?: DndDraggableDropListEntry): DndDraggableDropListEntry {\n parent ??= this.rootEntry;\n if (parent.key === key) {\n return parent;\n }\n\n for (const childEntry of parent.childEntries) {\n const entry = this.findDraggableDropListEntryByKey(key, childEntry);\n if (!AssertionUtils.isNullOrUndefined(entry)) {\n return entry;\n }\n }\n\n return null;\n }\n\n public findParentOfItemWithKey(key: UUID, parent?: DndDraggableDropListEntry): DndDraggableDropListEntry {\n parent ??= this.rootEntry;\n for (const childEntry of parent.childEntries) {\n if (childEntry.key === key) {\n return parent;\n }\n const foundParent = this.findParentOfItemWithKey(key, childEntry);\n if (!AssertionUtils.isNullOrUndefined(foundParent)) {\n return foundParent;\n }\n }\n return null;\n }\n\n public getNestedDepth(entry: DndDraggableDropListEntry): number {\n if (this.rootEntry.childEntries.includes(entry)) {\n return 0;\n }\n const parent = this.findParentOfItemWithKey(entry.key);\n if (AssertionUtils.isNullOrUndefined(parent)) {\n return -1;\n }\n return this.getNestedDepth(parent) + 1;\n }\n\n public toDraggableDropListEntry(\n item: T,\n getChildren: (parent: T) => T[],\n isExpanded: boolean = true,\n isExpandedChildren: boolean = true,\n isDragDisabled: boolean = false\n ): DndDraggableDropListEntry {\n const key = UuidUtils.generateV4Uuid() as UUID;\n this.dataByKey[key] = item;\n\n return {\n key,\n isExpanded: isExpanded,\n childEntries: getChildren(item).map((childItem: T) => this.toDraggableDropListEntry(childItem, getChildren, isExpandedChildren, isExpandedChildren, isDragDisabled)),\n isDragDisabled: isDragDisabled\n };\n }\n\n public fromDraggableDropListEntry(entry: DndDraggableDropListEntry, setChildren?: (parent: T, children: T[]) => void): T {\n const item = this.getDataByKey(entry.key);\n if (!AssertionUtils.isNullOrUndefined(setChildren)) {\n setChildren(\n item,\n entry.childEntries?.map((childEntry: DndDraggableDropListEntry) => this.fromDraggableDropListEntry(childEntry, setChildren))\n );\n }\n return item;\n }\n}\n","export enum DraggableDropListComparator {\n ID = 'id',\n NAME = 'name'\n}\n","\r\n \r\n
\r\n
\r\n

{{ ngControl.value?.name }}

\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{{ color?.name }}

\r\n
\r\n
\r\n
\r\n","import {Component, Input, OnDestroy, OnInit, Optional, Self, ViewChild} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatSelect} from '@angular/material/select';\nimport {convertRGBToHexadecimalColorCode} from '../../../common/converters/convert-color-representation';\nimport {Color} from '../../../common/data/color';\nimport {MatFormFieldControlHelper} from '../../helper/form-field-control-helper';\n\n@Component({\n selector: 'vdw-select-colors',\n templateUrl: './select-colors.component.html',\n styleUrls: ['./select-colors.component.scss'],\n providers: [{provide: MatFormFieldControl, useExisting: SelectColorsComponent}]\n})\nexport class SelectColorsComponent extends MatFormFieldControlHelper implements OnDestroy, OnInit {\n public static nextId = 0;\n @ViewChild(MatSelect, {static: true}) public formControl: MatSelect;\n @Input() public colors: Color[];\n\n public id = `vdw-select-colors-${SelectColorsComponent.nextId++}`;\n public controlType = 'mat-select';\n\n public constructor(@Optional() @Self() public ngControl: NgControl) {\n super(ngControl);\n }\n\n public ngOnInit(): void {\n super.init();\n }\n\n public ngOnDestroy(): void {\n super.destroy();\n }\n\n public compareColors(colorOption: Color, selectedColor: Color): boolean {\n return colorOption && selectedColor && colorOption.id === selectedColor.id;\n }\n\n public getPreviewColorCode(color: Color): string {\n if (color?.rgb) {\n return convertRGBToHexadecimalColorCode(color.rgb);\n }\n }\n}\n","\r\n \r\n
\r\n \r\n

{{ 'ANGULAR_COMPONENT_LIBRARY.SELECT_PATTERN.' + patternEnum[ngControl?.value] | bmsTranslate }}

\r\n
\r\n
\r\n \r\n
\r\n \r\n

{{ 'ANGULAR_COMPONENT_LIBRARY.SELECT_PATTERN.' + patternEnum[pattern] | bmsTranslate }}

\r\n
\r\n
\r\n
\r\n","import {Component, OnDestroy, OnInit, Optional, Self, ViewChild} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatSelect} from '@angular/material/select';\nimport {MatFormFieldControlHelper} from '../../helper/form-field-control-helper';\nimport {Pattern} from '../../pattern/pattern.enum';\n\n@Component({\n selector: 'vdw-select-patterns',\n templateUrl: './select-patterns.component.html',\n styleUrls: ['./select-patterns.component.scss'],\n providers: [{provide: MatFormFieldControl, useExisting: SelectPatternsComponent}]\n})\nexport class SelectPatternsComponent extends MatFormFieldControlHelper implements OnDestroy, OnInit {\n public static nextId = 0;\n @ViewChild(MatSelect, {static: true}) public formControl: MatSelect;\n public patterns: Pattern[] = [Pattern.NONE, Pattern.LINE, Pattern.STRIPED, Pattern.DOTTED, Pattern.DIAGONAL];\n public patternEnum: typeof Pattern = Pattern;\n\n public id = `vdw-select-patterns-${SelectPatternsComponent.nextId++}`;\n public controlType = 'mat-select';\n\n public constructor(@Optional() @Self() public ngControl: NgControl) {\n super(ngControl);\n }\n\n public ngOnInit(): void {\n super.init();\n }\n\n public ngOnDestroy(): void {\n super.destroy();\n }\n}\n","\n @if (canShowExtraActions) {\n \n @if (canShowDuplicate && !isCreateNewPage) {\n \n }\n @if (canShowDelete && !isCreateNewPage) {\n \n }\n @if (!isCreateNewPage) {\n @for (extraAction of customExtraActions; track $index) {\n \n }\n }\n \n }\n\n \n\n \n \n \n \n \n \n \n \n\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {LocalStorageService} from '../../custom-services/local-storage.service/local-storage.service';\nimport {HeaderAction} from '../header/header-action';\nimport {SaveType} from '../header/save-type.enum';\nimport {TabsMenuItem} from '../tabs-menu/tabs-menu-item';\n\n@Component({\n selector: 'vdw-editor-header',\n templateUrl: './editor-header.component.html',\n styleUrls: ['./editor-header.component.scss']\n})\nexport class EditorHeaderComponent implements OnInit, OnChanges {\n @Input() public menuItems: TabsMenuItem[];\n @Input() public selectedMenuItem: TabsMenuItem;\n @Input() public identifier: string;\n @Input() public canShowCancel = true;\n @Input() public canShowSave = true;\n @Input() public canShowSaveAndClose = true;\n @Input() public canShowSaveAndCreateNew = true;\n @Input() public canShowDuplicate = true;\n @Input() public canShowDelete = true;\n @Input() public canShowSettings = true;\n @Input() public actionText = 'ANGULAR_COMPONENT_LIBRARY.HEADER.SAVE';\n @Input() public customExtraActions: HeaderAction[];\n @Input() public isCreateNewPage = false;\n @Input() public inProgress = false;\n @Input() public disableSaveButton = false;\n @Input() public disableDeleteButton = false;\n @Input() public extraPadding = true;\n @Output() public selectedMenuItemChange = new EventEmitter();\n @Output() public saveEvent = new EventEmitter();\n @Output() public saveAndCloseEvent = new EventEmitter();\n @Output() public saveAndCreateNewEvent = new EventEmitter();\n @Output() public duplicateEvent = new EventEmitter();\n @Output() public deleteEvent = new EventEmitter();\n @Output() public settingsEvent = new EventEmitter();\n @Output() public cancelEvent = new EventEmitter();\n\n public canShowExtraActions = false;\n public defaultSaveType: SaveType;\n public readonly SAVE = SaveType.SAVE;\n public readonly SAVE_AND_CLOSE = SaveType.SAVE_AND_CLOSE;\n public readonly SAVE_AND_CREATE_NEW = SaveType.SAVE_AND_CREATE_NEW;\n private readonly LOCAL_STORAGE_KEY = 'saveType';\n\n public constructor(private readonly localStorage: LocalStorageService) {}\n\n public ngOnInit(): void {\n this.setDefaultSaveType(this.identifier);\n this.canShowExtraActions = this.getShowExtraActions();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (!AssertionUtils.isNullOrUndefined(changes.identifier) && !changes.identifier.isFirstChange()) {\n this.setDefaultSaveType(changes.identifier.currentValue);\n }\n }\n\n public getSaveButtonTranslationKey(): string {\n switch (this.defaultSaveType) {\n case SaveType.SAVE_AND_CLOSE:\n return 'ANGULAR_COMPONENT_LIBRARY.HEADER.ACTION_AND_CLOSE';\n case SaveType.SAVE_AND_CREATE_NEW:\n return 'ANGULAR_COMPONENT_LIBRARY.HEADER.ACTION_AND_CREATE_NEW';\n default:\n return this.actionText;\n }\n }\n\n public canShowSaveMenuButton(): boolean {\n return this.canShowSave && this.defaultSaveType !== SaveType.SAVE;\n }\n\n public canShowSaveAndCloseMenuButton(): boolean {\n return this.canShowSaveAndClose && this.defaultSaveType !== SaveType.SAVE_AND_CLOSE;\n }\n\n public canShowSaveAndCreateNewMenuButton(): boolean {\n return this.canShowSaveAndCreateNew && this.defaultSaveType !== SaveType.SAVE_AND_CREATE_NEW;\n }\n\n public canShowSplitButton(): boolean {\n return this.canShowSaveMenuButton() || this.canShowSaveAndCloseMenuButton() || this.canShowSaveAndCreateNewMenuButton();\n }\n\n private getShowExtraActions(): boolean {\n return this.canShowSettings || ((this.canShowDuplicate || this.canShowDelete || this.customExtraActions?.length > 0) && !this.isCreateNewPage);\n }\n\n public save(saveType: SaveType): void {\n if (this.identifier) {\n this.defaultSaveType = saveType;\n this.localStorage.set(`${this.LOCAL_STORAGE_KEY}.${this.identifier}`, this.defaultSaveType);\n }\n\n if (saveType === SaveType.SAVE) {\n this.saveEvent.emit();\n } else if (saveType === SaveType.SAVE_AND_CLOSE) {\n this.saveAndCloseEvent.emit();\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.saveAndCreateNewEvent.emit();\n }\n }\n\n private setDefaultSaveType(identifier: string): void {\n const defaultSaveType = this.localStorage.get(`${this.LOCAL_STORAGE_KEY}.${identifier}`);\n\n if (!AssertionUtils.isNullOrUndefined(identifier) && this.isSaveTypeButtonAvailable(defaultSaveType)) {\n this.defaultSaveType = defaultSaveType;\n } else if (this.canShowSave) {\n this.defaultSaveType = SaveType.SAVE;\n } else if (this.canShowSaveAndClose) {\n this.defaultSaveType = SaveType.SAVE_AND_CLOSE;\n } else if (this.canShowSaveAndCreateNew) {\n this.defaultSaveType = SaveType.SAVE_AND_CREATE_NEW;\n }\n }\n\n private isSaveTypeButtonAvailable(saveType: SaveType): boolean {\n switch (saveType) {\n case SaveType.SAVE:\n return this.canShowSave;\n case SaveType.SAVE_AND_CLOSE:\n return this.canShowSaveAndClose;\n case SaveType.SAVE_AND_CREATE_NEW:\n return this.canShowSaveAndCreateNew;\n default:\n return false;\n }\n }\n}\n","\n \n \n \n \n {{ text }}\n \n

\n","import {AfterContentInit, AfterViewInit, Component, ElementRef, Input, OnDestroy, ViewChild} from '@angular/core';\nimport {MatTooltip, TooltipPosition} from '@angular/material/tooltip';\nimport {isUndefined} from 'lodash-es';\n\n@Component({\n selector: 'vdw-ellipsis-label, [vdw-ellipsis-label]',\n templateUrl: './ellipsis-label.component.html',\n styleUrls: ['./ellipsis-label.component.scss']\n})\nexport class EllipsisLabelComponent implements AfterViewInit, AfterContentInit, OnDestroy {\n @Input() public text: string;\n @Input() public tooltipClasses: string[] = [];\n @Input() public matTooltipPosition: TooltipPosition = 'below';\n @Input() public tooltipDisabled = false;\n @Input() public hasContent = false;\n @ViewChild('label') public label: ElementRef;\n @ViewChild('ellipsisTooltip') public ellipsisTooltip: MatTooltip;\n public showTooltip = false;\n\n private resizeObserver: ResizeObserver;\n private mutationObserver: MutationObserver;\n\n public get tooltipClass(): string {\n return this.tooltipClasses.join(' ');\n }\n\n public ngAfterViewInit(): void {\n this.observeResize();\n this.observeMutation();\n }\n\n public ngAfterContentInit(): void {\n this.showTooltip = this.canShowTooltip();\n }\n\n public ngOnDestroy(): void {\n this.resizeObserver?.unobserve(this.label.nativeElement);\n this.mutationObserver?.disconnect();\n }\n\n private observeResize(): void {\n this.resizeObserver = new ResizeObserver(() => {\n this.showTooltip = this.canShowTooltip();\n });\n this.resizeObserver.observe(this.label.nativeElement, {box: 'border-box'});\n }\n\n private observeMutation(): void {\n this.mutationObserver = new MutationObserver(() => {\n this.showTooltip = this.canShowTooltip();\n });\n this.mutationObserver.observe(this.label.nativeElement, {characterData: true, attributes: true, childList: true, subtree: true});\n }\n\n private canShowTooltip(): boolean {\n if (this.tooltipDisabled || isUndefined(this.label)) {\n return false;\n }\n\n const labelElement = this.label.nativeElement;\n\n return labelElement.scrollWidth > labelElement.clientWidth;\n }\n}\n","
\r\n \r\n
\r\n\r\n","import {Component, ContentChild, EventEmitter, Input, Output, TemplateRef} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'vdw-multi-line-drag',\r\n templateUrl: './multi-line-drag.component.html'\r\n})\r\nexport class MultiLineDragComponent {\r\n @Input() public items: any[] = [];\r\n @Output() public itemsChange = new EventEmitter();\r\n @Input() public draggable = true;\r\n @ContentChild(TemplateRef) public customTemplateRef: TemplateRef;\r\n\r\n private _draggedElement: any;\r\n\r\n public startDrag(item: HTMLElement): void {\r\n this._draggedElement = item;\r\n }\r\n\r\n public endDrag(event: DragEvent, item: HTMLElement): void {\r\n event.preventDefault();\r\n\r\n let sourceIndex = this.items.indexOf(this._draggedElement);\r\n let targetIndex = this.items.indexOf(item);\r\n\r\n if (sourceIndex < 0 || targetIndex < 0) {\r\n return;\r\n }\r\n\r\n const [removed] = this.items.splice(sourceIndex, 1);\r\n this.items.splice(targetIndex, 0, removed);\r\n this.itemsChange.emit(this.items);\r\n }\r\n\r\n public allowDrop(event: DragEvent): void {\r\n event.preventDefault();\r\n }\r\n}\r\n","\n \n
\n \n
\n
\n 0\"\n [class.error-quantity]=\"canShowErrorQuantity()\"\n [class.menu-openned]=\"overflowChipTrigger.menuOpen\"\n class=\"quantity-dropdown cursor-pointer\"\n #overflowChipTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"overflowChips\"\n >\n

+{{ overflowAmount }}

\n \n\n\n\n
\n
\n \n
\n
\n
\n","import {DOCUMENT} from '@angular/common';\nimport {\n AfterViewInit,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n Self,\n SimpleChanges,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatMenu, MatMenuTrigger} from '@angular/material/menu';\nimport {fromEvent, Observable, Subscription} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {MatFormFieldControlHelper} from '../helper/form-field-control-helper';\n\n@Component({\n selector: 'vdw-filter-chips',\n styleUrls: ['./filter-chips.component.scss'],\n templateUrl: './filter-chips.component.html',\n providers: [{provide: MatFormFieldControl, useExisting: FilterChipsComponent}]\n})\nexport class FilterChipsComponent extends MatFormFieldControlHelper implements OnInit, AfterViewInit, OnDestroy, OnChanges, DoCheck {\n public overflowAmount = 0;\n public overFlowChipLabels: string[];\n public overflowGap = 0;\n private resizeObservable: Observable;\n private resizeSubscription: Subscription;\n private previousChips: any[];\n private readonly INPUT_FIELD_GAP_WIDTH = 8;\n private readonly INPUT_FIELD_OVERFLOW_BUTTON_WIDTH = 30;\n private readonly INPUT_CHIP_OVERFLOW_MIN_WIDTH = 200;\n\n @ViewChildren('visibleChips') public visibleChipComponents: QueryList;\n @ViewChild('chipsContainer', {read: ElementRef}) public chipsContainer: ElementRef;\n @ViewChild('overflowChipTrigger') public overflowChipTrigger: MatMenuTrigger;\n @ViewChild('overflowChips') public overflowChipsMenu: ElementRef;\n @Output() public deletedEvent = new EventEmitter();\n @Output() public droppedEvent = new EventEmitter();\n @Input() public chips: any[];\n @Input() public canDeleteChips = true;\n @Input() public canMoveChips = true;\n @Input() public disabled = false;\n @Input() public compact = false;\n @Input() public errorPredicate: (chip: any) => boolean = (): boolean => false;\n @Input() public labelGetter: (chip: any) => string = (chip: string): string => chip;\n\n // eslint-disable-next-line @typescript-eslint/member-ordering\n public constructor(\n @Optional() @Self() public readonly ngControl: NgControl,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly renderer: Renderer2,\n public elementRef: ElementRef\n ) {\n super(ngControl);\n }\n\n public ngOnInit(): void {\n super.init();\n\n this.resizeObservable = fromEvent(window, 'resize');\n this.resizeSubscription = this.resizeObservable.subscribe((evt: any) => {\n this.setVisibleChips();\n });\n setTimeout(() => this.setVisibleChips());\n }\n\n public ngAfterViewInit(): void {\n setTimeout(() => this.setVisibleChips());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('chips' in changes) {\n setTimeout(() => this.setVisibleChips());\n }\n }\n\n public ngDoCheck(): void {\n if (!this.canMoveChips && this.chips?.length !== this.previousChips?.length) {\n setTimeout(() => this.setVisibleChips());\n this.previousChips = this.chips.slice();\n }\n }\n\n public ngOnDestroy(): void {\n super.destroy();\n this.resizeSubscription.unsubscribe();\n }\n\n public delete(deletedObject: any): void {\n this.deletedEvent.emit(deletedObject);\n }\n\n public drop(): void {\n this.droppedEvent.emit();\n }\n\n public out(): void {\n const dragPreview = this.getDragPreview();\n\n if (dragPreview) {\n this.renderer.setStyle(dragPreview, 'cursor', 'not-allowed', 1);\n }\n }\n\n public over(): void {\n const dragPreview = this.getDragPreview();\n\n if (dragPreview) {\n this.renderer.removeStyle(dragPreview, 'cursor');\n }\n }\n\n private getDragPreview(): HTMLElement {\n return this.document.querySelector('.gu-mirror');\n }\n\n public setVisibleChips(): void {\n if (this.canMoveChips) {\n return;\n }\n\n const availableWidthChips = (this.chipsContainer.nativeElement as HTMLElement).parentElement.offsetWidth;\n this.overFlowChipLabels = [];\n this.overflowAmount = 0;\n let usedWidthByInputChips = 0;\n let index = 0;\n\n for (let chip of this.visibleChipComponents) {\n const htmlComponent = chip.nativeElement as HTMLElement;\n htmlComponent.classList.remove('hidden');\n\n if (AssertionUtils.isNullOrUndefined(htmlComponent)) {\n continue;\n }\n\n const chipWidth = htmlComponent.offsetWidth + 1;\n const overflowButtonWidth = index === this.visibleChipComponents.length - 1 ? 0 : this.INPUT_FIELD_OVERFLOW_BUTTON_WIDTH + this.INPUT_FIELD_GAP_WIDTH;\n const availableWidth = availableWidthChips - usedWidthByInputChips - overflowButtonWidth;\n\n if (availableWidth > chipWidth) {\n htmlComponent.classList.remove('hidden');\n usedWidthByInputChips += chipWidth + this.INPUT_FIELD_GAP_WIDTH;\n } else if (availableWidth > this.INPUT_CHIP_OVERFLOW_MIN_WIDTH || this.chips.length === 1) {\n htmlComponent.style.width = this.chips.length === 1 ? '100%' : `${this.INPUT_CHIP_OVERFLOW_MIN_WIDTH}px`;\n usedWidthByInputChips += this.INPUT_CHIP_OVERFLOW_MIN_WIDTH + this.INPUT_FIELD_GAP_WIDTH;\n } else if (availableWidth < chipWidth) {\n htmlComponent.classList.add('hidden');\n const elementLabel = htmlComponent.textContent.trim();\n this.overFlowChipLabels.push(elementLabel);\n usedWidthByInputChips += chipWidth + this.INPUT_FIELD_GAP_WIDTH;\n this.overflowAmount += 1;\n }\n\n index = index + 1;\n this.overflowGap = this.INPUT_FIELD_GAP_WIDTH * this.overFlowChipLabels.length;\n }\n }\n\n public canShowErrorQuantity(): boolean {\n const overFlowChips = this.chips.filter((chip: any) => this.overFlowChipLabels.includes(this.labelGetter(chip)));\n const hasErrorOverFlowChips = overFlowChips.filter((chip: any) => this.errorPredicate(chip) === true);\n return hasErrorOverFlowChips.length > 0;\n }\n}\n","\n \n \n\n","import {Component, ElementRef, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {isEmpty, isEqual, isNil} from 'lodash-es';\n\n@Component({\n selector: 'vdw-filter',\n templateUrl: './filter.component.html',\n styleUrls: ['./filter.component.scss']\n})\nexport class FilterComponent {\n @Output() public filteredTextChanged: EventEmitter = new EventEmitter();\n @Output() public filterIconClicked: EventEmitter = new EventEmitter();\n @Input() public placeholder = 'ANGULAR_COMPONENT_LIBRARY.FILTER.SEARCH';\n @Input() public icon = 'search';\n @Input() public disabled = false;\n @Input() public filteredText;\n @Input() public iconDisabled = false;\n @Input() public filterWidth = 'auto';\n @ViewChild('inputElement', {read: ElementRef}) public inputElement: ElementRef;\n @ViewChild('iconElement', {read: ElementRef}) public iconElement: ElementRef;\n\n public focus(): void {\n this.inputElement.nativeElement.focus();\n }\n\n public filterChanged(newValue: string): void {\n if ((!isNil(newValue) || !isEmpty(newValue)) && isEqual(this.icon, 'search')) {\n this.icon = 'close';\n } else if ((isNil(newValue) || isEmpty(newValue)) && isEqual(this.icon, 'close')) {\n this.icon = 'search';\n }\n this.filteredText = newValue;\n this.filteredTextChanged.emit(this.filteredText);\n }\n\n public iconClicked(event: MouseEvent): void {\n if (isEqual(this.icon, 'close')) {\n this.filteredText = null;\n this.filteredTextChanged.emit(this.filteredText);\n this.icon = 'search';\n } else {\n this.filterIconClicked.emit(event);\n }\n }\n\n public clear(): void {\n this.filterChanged('');\n }\n\n public isIconDisabled(): boolean {\n return this.iconDisabled;\n }\n}\n","
\n \n \n \n \n
\n","import {Component} from '@angular/core';\nimport {FilterComponent} from '../filter.component';\n\n@Component({\n selector: 'vdw-mobile-filter',\n templateUrl: './mobile-filter.component.html',\n styleUrls: ['./mobile-filter.component.scss']\n})\nexport class MobileFilterComponent extends FilterComponent {\n public filterChanged(newValue: string): void {\n this.filteredText = newValue;\n this.filteredTextChanged.emit(this.filteredText);\n }\n}\n","\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {FooterConstants} from './footer.constants';\n\n@Component({\n selector: 'vdw-footer',\n templateUrl: './footer.component.html',\n styleUrls: ['./footer.component.scss']\n})\nexport class FooterComponent extends BaseComponent {\n @Input() public locked = false;\n @Input() public centered = false;\n @Input() public chooseEventName = 'ANGULAR_COMPONENT_LIBRARY.FOOTER.CONFIRM_SELECTION';\n @Input() public withChooseButton = true;\n @Input() public chooseDialogCloseValue;\n @Input() public chooseEventInProgress = false;\n @Input() public cancelEventName = 'ANGULAR_COMPONENT_LIBRARY.FOOTER.CANCEL';\n @Input() public withCancelButton = true;\n @Input() public withSaveButton = false;\n @Input() public canShowBMSTheme = false;\n @Output() public cancelEvent: EventEmitter = new EventEmitter();\n @Output() public saveEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCloseEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCreateNewEvent: EventEmitter = new EventEmitter();\n @Output() public chooseEvent: EventEmitter = new EventEmitter();\n public saveTimedOutCloser: NodeJS.Timeout;\n public readonly CHOOSE_BUTTON_CLASS_NAME = FooterConstants.CHOOSE_BUTTON_CLASS_NAME;\n\n public constructor() {\n super();\n }\n\n public cancelButtonClicked(): void {\n this.cancelEvent.emit();\n }\n\n public saveButtonClicked(): void {\n this.saveEvent.emit();\n }\n\n public saveAndCloseButtonClicked(): void {\n this.saveAndCloseEvent.emit();\n }\n\n public saveAndCreateNewButtonClicked(): void {\n this.saveAndCreateNewEvent.emit();\n }\n\n public chooseButtonClicked(): void {\n this.chooseEvent.emit();\n }\n\n public hasSaveAndCloseButton(): boolean {\n return this.saveAndCloseEvent.observed;\n }\n\n public hasSaveAndCreateNewButton(): boolean {\n return this.saveAndCreateNewEvent.observed;\n }\n\n public hasSaveMenu(): boolean {\n return this.hasSaveAndCloseButton() || this.hasSaveAndCreateNewButton();\n }\n\n public hasDefaultCancelDialogButton(): boolean {\n return this.centered && !this.cancelEvent.observed;\n }\n\n public hasDefaultChooseDialogButton(): boolean {\n return !this.chooseEvent.observed;\n }\n\n public hasHintsElement(): boolean {\n return !AssertionUtils.isNullOrUndefined(document.querySelector('[hints]'));\n }\n}\n","export class FooterConstants {\n public static readonly CHOOSE_BUTTON_CLASS_NAME = 'choose-button';\n}\n","
\n
\n @if (hasBackButton()) {\n \n }\n @if (svgIcon) {\n
\n \n
\n }\n
\n

\n @if (action) {\n {{ action + ' ' }}\n }\n \n

\n @if (extraInformationTitle) {\n {{ extraInformationTitle }}\n }\n @if (canShowAmount()) {\n

({{ amount }})

\n }\n
\n
\n\n
\n
\n @if (invalidFormMessageError) {\n \n } @else if (showCustomErrorMessage) {\n \n }\n @if (canShowSettingsButton()) {\n
\n \n \n \n
\n }\n \n @if (canShowDivider()) {\n \n }\n\n @if (canShowMoreButton()) {\n
\n \n \n \n
\n }\n \n
\n @if (hasDuplicateButton()) {\n \n }\n @if (hasDeleteButton()) {\n \n }\n @for (headerAction of headerActions; track $index) {\n \n }\n
\n
\n @if (canShowCancelButton()) {\n
\n \n
\n }\n @if (canShowSaveButton() || canShowInUseButton()) {\n
\n @if (canShowSaveButton()) {\n \n @if (hasSaveMenu()) {\n \n \n
\n }\n \n }\n @if (canShowInUseButton()) {\n \n }\n
\n }\n \n
\n \n \n \n
\n
\n\n
\n \n\n \n
\n
\n
\n\n","import {Component, ElementRef, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {MatMenuTrigger} from '@angular/material/menu';\nimport {Subscription, timer} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {skeletonViewAnimation} from '../../common/animations/skeleton-view.animation';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {LocalStorageService} from '../../custom-services/local-storage.service/local-storage.service';\nimport {HeaderAction} from './header-action';\nimport {HeaderButtons} from './header-button';\nimport {HeaderTabIndex} from './header-tab-index';\nimport {SaveType} from './save-type.enum';\n\n@Component({\n selector: 'vdw-header',\n templateUrl: './header.component.html',\n styleUrls: ['./header.component.scss'],\n animations: [skeletonViewAnimation('.button-skeleton-wrapper, text-skeleton-wrapper')]\n})\nexport class HeaderComponent extends BaseComponent implements OnInit, OnChanges {\n @ViewChild('saveMenuTrigger', {read: MatMenuTrigger}) public saveMenuTrigger: MatMenuTrigger;\n @ViewChild('optionMenuTrigger', {read: MatMenuTrigger}) public optionMenuTrigger: MatMenuTrigger;\n @ViewChild('saveMenu', {static: true}) public saveMenu: ElementRef;\n @Input() public title: string;\n @Input() public extraInformationTitle: string;\n @Input() public svgIcon: string;\n @Input() public action: string;\n @Input() public amount: number;\n @Input() public isInUse = false;\n @Input() public locked = false;\n @Input() public invalidFormMessageError;\n @Input() public hasPermissionToEdit = true;\n @Input() public isLoading = false;\n @Input() public saving = false;\n @Input() public headerButtons: HeaderButtons;\n @Input() public headerTabIndex: HeaderTabIndex = {tabIndexSave: 0, tabIndexCancel: 0, tabIndexCustomSettings: 0};\n @Input() public headerActions: HeaderAction[];\n @Input() public isCreateNewPage = false;\n @Input() public showCustomErrorMessage = false;\n @Input() public customErrorMessage: string;\n @Input() public identifier: string;\n @Input() public settingsTooltip: string;\n @Input() public canShowClose = false;\n @Input() public actionText = 'ANGULAR_COMPONENT_LIBRARY.HEADER.SAVE';\n @Output() public backEvent: EventEmitter = new EventEmitter();\n @Output() public cancelEvent: EventEmitter = new EventEmitter();\n @Output() public deleteEvent: EventEmitter = new EventEmitter();\n @Output() public duplicateEvent: EventEmitter = new EventEmitter();\n @Output() public saveEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCloseEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCreateNewEvent: EventEmitter = new EventEmitter();\n @Output() public settingsEvent: EventEmitter = new EventEmitter();\n @Output() public inUseEvent: EventEmitter = new EventEmitter();\n @Output() public closeEvent: EventEmitter = new EventEmitter();\n public saveMenuTimer: Subscription;\n public optionMenuTimer: Subscription;\n public defaultSaveType: SaveType;\n public readonly SAVE = SaveType.SAVE;\n public readonly SAVE_AND_CLOSE = SaveType.SAVE_AND_CLOSE;\n public readonly SAVE_AND_CREATE_NEW = SaveType.SAVE_AND_CREATE_NEW;\n private readonly LOCAL_STORAGE_KEY = 'saveType';\n\n public constructor(private readonly localStorage: LocalStorageService) {\n super();\n }\n\n public ngOnInit(): void {\n this.setDefaultSaveType(this.identifier);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.identifier && !changes.identifier.isFirstChange()) {\n this.setDefaultSaveType(changes.identifier.currentValue);\n }\n }\n\n public cancelButtonClicked(): void {\n this.cancelEvent.emit();\n }\n\n public deleteButtonClicked(): void {\n this.deleteEvent.emit();\n }\n\n public headerActionClicked(event: MouseEvent, headerAction: HeaderAction): void {\n headerAction.onClick(event);\n }\n\n public backButtonClicked(): void {\n this.backEvent.emit();\n }\n\n public duplicateButtonClicked(): void {\n this.duplicateEvent.emit();\n }\n\n public save(saveType: SaveType): void {\n if (this.identifier) {\n this.defaultSaveType = saveType;\n this.localStorage.set(`${this.LOCAL_STORAGE_KEY}.${this.identifier}`, this.defaultSaveType);\n }\n\n if (saveType === SaveType.SAVE) {\n this.saveEvent.emit();\n } else if (saveType === SaveType.SAVE_AND_CLOSE) {\n this.saveAndCloseEvent.emit();\n } else if (saveType === SaveType.SAVE_AND_CREATE_NEW) {\n this.saveAndCreateNewEvent.emit();\n }\n }\n\n public settingsButtonClicked(): void {\n this.settingsEvent.emit();\n }\n\n public inUseButtonClicked(): void {\n this.inUseEvent.emit();\n }\n\n public closeClicked(): void {\n this.closeEvent.emit();\n }\n\n public hasDeleteButton(): boolean {\n return this.headerButtons ? this.headerButtons.delete : this.deleteEvent.observed;\n }\n\n public hasDuplicateButton(): boolean {\n return this.headerButtons ? this.headerButtons.duplicate : this.duplicateEvent.observed;\n }\n\n public isDefaultSaveType(saveType: SaveType): boolean {\n return saveType === this.defaultSaveType;\n }\n\n public hasSaveMenuButton(): boolean {\n return this.hasSaveButton() && !this.isDefaultSaveType(SaveType.SAVE);\n }\n\n public hasSaveAndCloseMenuButton(): boolean {\n return this.hasSaveAndCloseButton() && !this.isDefaultSaveType(SaveType.SAVE_AND_CLOSE);\n }\n\n public hasSaveAndCreateNewMenuButton(): boolean {\n return this.hasSaveAndCreateNewButton() && !this.isDefaultSaveType(SaveType.SAVE_AND_CREATE_NEW);\n }\n\n public hasSettingsButton(): boolean {\n return this.headerButtons ? this.headerButtons.settings : this.settingsEvent.observed;\n }\n\n public hasInUseButton(): boolean {\n return this.headerButtons ? this.headerButtons.inUse : this.inUseEvent.observed;\n }\n\n public hasBackButton(): boolean {\n return this.headerButtons ? this.headerButtons.back : this.backEvent.observed;\n }\n\n public canShowMoreButton(): boolean {\n return this.hasPermissionToEdit && this.hasOptionMenu() && !this.isCreateNewPage;\n }\n\n public canShowCancelButton(): boolean {\n return this.hasPermissionToEdit && this.hasCancelButton();\n }\n\n public canShowSaveButton(): boolean {\n if (AssertionUtils.isNullOrUndefined(this.defaultSaveType)) {\n this.setDefaultSaveType(this.identifier);\n }\n return !this.canShowInUseButton() && this.hasPermissionToEdit && this.defaultSaveType !== undefined && (this.hasSaveButton() || this.hasSaveAndCloseButton() || this.hasSaveAndCreateNewButton());\n }\n\n public canShowSettingsButton(): boolean {\n return this.hasPermissionToEdit && this.hasSettingsButton();\n }\n\n public canShowInUseButton(): boolean {\n return this.isInUse && this.hasPermissionToEdit && this.hasInUseButton();\n }\n\n public canShowDivider(): boolean {\n return this.canShowSettingsButton() && this.hasActionButtons();\n }\n\n public canShowAmount(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.amount) && this.amount > 0;\n }\n\n public mouseEnterOptionButton(): void {\n if (this.optionMenuTimer) {\n this.optionMenuTimer.unsubscribe();\n }\n this.optionMenuTrigger.openMenu();\n }\n\n public mouseEnterSaveButton(): void {\n if (this.saveMenuTimer) {\n this.saveMenuTimer.unsubscribe();\n }\n\n if (!this.locked) {\n this.saveMenuTrigger.openMenu();\n }\n }\n\n public mouseLeaveOptionButton(): void {\n this.optionMenuTimer = timer(500).subscribe(() => {\n this.optionMenuTrigger.restoreFocus = false;\n this.optionMenuTrigger.closeMenu();\n });\n }\n\n public mouseLeaveSaveButton(): void {\n this.saveMenuTimer = timer(500).subscribe(() => this.saveMenuTrigger.closeMenu());\n }\n\n public hasSaveMenu(): boolean {\n return this.hasSaveMenuButton() || this.hasSaveAndCloseMenuButton() || this.hasSaveAndCreateNewMenuButton();\n }\n\n public showSaveMenu(): ElementRef {\n return this.locked ? null : this.saveMenu;\n }\n\n public getSaveButtonTranslationKey(): string {\n switch (this.defaultSaveType) {\n case SaveType.SAVE_AND_CLOSE:\n return 'ANGULAR_COMPONENT_LIBRARY.HEADER.ACTION_AND_CLOSE';\n case SaveType.SAVE_AND_CREATE_NEW:\n return 'ANGULAR_COMPONENT_LIBRARY.HEADER.ACTION_AND_CREATE_NEW';\n default:\n return this.actionText;\n }\n }\n\n private hasOptionMenu(): boolean {\n return this.hasDuplicateButton() || this.hasDeleteButton() || this.headerActions?.length > 0;\n }\n\n private hasCancelButton(): boolean {\n return this.headerButtons ? this.headerButtons.cancel : this.cancelEvent.observed;\n }\n\n private hasSaveButton(): boolean {\n return this.headerButtons ? this.headerButtons.save : this.saveEvent.observed;\n }\n\n private hasSaveAndCloseButton(): boolean {\n return this.headerButtons ? this.headerButtons.saveAndClose : this.saveAndCloseEvent.observed;\n }\n\n private hasSaveAndCreateNewButton(): boolean {\n return this.headerButtons ? this.headerButtons.saveAndCreateNew : this.saveAndCreateNewEvent.observed;\n }\n\n private hasActionButtons(): boolean {\n return this.canShowMoreButton() || this.canShowCancelButton() || this.canShowSaveButton() || this.headerActions?.length > 0;\n }\n\n private setDefaultSaveType(identifier: string): void {\n const defaultSaveType = this.localStorage.get(`${this.LOCAL_STORAGE_KEY}.${identifier}`);\n\n if (identifier && this.isSaveTypeButtonAvailable(defaultSaveType)) {\n this.defaultSaveType = defaultSaveType;\n } else if (this.hasSaveButton()) {\n this.defaultSaveType = SaveType.SAVE;\n } else if (this.hasSaveAndCloseButton()) {\n this.defaultSaveType = SaveType.SAVE_AND_CLOSE;\n } else if (this.hasSaveAndCreateNewButton()) {\n this.defaultSaveType = SaveType.SAVE_AND_CREATE_NEW;\n }\n }\n\n private isSaveTypeButtonAvailable(saveType: SaveType): boolean {\n switch (saveType) {\n case SaveType.SAVE:\n return this.hasSaveButton();\n case SaveType.SAVE_AND_CLOSE:\n return this.hasSaveAndCloseButton();\n case SaveType.SAVE_AND_CREATE_NEW:\n return this.hasSaveAndCreateNewButton();\n default:\n return false;\n }\n }\n}\n","export enum SaveType {\n SAVE = 'SAVE',\n SAVE_AND_CLOSE = 'SAVE_AND_CLOSE',\n SAVE_AND_CREATE_NEW = 'SAVE_AND_CREATE_NEW'\n}\n","import {ControlValueAccessor} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {Subject} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\n\nexport class ControlValueAccessorHelper extends BaseComponent implements ControlValueAccessor {\n public disabled: boolean;\n public stateChanges: Subject = new Subject();\n protected formControl: ControlValueAccessor & MatFormFieldControl;\n\n protected onChange: (value: T) => void;\n protected onTouched: () => void;\n\n private _value: T;\n\n public get value(): T {\n return this._value;\n }\n\n public set value(v: T) {\n this._value = v;\n this.stateChanges.next();\n }\n\n public writeValue(value: any): void {\n this._value = value;\n if (this.formControl) {\n this.formControl.writeValue(value);\n }\n }\n\n public updateValue(v: T): void {\n this.onChange(v);\n this.onTouched();\n this.stateChanges.next();\n }\n\n public deleteValue(): void {\n this.onChange(null);\n this.onTouched();\n this.stateChanges.next();\n }\n\n public registerOnChange(fn: any): void {\n if (this.formControl) {\n this.formControl.registerOnChange(fn);\n } else {\n this.onChange = fn;\n }\n }\n\n public registerOnTouched(fn: any): void {\n if (this.formControl) {\n this.formControl.registerOnChange(fn);\n } else {\n this.onTouched = fn;\n }\n }\n\n public setDisabledState?(isDisabled: boolean): void {\n if (this.formControl) {\n this.formControl.setDisabledState(isDisabled);\n } else {\n this.disabled = isDisabled;\n }\n }\n}\n","import {NgControl, Validators} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {combineLatest, startWith, takeUntil} from 'rxjs';\nimport {ControlValueAccessorHelper} from './control-value-accessor-helper';\n\nexport class MatFormFieldControlHelper extends ControlValueAccessorHelper implements MatFormFieldControl {\n public errorState = false;\n public id: string;\n\n public get placeholder(): string {\n return this._placeholder;\n }\n\n public set placeholder(placeholder: string) {\n this._placeholder = placeholder;\n this.stateChanges.next();\n }\n\n public ngControl: NgControl;\n public focused: boolean;\n public empty: boolean;\n public shouldLabelFloat = true;\n public required: boolean;\n\n public controlType?: string;\n public autofilled?: boolean;\n public userAriaDescribedBy = '';\n private _placeholder: string;\n\n public constructor(ngControl: NgControl) {\n super();\n if (ngControl) {\n ngControl.valueAccessor = this;\n }\n }\n\n public setDescribedByIds(ids: string[]): void {\n if (this.formControl) {\n this.formControl.setDescribedByIds(ids);\n } else {\n this.userAriaDescribedBy = ids.join(' ');\n }\n }\n\n public onContainerClick(event: MouseEvent): void {\n if (this.formControl) {\n this.formControl.onContainerClick(event);\n }\n }\n\n public init(): void {\n if (this.formControl) {\n this.formControl.stateChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n setTimeout(() => {\n this.errorState = this.ngControl.invalid && this.ngControl.touched;\n this.stateChanges.next();\n }, 0);\n });\n } else if (this.ngControl) {\n this.required = this.ngControl?.control?.hasValidator(Validators.required);\n this.disabled = this.ngControl.disabled;\n combineLatest([this.ngControl.statusChanges?.pipe(startWith(null)), this.stateChanges?.pipe(startWith(null))])\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this.errorState = this.ngControl.invalid && this.ngControl.touched));\n }\n }\n\n public destroy(): void {\n this.stateChanges.complete();\n }\n\n public check(): void {\n if (this.ngControl && this.ngControl.invalid && this.ngControl.touched) {\n this.stateChanges.next();\n }\n }\n}\n","\n \n \n \n \n \n \n

\n \n

\n
\n \n \n\n","import {Component, ElementRef, EventEmitter, Input, Output} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Component({\n selector: 'vdw-input-chip',\n templateUrl: './input-chip.component.html',\n styleUrls: ['./input-chip.component.scss']\n})\nexport class InputChipComponent {\n @Input() public value: string;\n @Input() public disabled = false;\n @Input() public error = false;\n @Input() public route: string;\n @Input() public multiSelect = false;\n @Input() public canShowBMSTheme = false;\n @Input() public canMoveChips = false;\n @Input() public color: string;\n @Output() public removeClick = new EventEmitter();\n\n public constructor(public elementRef: ElementRef) {}\n\n public canShowCloseIcon(): boolean {\n return this.multiSelect && !this.disabled && !this.canShowBMSTheme;\n }\n\n public canShowCloseIconForBMSTheme(): boolean {\n return this.multiSelect && this.canShowBMSTheme;\n }\n\n public onRemoveClick(event: Event): void {\n event.stopPropagation();\n event.preventDefault();\n this.removeClick.emit();\n }\n\n public getTabIndex(): number {\n return AssertionUtils.isNullOrUndefined(this.route) || this.route === '' ? -1 : 0;\n }\n}\n","import {Directive, ElementRef, HostListener} from '@angular/core';\n\n@Directive({\n selector: '[vdwElementPressed]'\n})\nexport class ElementPressedDirective {\n private isPressed = false;\n\n public constructor(private readonly elementRef: ElementRef) {}\n\n @HostListener('mousedown')\n public onMouseDown(): void {\n this.isPressed = true;\n this.elementRef.nativeElement.classList.add('pressed');\n }\n\n @HostListener('window:mouseup')\n public onMouseUp(): void {\n if (this.isPressed) {\n this.isPressed = false;\n this.elementRef.nativeElement.classList.remove('pressed');\n }\n }\n}\n","@if (!entry.shouldHide) {\n \n}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\nimport {takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {ApplicationLayoutService} from '../../application-layout/application-layout.service';\nimport {MenuTreeViewContextService} from '../menu-tree-view-context.service';\nimport {MenuItemEntry} from './menu-item-entry.interface';\n\n@Component({\n selector: 'vdw-menu-item',\n templateUrl: './menu-item.component.html',\n styleUrls: ['./menu-item.component.scss']\n})\nexport class MenuItemComponent extends BaseComponent implements OnInit {\n @Input() public iconWidthInPx = 24;\n @Input() public isFavorites = false;\n @Input() public entry: MenuItemEntry;\n @Output() public menuItemClicked = new EventEmitter();\n\n public isActive = false;\n\n public constructor(\n public readonly menuTreeViewContext: MenuTreeViewContextService,\n private readonly applicationLayout: ApplicationLayoutService\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.isActive = this.isItemActive();\n this.menuTreeViewContext.activeEntryUpdated.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => (this.isActive = this.isItemActive()));\n }\n\n public hasChildEntries(): boolean {\n return !AssertionUtils.isEmpty(this.entry.childEntries);\n }\n\n public hasLink(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.entry.route);\n }\n\n public hasIcon(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.entry.icon) && this.entry.icon !== '' && !this.isFavorites;\n }\n\n public favoriteClicked(event: MouseEvent): void {\n event.stopPropagation();\n\n this.entry.isFavorited = !this.entry.isFavorited;\n this.menuTreeViewContext.itemFavorited.emit(this.entry);\n }\n\n public isItemActive(): boolean {\n if (this.menuTreeViewContext.isActiveEntry(this.entry)) {\n return true;\n }\n\n const childEntries = this.applicationLayout.flattenMenuItems(this.entry);\n return childEntries.some((child: MenuItemEntry) => this.menuTreeViewContext.isActiveEntry(child));\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {MenuItemEntry} from './menu-item/menu-item-entry.interface';\n\n@Injectable()\nexport class MenuTreeViewContextService {\n private activeEntry: MenuItemEntry;\n\n public itemFavorited = new EventEmitter();\n public activeEntryUpdated = new EventEmitter();\n\n public constructor(private readonly router: Router) {}\n\n public setActive(entry: MenuItemEntry): void {\n this.activeEntry = entry;\n this.activeEntryUpdated.emit();\n }\n\n public isActiveEntry(entry: MenuItemEntry): boolean {\n return this.activeEntry?.route === entry?.route && this.activeEntry?.navigationKey === entry?.navigationKey;\n }\n\n public menuItemClicked(entry: MenuItemEntry, event: PointerEvent): void {\n event.stopPropagation();\n\n if (!AssertionUtils.isEmpty(entry.childEntries)) {\n entry.isExpanded = !entry.isExpanded;\n return;\n }\n\n if (!AssertionUtils.isNullOrUndefined(entry.route)) {\n entry.isExternalLink ? window.open(entry.route, '_blank') : this.navigateRouter(entry);\n }\n }\n\n private navigateRouter(entry: MenuItemEntry): void {\n this.activeEntry = entry;\n this.router.navigateByUrl(entry.route);\n }\n}\n","
\n
{{ entry.navigationKey | bmsTranslate }}
\n
\n \n
\n
\n\n
\n \n
\n","import {Component, Input, OnInit} from '@angular/core';\nimport {Event, NavigationEnd, Router, RouterEvent} from '@angular/router';\nimport {filter} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {MenuItemEntry} from './menu-item/menu-item-entry.interface';\nimport {MenuTreeViewContextService} from './menu-tree-view-context.service';\n\n@Component({\n selector: 'vdw-menu-tree-view',\n templateUrl: './menu-tree-view.component.html',\n styleUrls: ['./menu-tree-view.component.scss']\n})\nexport class MenuTreeViewComponent implements OnInit {\n @Input() public isRoot = false;\n @Input() public iconWidthInPx = 24;\n @Input() public isFavorites = false;\n @Input() public entry: MenuItemEntry;\n\n public constructor(\n public readonly menuTreeViewContext: MenuTreeViewContextService,\n private readonly router: Router\n ) {}\n\n public ngOnInit(): void {\n if (this.isLinkActive()) {\n setTimeout(() => this.menuTreeViewContext.setActive(this.entry));\n }\n\n this.router.events\n .pipe(filter((event: RouterEvent | Event): boolean => event instanceof NavigationEnd && this.isLinkActive()))\n .subscribe((_: RouterEvent) => this.menuTreeViewContext.setActive(this.entry));\n }\n\n public isLinkActive(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.entry.route) && this.router.isActive(this.entry.route, {paths: 'exact', queryParams: 'ignored', fragment: 'ignored', matrixParams: 'ignored'});\n }\n}\n","
\n \n
\n @if (showTitle) {\n
\n
\n @if (title) {\n

\n } @else {\n

\n }\n
\n @if (showTimestamp) {\n

{{ getCurrentDateForSubscriptionTimezone(messages[0].timestamp) }}

\n }\n
\n }\n\n @if (!onlyShowTitle) {\n @if (canShowMessageList()) {\n
    \n @for (message of messages; track $index) {\n
  • \n
    \n

    {{ message.description }}

    \n @if (canShowTimestampForEachMessage()) {\n

    {{ getCurrentDateForSubscriptionTimezone(message.timestamp) }}

    \n }\n
    \n
  • \n }\n
\n } @else {\n
\n

{{ messages[0].description }}

\n @if (canShowTimestampForEachMessage()) {\n

{{ getCurrentDateForSubscriptionTimezone(messages[0].timestamp) }}

\n }\n
\n }\n }\n
\n
\n","import {Component, HostBinding, Input} from '@angular/core';\nimport moment from 'moment';\nimport {Message} from '../../common/data/message';\nimport {MessageType} from '../../common/data/message-type.enum';\nimport {DateTimeFormat} from '../../common/datetime-format.enum';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {DateTimePipe} from '../../custom-pipes/date-time-pipe/date-time.pipe';\n\n@Component({\n selector: 'vdw-message-container',\n templateUrl: './message-container.component.html',\n styleUrls: ['./message-container.component.scss']\n})\nexport class MessageContainerComponent {\n @Input() public showTitle = false;\n @Input() public showTimestamp = false;\n @Input() public onlyShowTitle = false;\n @Input() public messages: Message[];\n @Input() public title: string;\n @Input() public currentSubscriptionTimezoneOffset: string;\n\n @HostBinding('class.error') public get isErrorMessage(): boolean {\n return this.messages[0].type === MessageType.ERROR;\n }\n\n @HostBinding('class.warning') public get isWarningMessage(): boolean {\n return this.messages[0].type === MessageType.WARNING;\n }\n\n @HostBinding('class.info') public get isInfoMessage(): boolean {\n return this.messages[0].type === MessageType.INFO;\n }\n\n public constructor(private readonly dateTimePipe: DateTimePipe) {}\n\n public canShowMessageList(): boolean {\n return this.showTitle || this.messages.length > 1;\n }\n\n public canShowTimestampForEachMessage(): boolean {\n return !this.showTitle && this.showTimestamp;\n }\n\n public getCurrentDateForSubscriptionTimezone(timestamp: Date): string {\n const timestampWithOffset = AssertionUtils.isNullOrUndefined(this.currentSubscriptionTimezoneOffset) ? moment(timestamp) : moment(timestamp).utcOffset(this.currentSubscriptionTimezoneOffset);\n return this.dateTimePipe.transform(timestampWithOffset.toDate(), DateTimeFormat.DAY_MONTH_SHORT_TIME_WITH_SECONDS);\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {MobileSelectorOption} from '../mobile-dropdown/mobile-selector/mobile-selector-option.interface';\n\n@Component({\n selector: 'vdw-mobile-bottom-selector',\n templateUrl: './mobile-bottom-selector.component.html',\n styleUrls: ['./mobile-bottom-selector.component.scss']\n})\nexport class MobileBottomSelectorComponent {\n @Input() public selectedOption: MobileSelectorOption;\n @Input() public options: MobileSelectorOption[];\n @Input() public dialogTitleKey: string;\n @Output() public optionChange = new EventEmitter();\n\n public get currentPositionIndex(): number {\n return this.options.findIndex((option: MobileSelectorOption) => option.id === this.selectedOption.id);\n }\n\n public get totalPositions(): number {\n return this.options.length;\n }\n\n public selectorChange(newOption: MobileSelectorOption): void {\n this.selectedOption = newOption;\n this.optionChange.emit(this.selectedOption);\n }\n\n public previousOption(): void {\n const currentIndex = this.currentPositionIndex;\n if (currentIndex > 0) {\n this.selectorChange(this.options[currentIndex - 1]);\n } else {\n this.selectorChange(this.options[this.totalPositions - 1]);\n }\n }\n\n public nextOption(): void {\n const currentIndex = this.currentPositionIndex;\n if (currentIndex < this.totalPositions - 1) {\n this.selectorChange(this.options[currentIndex + 1]);\n } else {\n this.selectorChange(this.options[0]);\n }\n }\n}\n","
\n
\n \n \n \n
\n
\n","
\n
\n

{{ title | bmsTranslate }}

\n \n
\n \n {{ option.translationKey | bmsTranslate }}\n \n
\n","import {Component, Inject} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {MobileSelectorDialogDataInterface} from './mobile-selector-dialog-data.interface';\nimport {MobileSelectorOption} from './mobile-selector-option.interface';\n\n@Component({\n templateUrl: './mobile-selector.component.html',\n styleUrls: ['./mobile-selector.component.scss']\n})\nexport class MobileSelectorComponent {\n public selectedOption: MobileSelectorOption;\n public options: MobileSelectorOption[];\n public title: string;\n\n public constructor(\n @Inject(MAT_DIALOG_DATA) data: MobileSelectorDialogDataInterface,\n private readonly dialogRef: MatDialogRef\n ) {\n this.selectedOption = data.selectedOption;\n this.options = data.options;\n this.title = data.title;\n }\n\n public closeDialog(option: MobileSelectorOption): void {\n this.dialogRef.close(option);\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {DialogBuilderFactoryService} from '../../dialogs/dialog-builder/dialog-builder-factory.service';\nimport {MobileSelectorDialogDataInterface} from './mobile-selector/mobile-selector-dialog-data.interface';\nimport {MobileSelectorOption} from './mobile-selector/mobile-selector-option.interface';\nimport {MobileSelectorComponent} from './mobile-selector/mobile-selector.component';\n\n@Component({\n selector: 'vdw-mobile-dropdown',\n templateUrl: './mobile-dropdown.component.html',\n styleUrls: ['./mobile-dropdown.component.scss']\n})\nexport class MobileDropdownComponent extends BaseComponent {\n @Input() public selectedOption: MobileSelectorOption;\n @Input() public options: MobileSelectorOption[];\n @Input() public dialogTitleKey: string;\n @Output() public selectorChange = new EventEmitter();\n\n public constructor(private readonly dialogBuilderFactoryService: DialogBuilderFactoryService) {\n super();\n }\n\n public openDialog(): void {\n this.dialogBuilderFactoryService\n .getBuilder()\n .withWidth('100%')\n .withMaxWidth('100vw')\n .withHeight('375px')\n .withPosition({bottom: '0px'})\n .withClass('transparent')\n .openDialog(MobileSelectorComponent, {\n title: this.dialogTitleKey,\n options: this.options,\n selectedOption: this.selectedOption\n })\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe((selectedOption: MobileSelectorOption | undefined) => {\n if (selectedOption) {\n this.selectedOption = selectedOption;\n this.selectorChange.emit(selectedOption);\n }\n });\n }\n}\n","
\n {{ selectedOption.translationKey | bmsTranslate }}\n \n
\n","
\n
\n
\n \n
\n
\n

\n \n
\n\n
\n \n
\n
\n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {TagSize} from '../tag/tag-size.enum';\n\n@Component({\n selector: 'vdw-mobile-page-header',\n templateUrl: './mobile-page-header.component.html',\n styleUrls: ['./mobile-page-header.component.scss']\n})\nexport class MobilePageHeaderComponent {\n @Input() public title: string;\n @Input() public previousRouterLink: string;\n @Input() public icon: string;\n @Input() public showBackButton = true;\n @Input() public tagValue: string;\n @Input() public showTag = false;\n @Output() public backClicked: EventEmitter = new EventEmitter();\n @Output() public iconClicked: EventEmitter = new EventEmitter();\n\n public tagSize = TagSize.MEDIUM;\n}\n","import {Location} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {Observable} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {TranslateService} from '../../translation/translate.service';\nimport {ContentSwitcherDialogPrototypeService} from '../content-switcher-prototype/content-switcher-dialog-prototype.service';\nimport {ContentSwitcherNavigationInput} from './content-switcher-navigation-input.interface';\nimport {RouteInfoEntry} from './route-info-entry.interface';\nimport {RouteNavigationInput} from './route-navigation-input.interface';\n\n@Injectable({providedIn: 'root'})\nexport class NavigationHelperPrototypeService {\n public currentEntry: RouteInfoEntry;\n private navigationHistory: RouteInfoEntry[] = [];\n\n public constructor(\n private readonly router: Router,\n private readonly location: Location,\n private readonly contentSwitcher: ContentSwitcherDialogPrototypeService,\n private readonly translate: TranslateService\n ) {}\n\n public navigateWithRoute(routingInfo: RouteNavigationInput): void {\n if (this.currentEntry?.isDialog) {\n this.contentSwitcher.closeDialogButMaintainHistory();\n }\n\n this.setCurrentEntry({...routingInfo, isDialog: false});\n this.router.navigateByUrl(routingInfo.route);\n }\n\n public navigateWithContentSwitcher(contentSwitcherInfo: ContentSwitcherNavigationInput): Observable {\n this.setCurrentEntry({data: contentSwitcherInfo.data, isDialog: true});\n return this.contentSwitcher.navigateForward(contentSwitcherInfo.componentInfo);\n }\n\n private setCurrentEntry(entry: RouteInfoEntry): void {\n if (!AssertionUtils.isNullOrUndefined(this.currentEntry)) {\n this.navigationHistory.push(this.currentEntry);\n }\n\n this.currentEntry = entry;\n }\n\n public navigateBack(data?: T): void {\n const previousEntry = this.currentEntry;\n this.currentEntry = this.navigationHistory.pop();\n\n if (previousEntry?.isDialog || this.currentEntry?.isDialog) {\n this.contentSwitcher.navigateBack(data);\n } else if (!AssertionUtils.isNullOrUndefined(this.currentEntry)) {\n this.router.navigateByUrl(this.currentEntry.routeData.route);\n } else {\n this.location.back();\n }\n }\n\n public getHeaderText(pageType: any, translationKey: string): string {\n let headerPrefix = '';\n\n if (pageType === 'Add' || pageType === 'Duplicate') {\n headerPrefix = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.NEW');\n } else if (pageType === 'Edit') {\n headerPrefix = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.CRUD_OVERVIEW_DATA.EDIT');\n }\n\n if (headerPrefix === '') {\n return `${headerPrefix} ${this.translate.instant(translationKey, {count: 1})}`;\n } else {\n return `${headerPrefix} ${this.translate.instant(translationKey, {count: 1}).toLowerCase()} `;\n }\n }\n\n public resetNavigationHistory(): void {\n this.contentSwitcher.resetContentSwitcher();\n this.currentEntry = undefined;\n this.navigationHistory = [];\n }\n\n public resetContentSwitcher(): void {\n if (!this.currentEntry.isDialog) {\n throw new Error('Cannot reset content switcher outside of dialog');\n }\n\n const amountOfHistoryReset = this.contentSwitcher.resetContentSwitcher();\n\n this.navigationHistory = this.navigationHistory.slice(0, amountOfHistoryReset * -1);\n this.currentEntry = this.navigationHistory.pop();\n }\n\n public getCurrentEntryData(): T {\n return this.currentEntry?.data as T;\n }\n\n public contentSwitcherDialogActive(): boolean {\n return this.currentEntry?.isDialog === true;\n }\n}\n","\n
\n
\n
\n
\n \n 0\"\n class=\"quantity-dropdown cursor-pointer\"\n [class.invalid]=\"ngControl?.errors && ngControl.touched\"\n [class.disabled]=\"disabled\"\n #overflowChipTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"overflowChips\"\n >\n

+{{ overflowAmount }}

\n
\n
\n
\n \n

\n \n

\n
\n
\n \n \n \n \n \n \n
\n \n 0\"\n class=\"quantity-dropdown\"\n [class.invalid]=\"ngControl?.errors && ngControl.touched\"\n [class.disabled]=\"disabled\"\n [class.menu-openned]=\"disabledDropdownTrigger.menuOpen || formControl?.panelOpen\"\n >\n

+{{ overflowAmount }}

\n
\n \n
\n \n \n \n \n \n
\n {{\n 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.SELECT_ALL' | bmsTranslate\n }}\n \n
\n \n \n \n \n \n
\n
\n
\n \n\n
\n
\n \n \n 0\"\n class=\"quantity-dropdown\"\n [class.invalid]=\"ngControl?.errors && ngControl.touched\"\n [class.disabled]=\"disabled\"\n [class.menu-openned]=\"disabledDropdownTrigger.menuOpen || formControl?.panelOpen\"\n >\n

+{{ overflowAmount }}

\n
\n \n \n \n \n
\n\n
\n \n \n
\n
\n\n\n \n \n\n\n 0\" class=\"mat-elevation-z0 bms-theme disabled-dropdown\" #disabledDropdown=\"matMenu\" (click)=\"$event.stopPropagation()\">\n \n \n \n \n \n
\n \n
\n \n \n \n
\n
\n
\n
\n\n\n

{{ 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.NO_RESULTS_FOUND' | bmsTranslate }}

\n
\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n DoCheck,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n Renderer2,\n Self,\n SimpleChanges,\n ViewChild,\n ViewChildren\n} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatCheckboxChange} from '@angular/material/checkbox';\nimport {MatOption} from '@angular/material/core';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatMenu, MatMenuTrigger} from '@angular/material/menu';\nimport {MatSelect} from '@angular/material/select';\nimport {Router} from '@angular/router';\nimport {takeUntil} from 'rxjs';\nimport {Color} from '../../common/data/color';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {StringUtils} from '../../common/utils/string-utils';\nimport {TranslateService} from '../../translation/translate.service';\nimport {MatFormFieldControlHelper} from '../helper/form-field-control-helper';\nimport {InputChipComponent} from '../input-chip/input-chip.component';\nimport {CurrentSelection} from './current-selection.interface';\n\n@Component({\n selector: 'vdw-object-selection',\n templateUrl: './object-selection.component.html',\n styleUrls: ['./object-selection.component.scss'],\n providers: [{provide: MatFormFieldControl, useExisting: ObjectSelectionComponent}]\n})\nexport class ObjectSelectionComponent extends MatFormFieldControlHelper implements OnInit, DoCheck, AfterViewInit, OnDestroy, OnChanges {\n @ViewChildren('visibleInputChips') public visibleInputChipComponents: QueryList;\n @ViewChild('inputField') public inputFieldElement: ElementRef;\n @ViewChild('overflowChipTrigger') public overflowChipTrigger: MatMenuTrigger;\n @ViewChild('overflowChips') public overflowChipsMenu: ElementRef;\n @ViewChild('dropdownSelect') public formControl: MatSelect;\n @ViewChild('disabledDropdownTrigger') public disabledDropdownTrigger: MatMenuTrigger;\n @ViewChild('disabledDropdown') public disabledDropdownMenu: ElementRef;\n\n @Input() public canShowBMSTheme = false;\n @Input() public baseRouterLink: string;\n @Input() public objectName: string;\n @Input() public translationKey: string;\n @Input() public chipValueKey: string;\n @Input() public conditionalChipValueKey: string;\n @Input() public inProgress = false;\n @Input() public placeHolderText: string = null;\n @Input() public listOfOptions: any[];\n @Input() public isObject = true;\n @Input() public canShowMultiSelectPlaceHolder = true;\n @Input() public withDialogObjectSelection = false;\n @Input() public refreshObjectSelection: boolean = false;\n\n @Output() public selectClicked: EventEmitter = new EventEmitter();\n @Output() public clearClicked: EventEmitter = new EventEmitter();\n public static nextId = 0;\n\n public id = `vdw-object-selection-${ObjectSelectionComponent.nextId++}`;\n public multiSelect = false;\n public overflowAmount = 0;\n\n public inputChips: CurrentSelection[] = [];\n public filteredText = '';\n\n private inputFieldGapWidth = 8;\n private inputFieldEditButtonWidth = 40;\n private inputFieldCloseIconWidth = 24;\n private inputFieldOverflowButtonWidth = 31;\n private readonly INPUT_CHIP_OVERFLOW_MIN_WIDTH = 200;\n private readonly SELECT_TRANSLATION_KEY = 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.SELECT';\n private readonly EDIT_TRANSLATION_KEY = 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.EDIT';\n\n private hasUniqueId = true;\n\n public constructor(\n @Optional() @Self() public readonly ngControl: NgControl,\n private readonly changeDetectorRef: ChangeDetectorRef,\n private readonly translate: TranslateService,\n private readonly router: Router,\n private readonly elementRef: ElementRef,\n private renderer: Renderer2\n ) {\n super(ngControl);\n }\n\n private get reservedWidthInsideInputField(): number {\n return 2 * this.inputFieldGapWidth + this.inputFieldEditButtonWidth + this.inputFieldCloseIconWidth;\n }\n\n public ngOnInit(): void {\n super.init();\n\n this.setInputChips();\n this.ngControl?.valueChanges?.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => {\n this.setInputChips();\n setTimeout(() => this.setVisibleInputChips());\n });\n\n if (this.canShowBMSTheme) {\n this.inputFieldGapWidth = 4;\n this.inputFieldEditButtonWidth = 16;\n this.inputFieldCloseIconWidth = 16;\n this.inputFieldOverflowButtonWidth = 24;\n }\n }\n\n public ngDoCheck(): void {\n super.check();\n\n const PADDING_LEFT_AND_RIGHT = 8;\n const DISABLED_DROPDOWN_WIDTH = this.elementRef.nativeElement.clientWidth + PADDING_LEFT_AND_RIGHT + PADDING_LEFT_AND_RIGHT;\n const DISABLED_DROPDOWN_PARENT_ELEMENT = document.querySelector('.disabled-dropdown')?.parentElement;\n\n if (DISABLED_DROPDOWN_PARENT_ELEMENT) {\n this.renderer.setStyle(DISABLED_DROPDOWN_PARENT_ELEMENT, 'width', `${DISABLED_DROPDOWN_WIDTH}px`);\n }\n }\n\n public ngAfterViewInit(): void {\n setTimeout(() => this.setVisibleInputChips());\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.setInputChips();\n if (('inProgress' in changes && !changes.inProgress.isFirstChange() && !this.inProgress) || this.refreshObjectSelection) {\n setTimeout(() => this.setVisibleInputChips());\n }\n }\n\n public ngOnDestroy(): void {\n super.destroy();\n }\n\n public isFiltered(value: any): boolean {\n const filteredOptions = this.listOfOptions?.filter((option: any) => (option.name ?? option).toLowerCase().includes(this.filteredText.toLowerCase()));\n return filteredOptions.find((option: any) => option.name === value.name);\n }\n\n public canClickInput(): boolean {\n return this.isEmpty() && !this.disabled;\n }\n\n public onInputClicked(): void {\n if (this.canClickInput()) {\n this.selectClicked.emit();\n }\n }\n\n public onInputClickedWithDialogObjectSelection(): void {\n if (!this.disabled) {\n this.selectClicked.emit();\n }\n }\n\n public onSelectClicked(event: Event): void {\n event.stopPropagation();\n this.selectClicked.emit();\n }\n\n public isEmpty(): boolean {\n return this.inputChips?.length < 1;\n }\n\n public getButtonValue(): string {\n return this.isEmpty() ? this.SELECT_TRANSLATION_KEY : this.EDIT_TRANSLATION_KEY;\n }\n\n public removeChip(id: number): void {\n this.overflowChipTrigger?.closeMenu();\n\n const newValue = this.ngControl.value.filter((value: any, index: number) => (this.hasUniqueId ? value.id : index) !== id);\n this.updateValue(newValue.length === 0 ? null : newValue);\n const removedOption = this.formControl?.options.find((item: MatOption, index: number) => (this.hasUniqueId ? item.value.id : index) === id);\n removedOption?.deselect();\n\n setTimeout(() => this.setVisibleInputChips());\n }\n\n public deleteSelection(event: Event): void {\n event.stopPropagation();\n this.overflowChipTrigger?.closeMenu();\n\n if (this.clearClicked.observed) {\n this.clearClicked.emit();\n this.ngControl?.control?.markAsTouched();\n } else {\n this.deleteValue();\n setTimeout(() => this.setVisibleInputChips());\n }\n }\n\n public deleteAllSelection(event: MouseEvent): void {\n event.stopPropagation();\n\n this.ngControl?.control?.reset();\n this.ngControl?.control?.markAsTouched();\n this.inputChips = [];\n\n if (this.clearClicked.observed) {\n this.clearClicked.emit();\n }\n }\n\n public getOverflowChips(): CurrentSelection[] {\n const overflowChips = this.visibleInputChipComponents?.filter((component: InputChipComponent) => (component.elementRef?.nativeElement as HTMLElement)?.classList?.contains('hidden'));\n return (\n overflowChips\n ?.map((_: InputChipComponent, index: number) => this.inputChips[this.inputChips.length - overflowChips.length + index])\n .filter((value: CurrentSelection) => !AssertionUtils.isNullOrUndefined(value)) ?? []\n );\n }\n\n public getPlaceholderText(): string {\n if (!AssertionUtils.isEmpty(this.placeHolderText)) {\n return this.placeHolderText;\n }\n\n return this.translate.instant(\n this.canShowBMSTheme && this.canShowMultiSelectPlaceHolder ? 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.SELECT_ONE_OR_MORE_OBJECT' : 'ANGULAR_COMPONENT_LIBRARY.OBJECT_SELECTION.SELECT_OBJECT',\n {\n object: this.objectName\n }\n );\n }\n\n public canShowIndeterminate(): boolean {\n const selectedOptionsLength = this.ngControl.value?.length;\n return selectedOptionsLength > 0 && selectedOptionsLength !== this.listOfOptions.length;\n }\n\n public canShowChecked(): boolean {\n const selectedOptionsLength = this.ngControl.value?.length;\n return selectedOptionsLength === this.listOfOptions.length;\n }\n\n public selectAll(matCheckboxChange: MatCheckboxChange): void {\n if (matCheckboxChange.checked) {\n this.formControl.options.forEach((item: MatOption) => item.select());\n } else {\n this.formControl.options.forEach((item: MatOption) => item.deselect());\n }\n }\n\n public openDetails(event: PointerEvent, value: any): void {\n event.preventDefault();\n event.stopPropagation();\n const url = this.getInputChipUrl(value);\n this.router.navigateByUrl(url);\n }\n\n public getTranslation(value: any): string {\n return this.setInputChipArray([value])[0].value;\n }\n\n public isColor(value: any): boolean {\n return value instanceof Color;\n }\n\n public resetFilterText(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.filteredText = '';\n }\n\n public canShowNoResult(): boolean {\n return !AssertionUtils.isEmpty(this.filteredText) && this.listOfOptions?.filter((option: any) => (option.name ?? option).toLowerCase().includes(this.filteredText.toLowerCase())).length === 0;\n }\n\n private setInputChips(): void {\n const formControlValue = this.ngControl?.value;\n if (Array.isArray(formControlValue) && formControlValue.length > 1) {\n this.multiSelect = true;\n this.inputChips = this.setInputChipArray(formControlValue);\n } else if (formControlValue) {\n this.inputChips = this.setInputChipArray(formControlValue.length <= 1 ? [...formControlValue] : [formControlValue]);\n } else {\n this.inputChips = [];\n }\n }\n\n private setInputChipArray(array: any[]): CurrentSelection[] {\n const inputChips = array.map((value: any, index: number) => {\n this.hasUniqueId = !this.translationKey && !!value.id;\n const chipValueKey = this.chipValueKey;\n const conditionalChipValueKey = this.conditionalChipValueKey;\n const translationKey = this.translationKey;\n\n if (chipValueKey) {\n return this.setInputChipsForChipValueKey(chipValueKey, value, index);\n } else if (conditionalChipValueKey && AssertionUtils.isNullOrUndefined(value.name)) {\n return this.setInputChipsForChipValueKey(conditionalChipValueKey, value, index);\n } else if (translationKey) {\n return this.setInputChipsForTranslationKey(value, index);\n } else if (AssertionUtils.isNullOrUndefined(value.name)) {\n return this.setInputChipsForValue(value, index);\n }\n\n return this.setInputChipsForName(value, index);\n });\n\n const uniqueInputChips = this.getUniqueInputChips(inputChips);\n\n return this.hasUniqueId\n ? [...uniqueInputChips.sort((valueA: CurrentSelection, valueB: CurrentSelection) => StringUtils.stringEndingWithNumberComparator(valueA.value, valueB.value))]\n : uniqueInputChips;\n }\n\n private setInputChipsForChipValueKey(replacementKey: string, value: any, index: number): CurrentSelection {\n return {\n id: value.id || index,\n value: replacementKey.replace(/%\\((.*?)\\)/g, (_: string, placeholder: string) => value[placeholder]),\n url: this.getInputChipUrl(value),\n colorInHex: value instanceof Color ? value.hexadecimalColorCode : null\n } as CurrentSelection;\n }\n\n private setInputChipsForTranslationKey(value: any, index: number): CurrentSelection {\n return {\n id: index,\n value: this.translate.instant(`${this.translationKey}.${value}`),\n url: this.getInputChipUrl(value),\n colorInHex: value instanceof Color ? value.hexadecimalColorCode : null\n };\n }\n\n private setInputChipsForValue(value: any, index: number): CurrentSelection {\n return {\n id: value.id || index,\n value,\n url: this.getInputChipUrl(value),\n colorInHex: value instanceof Color ? value.hexadecimalColorCode : null\n };\n }\n\n private setInputChipsForName(value: any, index: number): CurrentSelection {\n return {\n id: value.id || index,\n value: value.name || value,\n url: this.getInputChipUrl(value),\n colorInHex: value instanceof Color ? value.hexadecimalColorCode : null\n };\n }\n\n private getUniqueInputChips(chips: CurrentSelection[]): CurrentSelection[] {\n return chips.reduce((previousValue: CurrentSelection[], currentValue: CurrentSelection) => {\n if (!previousValue.some((value: CurrentSelection) => value.id === currentValue.id)) {\n previousValue.push(currentValue);\n }\n return previousValue;\n }, []);\n }\n\n private setVisibleInputChips(): void {\n const availableWidthInputChips = this.inputFieldElement?.nativeElement.offsetWidth - this.reservedWidthInsideInputField;\n\n this.overflowAmount = 0;\n let usedWidthByInputChips = 0;\n let index = 0;\n\n for (const component of this.visibleInputChipComponents) {\n const htmlComponent = component.elementRef?.nativeElement as HTMLElement;\n\n if (AssertionUtils.isNullOrUndefined(htmlComponent)) {\n continue;\n }\n\n htmlComponent.classList.remove('hidden');\n htmlComponent.style.width = 'fit-content';\n\n const chipWidth = htmlComponent.offsetWidth + 1;\n const overflowButtonWidth = index === this.visibleInputChipComponents.length - 1 ? 0 : this.inputFieldOverflowButtonWidth + this.inputFieldGapWidth;\n const availableWidth = availableWidthInputChips - usedWidthByInputChips - overflowButtonWidth;\n\n if (availableWidth > chipWidth) {\n usedWidthByInputChips += chipWidth + this.inputFieldGapWidth;\n } else if (availableWidth > this.INPUT_CHIP_OVERFLOW_MIN_WIDTH || this.inputChips.length === 1) {\n htmlComponent.style.width = this.inputChips.length === 1 ? '100%' : `${this.INPUT_CHIP_OVERFLOW_MIN_WIDTH}px`;\n usedWidthByInputChips += this.INPUT_CHIP_OVERFLOW_MIN_WIDTH + this.inputFieldGapWidth;\n } else if (index === 0) {\n htmlComponent.style.width = `${availableWidth}px`;\n usedWidthByInputChips += availableWidth + this.inputFieldGapWidth;\n } else {\n htmlComponent.classList.add('hidden');\n usedWidthByInputChips += chipWidth + this.inputFieldGapWidth;\n this.overflowAmount += 1;\n }\n\n index = index + 1;\n }\n\n this.changeDetectorRef.detectChanges();\n }\n\n private getInputChipUrl(value: any): string {\n if (value.parentId) {\n this.baseRouterLink = this.baseRouterLink.replace(':id', ':parentId');\n }\n\n return this.baseRouterLink\n ? this.baseRouterLink.replace(/:(\\w+)/g, (_: string, key: string) => {\n if (key === 'machineType') {\n if (!AssertionUtils.isNullOrUndefined(value['machineType'])) {\n return value['machineType'].replace('_', '-').toLowerCase();\n } else if (!AssertionUtils.isNullOrUndefined(value['type'])) {\n return value['type'].replace('_', '-').toLowerCase();\n }\n }\n\n return value[key];\n })\n : '';\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {Pattern} from './pattern.enum';\n\n@Component({\n selector: 'vdw-pattern',\n templateUrl: './pattern.component.html',\n styleUrls: ['./pattern.component.scss']\n})\nexport class PatternComponent {\n @Input() public pattern: Pattern;\n\n public getPatternImage(): string {\n switch (this.pattern) {\n case Pattern.LINE:\n return 'line-pattern';\n case Pattern.STRIPED:\n return 'striped-pattern';\n case Pattern.DOTTED:\n return 'dotted-pattern';\n case Pattern.DIAGONAL:\n return 'diagonal-pattern';\n }\n }\n}\n","\n","export enum Pattern {\n NONE,\n LINE,\n STRIPED,\n DOTTED,\n DIAGONAL\n}\n","export enum ButtonSize {\n SMALL = 'SMALL',\n MEDIUM = 'MEDIUM',\n LARGE = 'LARGE'\n}\n","\n \n\n\n \n\n\n
\n \n \n \n {{ label | bmsTranslate: labelReplaceableValues }}\n \n
\n \n
\n","import {Component, Input, Output} from '@angular/core';\nimport {Subject} from 'rxjs';\nimport {ButtonSize} from './button-size.enum';\n\n@Component({\n selector: 'vdw-progress-button',\n templateUrl: './progress-button.component.html',\n styleUrls: ['./progress-button.component.scss']\n})\nexport class ProgressButtonComponent {\n @Input() public inProgress = false;\n @Input() public label = 'ANGULAR_COMPONENT_LIBRARY.PROGRESS_BUTTON.SAVE';\n @Input() public class = '';\n @Input() public disabled = false;\n @Input() public raisedButton = true;\n @Input() public labelReplaceableValues = {};\n @Input() public tabIndex = 0;\n @Input() public fullWidth = false;\n @Input() public invalid = false;\n @Input() public hasIcon = false;\n @Input() public iconName: string;\n @Input() public buttonSize: ButtonSize = ButtonSize.LARGE;\n @Input() public canShowBMSTheme = false;\n @Output() public progressClick: Subject = new Subject();\n\n public isInProgress(): boolean {\n return this.inProgress;\n }\n\n public isDisabled(): boolean {\n return this.disabled;\n }\n\n public getButtonWidth(): string {\n return this.fullWidth ? '100%' : 'auto';\n }\n\n public startProgress(): void {\n if (!this.isInProgress()) {\n this.progressClick.next();\n }\n }\n\n public isRaisedButton(): boolean {\n return this.raisedButton;\n }\n\n public getSpinnerDiameter(): number {\n if (!this.canShowBMSTheme) {\n return 44;\n }\n return this.class.includes('compact') ? 12 : 14;\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'vdw-progress-spinner',\n templateUrl: './progress-spinner.component.html',\n styleUrls: ['./progress-spinner.component.scss']\n})\nexport class ProgressSpinnerComponent {\n @Input() public stroked = false;\n @Input() public compact = false;\n @Input() public invalid = false;\n}\n","
\n \n \n
\n","import {Component, EventEmitter, Inject, Input, OnDestroy, Output} from '@angular/core';\nimport {MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {Observable, Subject} from 'rxjs';\nimport {SelectionListItem} from '../selection-list/selection-list-item.interface';\nimport {SelectionListContainerData} from './selection-list-container-data.interface';\n\n@Component({\n selector: 'vdw-selection-list-container',\n templateUrl: './selection-list-container.component.html',\n styleUrls: ['./selection-list-container.component.scss']\n})\nexport class SelectionListContainerComponent implements OnDestroy {\n @Input() public maxHeight: string;\n @Input() public containerTitle: string;\n @Input() public selectListOptions: SelectionListItem[];\n @Output() public selectListOptionsChanged = new EventEmitter();\n\n private readonly selectOptionsChanges = new Subject();\n\n public constructor(@Inject(MAT_DIALOG_DATA) data: SelectionListContainerData) {\n this.maxHeight = data?.maxHeight;\n this.selectListOptions = data.options;\n this.containerTitle = data.containerTitle;\n }\n\n public ngOnDestroy(): void {\n this.selectOptionsChanges.complete();\n }\n\n public getValue(): Observable {\n return this.selectOptionsChanges.asObservable();\n }\n\n public onSelectOptionChanged(update: SelectionListItem[]): void {\n this.selectListOptionsChanged.emit(update);\n this.selectOptionsChanges.next(update);\n }\n}\n","
\n {{ containerTitle | bmsTranslate }}\n \n
\n","
    \n
  • \n {{ option?.translation ?? option.name | bmsTranslate }}\n
  • \n
\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {SelectionListItem} from './selection-list-item.interface';\n\n@Component({\n selector: 'vdw-selection-list',\n templateUrl: './selection-list.component.html',\n styleUrls: ['./selection-list-component.scss']\n})\nexport class SelectionListComponent {\n @Input() public options: SelectionListItem[];\n @Output() public optionsChanged = new EventEmitter();\n public value: {[key: string]: boolean} = {something: true};\n\n public onSelectionChanged(optionKey: string, event: any): void {\n this.options.find((option: SelectionListItem) => option.name === optionKey).value = event.checked;\n this.optionsChanged.emit(this.options);\n }\n}\n","\r\n\r\n@if (showSettingsDialog()) {\r\n
\r\n
\r\n
\r\n \r\n
\r\n @if (showCustomSettingsButton) {\r\n
\r\n \r\n
\r\n }\r\n
\r\n}\r\n","import {ChangeDetectionStrategy, Component, EventEmitter, Input, Output, signal, WritableSignal} from '@angular/core';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatTooltipModule} from '@angular/material/tooltip';\r\nimport {TranslationModule} from '../../translation/translation.module';\r\n\r\n@Component({\r\n selector: 'vdw-settings-icon-button',\r\n templateUrl: 'settings-icon-button.component.html',\r\n styleUrl: 'settings-icon-button.component.scss',\r\n standalone: true,\r\n imports: [MatIconModule, MatButtonModule, MatTooltipModule, TranslationModule],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SettingsIconButtonComponent {\r\n @Input() public alignRight: boolean = false;\r\n @Input() public showCustomSettingsButton: boolean;\r\n @Output() public customSettingsButtonClicked: EventEmitter = new EventEmitter();\r\n\r\n protected showSettingsDialog: WritableSignal = signal(false);\r\n\r\n protected toggleSettingsDialog(): void {\r\n this.showSettingsDialog.update((show: boolean) => !show);\r\n }\r\n}\r\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {MatSlideToggleChange} from '@angular/material/slide-toggle';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Component({\n selector: 'vdw-slide-toggle',\n templateUrl: './slide-toggle.component.html',\n styleUrls: ['./slide-toggle.component.scss']\n})\nexport class SlideToggleComponent {\n @Input() public checked = true;\n @Input() public disabled = false;\n @Input() public isInteractable = true;\n @Input() public label = 'ANGULAR_COMPONENT_LIBRARY.SLIDE_TOGGLE.SHOW_LATEST_VERSION';\n\n @Output() public checkedChange = new EventEmitter();\n @Output() public afterCheckedChange: EventEmitter = new EventEmitter();\n\n public toggleButtonClicked(change: MatSlideToggleChange): void {\n this.checkedChange.emit(change.checked);\n\n setTimeout(() => this.afterCheckedChange.emit(change.checked), 0);\n }\n\n public hasLabel(): boolean {\n return !AssertionUtils.isEmpty(this.label);\n }\n}\n","
\n {{ label | bmsTranslate }}\n
\n","
\n \n \n \n \n \n \n \n
\n\n\n \n \n \n \n \n\n\n\n","import {Component, EventEmitter, Input, Output, ViewChild} from '@angular/core';\nimport {MatMenuTrigger} from '@angular/material/menu';\n\n@Component({\n selector: 'vdw-split-button',\n templateUrl: './split-button.component.html'\n})\nexport class SplitButtonComponent {\n @ViewChild('otherOptionsTrigger', {read: MatMenuTrigger}) public otherOptionsTrigger: MatMenuTrigger;\n @Input() public label: string;\n @Input() public stroked = false;\n @Input() public disabled = false;\n @Input() public compact = false;\n @Input() public inProgress = false;\n @Input() public withOpenDropdown = false;\n @Output() public buttonClicked = new EventEmitter();\n\n public onButonClicked(): void {\n if (!this.inProgress) {\n this.withOpenDropdown ? this.otherOptionsTrigger.openMenu() : this.buttonClicked.emit();\n }\n }\n}\n","export enum StatusBarSize {\n LARGE = 'LARGE',\n DEFAULT = 'DEFAULT',\n COMPACT = 'COMPACT'\n}\n","
\n
\n
\n

{{ title }}

\n
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.GROUPED_ROWS' | bmsTranslate }}:
\n
{{ statusBar?.totalGroupedRows }}
\n
\n
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.ROWS' | bmsTranslate }}:
\n
{{ statusBar?.totalRows }}
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.FILTERED' | bmsTranslate }}:
\n
{{ statusBar?.filteredRows }}
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.SELECTED' | bmsTranslate }}:
\n
{{ selectedRows ?? null }}
\n
\n
\n
\n {{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.ONLY_SHOW_SELECTED' | bmsTranslate }}:\n \n
\n
\n\n
\n
\n \n \n
\n \n
\n
\n\n \n
\n
\n\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.ROWS' | bmsTranslate }}:
\n
{{ statusBar?.totalRows }}
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.GROUPS' | bmsTranslate }}:
\n
{{ statusBar?.totalGroupedRows ?? 0 }}
\n
\n
\n
{{ 'ANGULAR_COMPONENT_LIBRARY.STATUS_BAR.FILTER_RESULTS' | bmsTranslate }}:
\n
{{ statusBar?.filteredRows }}
\n
\n
\n","import {Component, EventEmitter, Input, OnChanges, Output, SimpleChanges} from '@angular/core';\nimport {ColDef, GridApi, GridOptions} from 'ag-grid-community';\nimport {PropertyValue} from '../../common/data/property-value.interface';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {GridModel} from '../../grids/floating-filters/data/grid-model';\nimport {StatusBar} from './status-bar';\nimport {StatusBarSize} from './status-bar-size.enum';\n\n@Component({\n selector: 'vdw-status-bar',\n templateUrl: './status-bar.component.html',\n styleUrls: ['./status-bar.component.scss']\n})\nexport class StatusBarComponent implements OnChanges {\n @Input() public title: string;\n @Input() public statusBar: StatusBar;\n @Input() public selectedRows: number;\n @Input() public gridModel: GridModel;\n @Input() public advancedSearchFilters: PropertyValue[] = [];\n @Input() public gridApi: GridApi;\n @Input() public detailGridOptions: GridOptions;\n @Input() public initialToggleSelected: boolean;\n @Input() public canShowOnlyShowSelectedToggle = false;\n @Input() public canShowBMSTheme = false;\n @Input() public size: StatusBarSize = StatusBarSize.DEFAULT;\n @Output() public updateGrid: EventEmitter = new EventEmitter();\n @Output() public toggleSelected: EventEmitter = new EventEmitter();\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (!AssertionUtils.isNullOrUndefined(this.gridApi) && !AssertionUtils.isNullOrUndefined(this.gridModel) && ('gridModel' in changes || 'gridApi' in changes)) {\n this.advancedSearchFilters = [];\n this.getAdvancedSearchFiltersFromGridModel();\n }\n }\n\n public hasMultipleChips(): boolean {\n return this.advancedSearchFilters.length > 1;\n }\n\n public canShowOnlySelected(): boolean {\n return AssertionUtils.isNullOrUndefined(this.detailGridOptions) && this.canShowOnlyShowSelectedToggle;\n }\n\n public totalGroupedRowsIsDefined(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.statusBar?.totalGroupedRows);\n }\n\n public getAdvancedSearchFiltersFromGridModel(): void {\n const columnsDefs = this.gridApi.getColumnDefs();\n let key: any;\n let value: any;\n for ([key, value] of Object.entries(this.gridModel.filterModel)) {\n const colDef = columnsDefs.filter((columnDef: ColDef) => {\n return columnDef.colId === key;\n });\n\n if (!AssertionUtils.isNullOrUndefined(colDef[0]?.headerName) && !AssertionUtils.isNullOrUndefined(value?.filterModels)) {\n if (!AssertionUtils.isNullOrUndefined(value.filterModels[0]?.filter)) {\n this.advancedSearchFilters.push({propertyName: key, propertyValue: value.filterModels[0].filter, headerName: colDef[0].headerName, filterType: value.filterModels[0].type});\n }\n\n if (!AssertionUtils.isNullOrUndefined(value.filterModels[1]?.values)) {\n this.advancedSearchFilters.push({propertyName: key, propertyValue: value.filterModels[1].values, headerName: colDef[0].headerName});\n }\n }\n }\n }\n\n public getLabelForFilter(chip: PropertyValue): string {\n let symbol = '';\n if (chip?.filterType === 'greaterThan') {\n symbol = ' > ';\n } else if (chip?.filterType === 'lessThan') {\n symbol = ' < ';\n } else if (chip?.filterType === 'greaterThanOrEqual') {\n symbol = ' >= ';\n } else if (chip?.filterType === 'lessThanOrEqual') {\n symbol = ' <= ';\n } else if (chip?.filterType === 'notEqual') {\n symbol = ' != ';\n }\n\n const label = `${chip.headerName} (${symbol}${chip.propertyValue})`;\n return label.split(',').join(', ');\n }\n\n public showSelectedRows(checked: boolean): void {\n this.toggleSelected.emit(checked);\n }\n\n public deleteFilter(propertyValue: PropertyValue | string): void {\n if (typeof propertyValue === 'string') {\n let property: PropertyValue;\n this.advancedSearchFilters.forEach((value: PropertyValue) => {\n const labelValue = this.getLabelForFilter(value);\n if (labelValue === propertyValue) {\n property = value;\n }\n });\n\n this.advancedSearchFilters = this.advancedSearchFilters.filter((value: PropertyValue) => {\n return value !== property;\n });\n\n delete this.gridModel.filterModel[`${property.propertyName}`];\n } else {\n this.advancedSearchFilters = this.advancedSearchFilters.filter((value: PropertyValue) => {\n return value !== propertyValue;\n });\n\n delete this.gridModel.filterModel[`${propertyValue.propertyName}`];\n }\n\n this.updateGrid.emit(this.gridModel);\n }\n\n public deleteAllFilters(): void {\n this.gridModel.filterModel = null;\n\n this.updateGrid.emit(this.gridModel);\n }\n}\n","\n @if (label !== '') {\n {{ label }}\n }\n \n\n @if (ngControl?.control.value && !ngControl?.control.disabled) {\n \n }\n\n \n \n \n @if (!ngControl?.control.disabled) {\n \n \n \n }\n\n","import {Component, Input, OnDestroy, OnInit, Optional, Self} from '@angular/core';\nimport {NgControl} from '@angular/forms';\nimport {MatFormFieldControl} from '@angular/material/form-field';\nimport {MatFormFieldControlHelper} from '../helper/form-field-control-helper';\n\n@Component({\n selector: 'vdw-string-input',\n templateUrl: './string-input.component.html',\n providers: [{provide: MatFormFieldControl, useExisting: StringInputComponent}]\n})\nexport class StringInputComponent extends MatFormFieldControlHelper implements OnInit, OnDestroy {\n @Input() public label: string = '';\n @Input() public set placeholder(value: string) {\n super.placeholder = value;\n }\n\n public constructor(@Optional() @Self() public readonly ngControl: NgControl) {\n super(ngControl);\n }\n\n public ngOnInit(): void {\n super.init();\n }\n\n public get placeholder(): string {\n return super.placeholder;\n }\n\n public reset(): void {\n this.ngControl.control.reset();\n }\n\n public ngOnDestroy(): void {\n super.destroy();\n }\n}\n","import {Component, EventEmitter, Input, OnInit, Output} from '@angular/core';\r\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\r\nimport {TabsMenuItem} from '../tabs-menu/tabs-menu-item';\r\nimport {TabsMenuModule} from '../tabs-menu/tabs-menu.module';\r\n\r\n@Component({\r\n selector: 'vdw-tabs-and-actions-header',\r\n templateUrl: 'tabs-and-actions-header.component.html',\r\n styleUrl: 'tabs-and-actions-header.component.scss',\r\n standalone: true,\r\n imports: [TabsMenuModule]\r\n})\r\nexport class TabsAndActionsHeaderComponent implements OnInit {\r\n @Input() public menuItems: TabsMenuItem[];\r\n @Input() public selectedMenuItem: TabsMenuItem;\r\n @Output() public selectedMenuItemChange: EventEmitter = new EventEmitter();\r\n\r\n protected showMenuItems: boolean;\r\n\r\n public ngOnInit(): void {\r\n this.showMenuItems = !AssertionUtils.isEmpty(this.menuItems);\r\n }\r\n}\r\n","
\r\n \r\n\r\n
\r\n \r\n
\r\n
\r\n","export class HeaderButtons {\n public back = false;\n public cancel = false;\n public delete = false;\n public duplicate = false;\n public save = false;\n public saveAndClose = false;\n public saveAndCreateNew = false;\n public choose = false;\n public settings = false;\n public inUse = false;\n}\n","\n \n \n \n 0\">\n \n \n \n\n","import {Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {HeaderAction} from '../header/header-action';\nimport {HeaderButtons} from '../header/header-button';\nimport {HeaderTabIndex} from '../header/header-tab-index';\nimport {TabsMenuItem} from '../tabs-menu/tabs-menu-item';\n\n@Component({\n selector: 'vdw-tabs-menu-card',\n templateUrl: './tabs-menu-card.component.html',\n styleUrls: ['./tabs-menu-card.component.scss']\n})\nexport class TabsMenuCardComponent implements OnInit, OnChanges {\n @Input() public title: string;\n @Input() public icon: string;\n @Input() public action: string;\n @Input() public extraInformationTitle: string;\n @Input() public amount: number;\n @Input() public locked: boolean;\n @Input() public isInUse: boolean;\n @Input() public menuItems: TabsMenuItem[];\n @Input() public selectedMenuItem: TabsMenuItem;\n @Input() public invalidFormMessageError: string;\n @Input() public isLoading: boolean;\n @Input() public hasPermissionToEdit = true;\n @Input() public canShowCustomSettings = true;\n @Input() public canShowCancel = true;\n @Input() public canShowDelete = true;\n @Input() public canShowDuplicate = true;\n @Input() public canShowSave = true;\n @Input() public canShowSaveAndCreateNew = true;\n @Input() public canShowBackButton = true;\n @Input() public headerTabIndex: HeaderTabIndex = {tabIndexSave: 0, tabIndexCancel: 0, tabIndexCustomSettings: 0};\n @Input() public headerActions: HeaderAction[];\n @Input() public isCreateNewPage: boolean;\n @Input() public showCustomErrorMessage = false;\n @Input() public customErrorMessage: string;\n @Input() public saving: string;\n @Input() public identifier: string;\n @Input() public settingsTooltip: string;\n @Input() public actionText = 'ANGULAR_COMPONENT_LIBRARY.HEADER.SAVE';\n @Output() public selectedMenuItemChange: EventEmitter = new EventEmitter();\n @Output() public backEvent: EventEmitter = new EventEmitter();\n @Output() public cancelEvent: EventEmitter = new EventEmitter();\n @Output() public saveEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCloseEvent: EventEmitter = new EventEmitter();\n @Output() public saveAndCreateNewEvent: EventEmitter = new EventEmitter();\n @Output() public deleteEvent: EventEmitter = new EventEmitter();\n @Output() public duplicateEvent: EventEmitter = new EventEmitter();\n @Output() public settingsEvent: EventEmitter = new EventEmitter();\n @Output() public inUseEvent: EventEmitter = new EventEmitter();\n public headerButtons: HeaderButtons;\n\n public ngOnInit(): void {\n this.headerButtons = new HeaderButtons();\n this.headerButtons.back = this.canShowBackButton && this.backEvent.observed;\n this.headerButtons.cancel = this.canShowCancel && this.cancelEvent.observed;\n this.headerButtons.delete = this.canShowDelete && this.deleteEvent.observed;\n this.headerButtons.duplicate = this.canShowDuplicate && this.duplicateEvent.observed;\n this.headerButtons.save = this.canShowSave && this.saveEvent.observed;\n this.headerButtons.saveAndClose = this.canShowSave && this.saveAndCloseEvent.observed;\n this.headerButtons.saveAndCreateNew = this.canShowSaveAndCreateNew && this.saveAndCreateNewEvent.observed;\n this.headerButtons.settings = this.canShowCustomSettings && this.settingsEvent.observed;\n this.headerButtons.inUse = this.inUseEvent.observed;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (changes.canShowCancel && !changes.canShowCancel.isFirstChange()) {\n this.headerButtons.cancel = changes.canShowCancel.currentValue && this.cancelEvent.observed;\n }\n\n if (changes.canShowDelete && !changes.canShowDelete.isFirstChange()) {\n this.headerButtons.delete = changes.canShowDelete.currentValue && this.deleteEvent.observed;\n }\n\n if (changes.canShowSave && !changes.canShowSave.isFirstChange()) {\n this.headerButtons.save = changes.canShowSave.currentValue && this.saveEvent.observed;\n }\n }\n\n public selectMenuItem(menuItem: TabsMenuItem): void {\n this.selectedMenuItemChange.emit(menuItem);\n }\n\n public cancelButtonClicked(): void {\n this.cancelEvent.emit();\n }\n\n public deleteButtonClicked(): void {\n this.deleteEvent.emit();\n }\n\n public backButtonClicked(): void {\n this.backEvent.emit();\n }\n\n public duplicateButtonClicked(): void {\n this.duplicateEvent.emit();\n }\n\n public saveButtonClicked(): void {\n this.saveEvent.emit();\n }\n\n public saveAndCloseButtonClicked(): void {\n this.saveAndCloseEvent.emit();\n }\n\n public saveAndCreateNewButtonClicked(): void {\n this.saveAndCreateNewEvent.emit();\n }\n\n public settingsButtonClicked(): void {\n this.settingsEvent.emit();\n }\n\n public inUseButtonClicked(): void {\n this.inUseEvent.emit();\n }\n}\n","@if (menuItems) {\n \n\n \n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {FormArray, FormGroup} from '@angular/forms';\nimport {TabsMenuItem} from './tabs-menu-item';\n\n@Component({\n selector: 'vdw-tabs-menu',\n templateUrl: './tabs-menu.component.html'\n})\nexport class TabsMenuComponent {\n @Input() public menuItems: TabsMenuItem[] = [];\n @Input() public selectedMenuItem: TabsMenuItem;\n @Output() public selectedMenuItemChange: EventEmitter = new EventEmitter();\n\n public isMenuItemSelected(menuItem: TabsMenuItem): boolean {\n return menuItem.value === this.selectedMenuItem.value;\n }\n\n public selectMenuItem(menuItem: TabsMenuItem): void {\n if (!menuItem.disabled) {\n if (this.selectedMenuItem?.form) {\n this.selectedMenuItem.form.markAllAsTouched();\n }\n this.selectedMenuItemChange.emit(menuItem);\n }\n }\n\n public canShowTabError(menuItem: TabsMenuItem): boolean {\n return !!menuItem.canShowTabError || (!!menuItem.form && menuItem.form.invalid && !menuItem.form.disabled && this.isEveryFormControlInFormGroupTouched(menuItem.form));\n }\n\n private isEveryFormControlInFormGroupTouched(form: FormGroup | FormArray): boolean {\n return Object.keys(form.controls).every((controlName: string) => {\n return form.get(controlName) instanceof FormGroup || form.get(controlName) instanceof FormArray\n ? this.isEveryFormControlInFormGroupTouched(form.get(controlName) as FormGroup)\n : form.get(controlName).touched;\n });\n }\n}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatTabsModule} from '@angular/material/tabs';\nimport {TranslationModule} from '../../translation/translation.module';\nimport {TabsMenuComponent} from './tabs-menu.component';\n\n@NgModule({\n declarations: [TabsMenuComponent],\n imports: [CommonModule, MatTabsModule, TranslationModule],\n exports: [TabsMenuComponent]\n})\nexport class TabsMenuModule {}\n","export enum TagColor {\n PRIMARY = 'primary',\n SECONDARY = 'secondary',\n SUCCESS = 'success',\n WARNING = 'warning',\n ERROR = 'error',\n AQUA = 'aqua',\n TEAL = 'teal',\n YELLOW = 'yellow',\n PINK = 'pink',\n PURPLE = 'purple',\n VIOLET = 'violet'\n}\n","export enum TagSize {\n SMALL = 'small',\n MEDIUM = 'medium',\n LARGE = 'large'\n}\n","import {Component, HostBinding, Input} from '@angular/core';\nimport {TagColor} from './tag-color.enum';\nimport {TagSize} from './tag-size.enum';\n\n@Component({\n selector: 'vdw-tag',\n templateUrl: './tag.component.html',\n styleUrls: ['./tag.component.scss']\n})\nexport class TagComponent {\n @Input() public value = '';\n @Input() public color: TagColor = TagColor.PRIMARY;\n @Input() public size: TagSize = TagSize.SMALL;\n\n @HostBinding('class') public get class(): string {\n return `${this.size} ${this.color}`;\n }\n}\n","
\n

\n {{ value }}\n

\n
\n","\n @if (label !== '') {\n {{ label }}\n }\n \n @if (form.value[controlName]) {\n \n }\n \n \n \n \n \n \n \n \n\n\n@if (canShowMenu) {\n \n}\n","import {Component, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {AbstractControl, FormGroup} from '@angular/forms';\nimport moment from 'moment';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {timeValidator} from '../../common/validators/time-validator';\n\n@Component({\n selector: 'vdw-time-picker-form-input',\n templateUrl: 'time-picker-form-input.component.html',\n styleUrl: 'time-picker-form-input.component.scss'\n})\nexport class TimePickerFormInputComponent implements OnInit, OnChanges {\n @Input() public label: string = '';\n @Input() public form: FormGroup;\n @Input() public controlName: string;\n @Input() public notation: 12 | 24;\n @Input() public defaultTime = '00:00';\n @Output() public inputBlur = new EventEmitter();\n\n public canShowMenu = false;\n public fieldFocused = false;\n public menuFocused = false;\n public get timeControl(): AbstractControl {\n return this.form.controls[this.controlName];\n }\n\n @HostListener('document:click') public onClick(): void {\n this.updateCanShowMenu();\n }\n\n @HostListener('document:keyup', ['$event']) public onKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Tab') {\n this.updateCanShowMenu();\n }\n }\n\n public ngOnInit(): void {\n this.timeControl.addValidators(timeValidator(this.notation));\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('notation' in changes && !AssertionUtils.isNullOrWhitespace(this.timeControl.value)) {\n this.timeControl.setValue(moment(this.timeControl.value, ['HH:mm', 'hh:mm A']).format(changes.notation.currentValue === 12 ? 'h:mm A' : 'HH:mm'));\n }\n }\n\n public getSelectedTime(): string {\n return this.timeControl.hasError('invalidTimeFormat') ? null : this.timeControl.value;\n }\n\n private updateCanShowMenu(): void {\n if (this.canShowMenu && !this.fieldFocused && !this.menuFocused) {\n this.canShowMenu = false;\n this.inputBlur.emit();\n }\n this.fieldFocused = false;\n this.menuFocused = false;\n }\n}\n","import {AbstractControl, ValidationErrors, ValidatorFn} from '@angular/forms';\nimport {AssertionUtils} from '../utils/assertion-utils';\n\nexport function timeValidator(notation: 12 | 24): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n if (AssertionUtils.isNullOrWhitespace(control.value)) {\n return null;\n }\n\n const pattern = notation === 12 ? /^(1[0-2]|0?[1-9]):[0-5]\\d\\s?(AM|PM)$/ : /^([0-1]\\d|2[0-3]):[0-5]\\d$/;\n return pattern.test(control.value) ? null : {invalidTimeFormat: true};\n };\n}\n","export class TimePickerConstants {\n public static readonly MIN_HOURS_FOR_12 = 1;\n public static readonly MAX_HOURS_FOR_12 = 12;\n public static readonly MIN_HOURS_FOR_24 = 0;\n public static readonly MAX_HOURS_FOR_24 = 23;\n public static readonly MIN_MINUTES = 0;\n public static readonly MAX_MINUTES = 59;\n public static readonly AM = 'AM';\n public static readonly PM = 'PM';\n}\n","
\n
\n
\n \n \n \n \n \n
\n :\n
\n \n \n \n \n \n
\n @if (notation === 12) {\n
\n \n \n \n \n \n
\n }\n
\n
\n \n
\n
\n \n \n
\n
\n","import {Component, EventEmitter, HostListener, Input, OnChanges, OnInit, Output, SimpleChanges} from '@angular/core';\nimport {FormBuilder, FormControl, FormGroup} from '@angular/forms';\nimport moment from 'moment';\nimport {filter, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {TimePickerConstants} from '../time-picker.constants';\n\n@Component({\n selector: 'vdw-time-picker-menu',\n templateUrl: 'time-picker-menu.component.html',\n styleUrl: 'time-picker-menu.component.scss'\n})\nexport class TimePickerMenuComponent extends BaseComponent implements OnInit, OnChanges {\n @Input() public notation: 12 | 24;\n @Input() public selectedTime: string;\n @Input() public defaultTime = '00:00';\n @Output() public selectedTimeChange = new EventEmitter();\n @Output() public menuFocused = new EventEmitter();\n\n public timeForm: TimeForm;\n\n public constructor(private readonly formBuilder: FormBuilder) {\n super();\n }\n\n @HostListener('click') public click(): void {\n this.menuFocused.emit();\n }\n\n @HostListener('keyup', ['$event']) public onKeyUp(event: KeyboardEvent): void {\n if (event.key === 'Tab') {\n this.menuFocused.emit();\n }\n }\n\n public ngOnInit(): void {\n this.setFormFields();\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('selectedTime' in changes && !changes.selectedTime.isFirstChange()) {\n this.setFormValues();\n }\n }\n\n public increase(formControlName: string): void {\n let newValue = parseInt(this.timeForm.value[formControlName]) + 1;\n newValue = newValue > this.getMaxValue(formControlName) ? this.getMinValue(formControlName) : newValue;\n this.timeForm.controls[formControlName].setValue(newValue.toString());\n }\n\n public decrease(formControlName: string): void {\n let newValue = parseInt(this.timeForm.value[formControlName]) - 1;\n newValue = newValue < this.getMinValue(formControlName) ? this.getMaxValue(formControlName) : newValue;\n this.timeForm.controls[formControlName].setValue(newValue.toString());\n }\n\n public togglePeriod(): void {\n this.timeForm.controls.period.setValue(this.timeForm.value.period === TimePickerConstants.AM ? TimePickerConstants.PM : TimePickerConstants.AM);\n }\n\n public getMinValue(formControlName: string): number {\n if (formControlName === 'hours') {\n return this.notation === 12 ? TimePickerConstants.MIN_HOURS_FOR_12 : TimePickerConstants.MIN_HOURS_FOR_24;\n } else if (formControlName === 'minutes') {\n return TimePickerConstants.MIN_MINUTES;\n }\n }\n\n public getMaxValue(formControlName: string): number {\n if (formControlName === 'hours') {\n return this.notation === 12 ? TimePickerConstants.MAX_HOURS_FOR_12 : TimePickerConstants.MAX_HOURS_FOR_24;\n } else if (formControlName === 'minutes') {\n return TimePickerConstants.MAX_MINUTES;\n }\n }\n\n public setTime(now: boolean = false): void {\n this.timeForm.setValue(this.getTimeValues(now ? moment() : moment(this.defaultTime, 'HH:mm')));\n }\n\n private setFormFields(): void {\n const {hours, minutes, period} = this.getTimeValues(moment(AssertionUtils.isNullOrWhitespace(this.selectedTime) ? this.defaultTime : this.selectedTime, ['hh:mm A', 'HH:mm']));\n this.timeForm = this.formBuilder.group({\n hours: [hours],\n minutes: [minutes],\n period: [period]\n });\n\n this.timeForm.valueChanges\n .pipe(\n filter(() => this.timeForm.valid),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((time: {hours: string; minutes: string; period: typeof TimePickerConstants.AM | typeof TimePickerConstants.PM}) => {\n this.selectedTimeChange.emit(`${this.notation === 12 ? time.hours.replace(/^0/, '') : time.hours}:${time.minutes}${this.notation === 12 ? ' ' + time.period : ''}`);\n });\n\n this.timeForm.controls.hours.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: string) => {\n this.timeForm.controls.hours.setValue(value.toString().padStart(2, '0'), {emitEvent: false});\n });\n\n this.timeForm.controls.minutes.valueChanges.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe((value: string) => {\n this.timeForm.controls.minutes.setValue(value.toString().padStart(2, '0'), {emitEvent: false});\n });\n }\n\n private setFormValues(): void {\n if (!AssertionUtils.isNullOrWhitespace(this.selectedTime)) {\n this.timeForm.setValue(this.getTimeValues(moment(this.selectedTime, ['hh:mm A', 'HH:mm'])), {emitEvent: false});\n }\n }\n\n private getTimeValues(time: moment.Moment): {hours: string; minutes: string; period: typeof TimePickerConstants.AM | typeof TimePickerConstants.PM} {\n return {hours: time.format(this.notation === 12 ? 'hh' : 'HH'), minutes: time.format('mm'), period: time.format('A') as typeof TimePickerConstants.AM | typeof TimePickerConstants.PM};\n }\n}\n\ntype TimeForm = FormGroup<{hours: FormControl; minutes: FormControl; period: FormControl}>;\n","export enum ZoneInputType {\n FREEZONE = 'freezone',\n RESTZONE = 'restzone'\n}\n","import {Injectable} from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ZoneInputHelperService {\n private popupStates: {[key: string]: boolean} = {};\n private focusStates: {[key: string]: boolean} = {};\n\n public isPopupVisible(key: string): boolean {\n return this.popupStates[key] || false;\n }\n\n public setPopupVisible(key: string, visible: boolean): void {\n this.popupStates[key] = visible;\n }\n\n public isInputFocused(key: string): boolean {\n return this.focusStates[key] || false;\n }\n\n public setInputFocused(key: string, focused: boolean): void {\n this.focusStates[key] = focused;\n }\n}\n","\n
\n {{ getZoneInputErrorLabel() }}\n
\n
\n {{ getZoneInputLabel() }}\n
\n
\n \n \n \n
\n\n","import {AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnChanges, Output, SimpleChanges, ViewChild} from '@angular/core';\nimport {L10nIntlService} from 'angular-l10n';\nimport {Subject} from 'rxjs';\nimport {debounceTime} from 'rxjs/operators';\nimport {convertUnit} from '../../common/converters/convert-unit';\nimport {Unit} from '../../common/unit.enum';\nimport {LocaleUtils} from '../../common/utils/locale-utils';\nimport {TranslateService} from '../../translation/translate.service';\nimport {ZoneInputHelperService} from './helper/zone-input-helper.service';\nimport {ZoneInputType} from './zone-input-type.enum';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\n\n@Component({\n selector: 'vdw-zone-input',\n templateUrl: './zone-input.component.html',\n styleUrls: ['./zone-input.component.scss']\n})\nexport class ZoneInputComponent implements OnChanges, AfterViewInit {\n @Input() public disabled: boolean = false;\n @Input() public commercialValueInMM: number = 0;\n @Input() public technicalValue: number = 0;\n @Input() public maximumTechnicalValue?: number;\n @Input() public zoneType: ZoneInputType = ZoneInputType.FREEZONE;\n @Input() public zoneKey: string;\n\n @Output() public valueChanged = new EventEmitter();\n\n @ViewChild('inputField') public inputField: ElementRef;\n\n public zoneInputType = ZoneInputType;\n public isErrorState: boolean = false;\n\n private technicalValueSubject = new Subject();\n private readonly debounceTimeMs = 500;\n private previousTechnicalValue: number;\n\n public constructor(\n private readonly l10nIntlService: L10nIntlService,\n private readonly translate: TranslateService,\n private readonly zoneInputHelperService: ZoneInputHelperService\n ) {}\n\n public ngAfterViewInit(): void {\n if (this.isPopupVisible) {\n this.setFocus();\n }\n\n this.technicalValueSubject.pipe(debounceTime(this.debounceTimeMs)).subscribe(() => {\n this.validateTechnicalValue();\n });\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if ('technicalValue' in changes && !changes.technicalValue.isFirstChange()) {\n this.validateTechnicalValue();\n } else {\n this.previousTechnicalValue = this.technicalValue;\n }\n }\n\n public onChangeTechnicalValue(): void {\n this.technicalValueSubject.next(this.technicalValue);\n }\n\n public get isPopupVisible(): boolean {\n return this.zoneInputHelperService.isPopupVisible(this.zoneKey);\n }\n\n public set isPopupVisible(visible: boolean) {\n this.zoneInputHelperService.setPopupVisible(this.zoneKey, visible);\n }\n\n public getZoneInputLabel(): string {\n if (AssertionUtils.isNullOrUndefined(this.technicalValue) || this.technicalValue < 0) {\n this.technicalValue = 0;\n }\n\n const isRestZone = this.zoneType === ZoneInputType.RESTZONE;\n\n if (isRestZone) {\n const distanceInCommercialUnit = this.convertValueToCommercialUnit(this.commercialValueInMM, Unit.MILLIMETER, Unit.CENTIMETER);\n return `${this.technicalValue} / ${distanceInCommercialUnit}`;\n }\n\n return `${this.technicalValue}`;\n }\n\n public getZoneInputErrorLabel(): string {\n const max = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.ZONE_INPUT.MAX');\n const unit = this.translate.instant('ANGULAR_COMPONENT_LIBRARY.ZONE_INPUT.UNIT.DENTS');\n\n return `${max} ${this.maximumTechnicalValue} ${unit}`;\n }\n\n public togglePopup(event: Event): void {\n if (this.disabled) {\n return;\n }\n\n event.stopPropagation();\n\n this.isPopupVisible = !this.isPopupVisible;\n\n this.setFocus();\n }\n\n public closePopup(event: Event): void {\n event.stopPropagation();\n this.isPopupVisible = false;\n }\n\n public onPopupClick(event: Event): void {\n event.stopPropagation();\n }\n\n @HostListener('document:click', ['$event'])\n public onDocumentClick(): void {\n if (!this.isPopupVisible) {\n return;\n }\n\n this.isPopupVisible = false;\n }\n\n public validateTechnicalValue(): void {\n if (this.technicalValue < 0) {\n this.technicalValue = 0;\n }\n\n if (!AssertionUtils.isNullOrUndefined(this.maximumTechnicalValue)) {\n this.isErrorState = this.technicalValue > this.maximumTechnicalValue;\n } else {\n this.isErrorState = false;\n }\n\n if (!this.disabled && this.technicalValue !== this.previousTechnicalValue && !AssertionUtils.isEmpty(this.technicalValue.toString()) && !this.isErrorState) {\n this.valueChanged.emit(this.technicalValue);\n this.previousTechnicalValue = this.technicalValue;\n }\n }\n\n private convertValueToCommercialUnit(value: number, fromUnit: Unit, toUnit: Unit): string {\n const convertedValue = convertUnit({\n from: {\n value: value,\n unit: fromUnit\n },\n to: toUnit\n });\n\n const formattedNumber = LocaleUtils.formatNumber(convertedValue, this.l10nIntlService, 2);\n\n return `${formattedNumber}`;\n }\n\n private setFocus(): void {\n if (this.isPopupVisible) {\n setTimeout(() => {\n this.inputField.nativeElement.focus();\n this.zoneInputHelperService.setInputFocused(this.zoneKey, true);\n }, 100);\n }\n }\n}\n","import {AfterContentInit, Directive, ElementRef, Input} from '@angular/core';\nimport {BreakpointResponsivenessViewModeService} from '../../common/responsiveness/breakpoint-responsiveness-view-mode.service';\n\n@Directive({\n selector: '[vdwAutoFocus]'\n})\nexport class AutoFocusDirective implements AfterContentInit {\n @Input() public autoSelect: boolean = false;\n\n public constructor(\n private readonly elementRef: ElementRef,\n private readonly responsivenessViewMode: BreakpointResponsivenessViewModeService\n ) {}\n\n public ngAfterContentInit(): void {\n if (this.responsivenessViewMode.isDesktop) {\n this.setFocus();\n }\n }\n\n private setFocus(): void {\n const delay = this.autoSelect ? 0 : 500;\n setTimeout(() => {\n this.elementRef.nativeElement.focus();\n if (this.autoSelect) {\n this.elementRef.nativeElement.select();\n }\n }, delay);\n }\n}\n","import {Directive, DoCheck, Host, Input, Optional, SkipSelf, TemplateRef, ViewContainerRef} from '@angular/core';\nimport {FormGroupDirective} from '@angular/forms';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {canShowErrorForErrorCodeAndFormControlForFormGroup} from '../../common/validators/can-show-error-for-error-code-and-form-control-for-form-group';\n\n@Directive({\n selector: '[vdwCanShowErrorForFormControl]'\n})\nexport class CanShowErrorForFormControlDirective implements DoCheck {\n @Input('vdwCanShowErrorForFormControl') public formControlName: string;\n @Input('vdwCanShowErrorForFormControlError') public error: string;\n\n private templateRef: TemplateRef;\n private viewContainer: ViewContainerRef;\n private isHidden = true;\n\n public constructor(\n @Optional() @Host() @SkipSelf() private parent: FormGroupDirective,\n templateRef: TemplateRef,\n viewContainer: ViewContainerRef\n ) {\n this.templateRef = templateRef;\n this.viewContainer = viewContainer;\n }\n\n public ngDoCheck(): void {\n if (AssertionUtils.isNullOrUndefined(this.parent) || AssertionUtils.isNullOrUndefined(this.error) || AssertionUtils.isNullOrUndefined(this.formControlName)) {\n // skip evaluation\n return;\n }\n if (canShowErrorForErrorCodeAndFormControlForFormGroup(this.error, this.formControlName, this.parent.control)) {\n if (this.isHidden) {\n this.viewContainer.createEmbeddedView(this.templateRef);\n this.isHidden = false;\n }\n } else {\n this.isHidden = true;\n this.viewContainer.clear();\n }\n }\n}\n","import {AfterViewInit, Directive, ElementRef, HostListener, Input, Optional, Renderer2, SkipSelf} from '@angular/core';\nimport {AbstractControl, NG_VALIDATORS, NgControl, ValidationErrors, Validator} from '@angular/forms';\nimport {L10nIntlService} from 'angular-l10n';\nimport {MimeType} from '../../common/mime-type.enum';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {LocaleUtils} from '../../common/utils/locale-utils';\n\n@Directive({\n selector: 'input[vdwL10nDecimal]',\n providers: [\n {\n provide: NG_VALIDATORS,\n useExisting: InputL10nDecimalDirective,\n multi: true\n }\n ]\n})\nexport class InputL10nDecimalDirective implements Validator, AfterViewInit {\n @Input() public decimals = false;\n @Input() public negativeNumbers = false;\n @Input() public maximumFractionDigits = 13;\n @Input() public canShowArrows = false;\n\n public constructor(\n private readonly elementRef: ElementRef,\n private readonly l10nIntlService: L10nIntlService,\n private renderer: Renderer2,\n @Optional() @SkipSelf() private readonly ngControl: NgControl\n ) {}\n\n @HostListener('ngModelChange')\n public onNgModelChange(): void {\n const currentValue = this.getNormalizedText(this.getCurrentTextInput());\n if (this.shouldSkipFormatting(currentValue)) {\n return;\n }\n let value: number = LocaleUtils.parseNumber(currentValue, this.l10nIntlService);\n\n if (!AssertionUtils.isNumber(value)) {\n return;\n }\n if (!this.negativeNumbers) {\n value = Math.max(0, value);\n }\n const formattedValue = LocaleUtils.formatNumber(value, this.l10nIntlService, this.getMaximumFractionDigits());\n\n this.elementRef.nativeElement.value = formattedValue;\n this.ngControl?.control.patchValue(formattedValue, {emitEvent: false, emitViewToModelChange: false});\n }\n\n @HostListener('keydown', ['$event'])\n public onKeyDown(keyboardEvent: KeyboardEvent): void {\n if (!this.isNumericKeyCode(keyboardEvent.key) && !this.isCommand(keyboardEvent) && !this.allowNegativeNumbers(keyboardEvent.key) && !this.allowDecimals(keyboardEvent.key)) {\n keyboardEvent.preventDefault();\n }\n }\n\n @HostListener('paste', ['$event'])\n public onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const pastedInput: string = event.clipboardData.getData(MimeType.PLAIN_TEXT);\n this.elementRef.nativeElement.value = this.getProcessedText(pastedInput);\n this.elementRef.nativeElement.dispatchEvent(new Event('input'));\n }\n\n @HostListener('drop', ['$event'])\n public onDrop(event: any): void {\n event.preventDefault();\n const droppedInput: string = event.dataTransfer.getData(MimeType.TEXT).replace(/\\D/g, '');\n this.elementRef.nativeElement.value = this.getProcessedText(droppedInput);\n this.elementRef.nativeElement.dispatchEvent(new Event('input'));\n this.elementRef.nativeElement.focus();\n }\n\n public ngAfterViewInit(): void {\n if (this.canShowArrows) {\n const parent = this.elementRef.nativeElement.closest('mat-form-field');\n const matFormFieldFlexElement = parent.querySelector('.mat-mdc-form-field-flex');\n\n if (matFormFieldFlexElement) {\n const arrowsElement = this.renderer.createElement('div');\n this.renderer.addClass(arrowsElement, 'flex-center');\n this.renderer.addClass(arrowsElement, 'arrow-wrapper');\n\n const decrementButtonElement = this.createElementForButton();\n this.renderer.appendChild(arrowsElement, decrementButtonElement);\n\n const incrementButtonElement = this.createElementForButton(true);\n this.renderer.appendChild(arrowsElement, incrementButtonElement);\n\n this.renderer.appendChild(matFormFieldFlexElement, arrowsElement);\n }\n }\n }\n\n public validate(_: AbstractControl): ValidationErrors | null {\n if (!this.elementRef.nativeElement.validity.badInput) {\n return null;\n }\n return {badInput: true};\n }\n\n private getMaximumFractionDigits(): number {\n return this.decimals ? this.maximumFractionDigits : 0;\n }\n\n private isNumericKeyCode(key: string): boolean {\n return /^\\d$/.test(key);\n }\n\n private isCommand(keyboardEvent: KeyboardEvent): boolean {\n return this.isControlCommand(keyboardEvent) || this.isStandardCommand(keyboardEvent.key);\n }\n\n private isControlCommand(keyboardEvent: KeyboardEvent): boolean {\n return /^[acvxyz]$/.test(keyboardEvent.key) && (keyboardEvent.ctrlKey || keyboardEvent.metaKey);\n }\n\n private isStandardCommand(key: string): boolean {\n const standardCommands: string[] = ['Delete', 'Backspace', 'Tab', 'Escape', 'Enter', 'ArrowLeft', 'ArrowUp', 'ArrowRight', 'ArrowDown', 'Shift', 'Home', 'End'];\n return new RegExp(`^(${standardCommands.join('|')})$`).test(key);\n }\n\n private allowDecimals(key: string): boolean {\n return this.isDecimalSeparator(key) && this.decimals && !new RegExp(`[${this.getDecimalSeparator()}]`).test(this.getCurrentTextInput());\n }\n\n private isDecimalSeparator(key: string): boolean {\n return key === this.getDecimalSeparator();\n }\n\n private getDecimalSeparator(): string {\n return LocaleUtils.getDecimalSeparator(this.l10nIntlService);\n }\n\n private allowNegativeNumbers(key: string): boolean {\n return '-' === key && this.negativeNumbers;\n }\n\n private getCurrentTextInput(): string {\n let input = this.elementRef.nativeElement.value;\n if (AssertionUtils.isNumber(input)) {\n input = LocaleUtils.formatNumber(input, this.l10nIntlService, this.maximumFractionDigits);\n }\n return `${input}`;\n }\n\n private getProcessedText(rawText: string): string {\n const decimalSeparator = this.getDecimalSeparator();\n const forbiddenCharacters = new RegExp(`[^0-9${decimalSeparator}-]`, 'g');\n let processedText = rawText.replace(forbiddenCharacters, '');\n\n if (!this.decimals) {\n const decimalSeparators = new RegExp(`[${decimalSeparator}]`, 'g');\n processedText = processedText.replace(decimalSeparators, '');\n }\n\n if (!this.negativeNumbers) {\n processedText = processedText.replace(/-/g, '');\n }\n\n return processedText;\n }\n\n private getNormalizedText(rawText: string): string {\n if (AssertionUtils.isEmpty(rawText)) {\n return rawText;\n }\n return rawText.charAt(0).concat(rawText.slice(1).replace(/-/g, '')).replace(/[.,]/g, this.getDecimalSeparator());\n }\n\n private shouldSkipFormatting(text: string): boolean {\n const decimalSeparator = this.getDecimalSeparator();\n if (!new RegExp(`[${decimalSeparator}]`).test(text)) {\n return true;\n }\n const textSections = text.split(decimalSeparator);\n const decimalValue = textSections[textSections.length - 1];\n const lastChar = text.charAt(text.length - 1);\n return this.isDecimalSeparator(lastChar) || (lastChar === '0' && decimalValue.length <= this.getMaximumFractionDigits());\n }\n\n private createElementForButton(isIncrement: boolean = false): Element {\n const inputElement = this.elementRef.nativeElement.closest('input');\n\n const buttonElement = this.renderer.createElement('button');\n this.renderer.setAttribute(buttonElement, 'mat-icon-button', '');\n this.renderer.addClass(buttonElement, 'mdc-icon-button');\n this.renderer.addClass(buttonElement, 'mat-mdc-icon-button');\n this.renderer.addClass(buttonElement, 'mat-mdc-button-base');\n\n const iconElement = this.renderer.createElement('div');\n const icon = isIncrement ? 'solid-keyboard-arrow-up' : 'solid-keyboard-arrow-down';\n this.renderer.addClass(iconElement, 'mat-icon');\n this.renderer.setStyle(iconElement, 'mask-image', `url(/assets/solid-icons/${icon}.svg)`);\n\n this.renderer.listen(buttonElement, 'click', () => {\n if (!inputElement['disabled']) {\n return isIncrement ? inputElement.stepUp() : inputElement.stepDown();\n }\n });\n this.renderer.listen(buttonElement, 'focus', () => this.renderer.addClass(buttonElement, 'cdk-mouse-focused'));\n this.renderer.listen(buttonElement, 'blur', () => this.renderer.removeClass(buttonElement, 'cdk-mouse-focused'));\n\n this.renderer.appendChild(buttonElement, iconElement);\n\n return buttonElement;\n }\n}\n","import {Directive, ElementRef, EventEmitter, Inject, Input, NgZone, OnDestroy, OnInit, Output, Renderer2} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {WINDOW} from '../../window/window.service';\n\n@Directive({\n selector: '[vdwResizeElement]'\n})\nexport class ResizeElementDirective implements OnInit, OnDestroy {\n private _isResizing = false;\n\n private mouseUpListener: () => void;\n private mouseMoveListener: () => void;\n\n @Input() public minResizeWidth: number;\n @Input() public maxResizeWidth: number;\n @Output() public resizeElementEnd = new EventEmitter();\n @Output() public resizeElement = new EventEmitter();\n\n public get isResizing(): boolean {\n return this._isResizing;\n }\n\n public constructor(\n private readonly elementRef: ElementRef,\n private readonly zone: NgZone,\n private readonly renderer: Renderer2,\n @Inject(WINDOW) private readonly window: Window\n ) {}\n\n public ngOnInit(): void {\n this.elementRef?.nativeElement?.addEventListener('mousedown', this.onResizerMouseDown);\n }\n\n private onResizerMouseDown = (event: MouseEvent): void => {\n event.preventDefault();\n\n if (event.button === 0) {\n this._isResizing = true;\n\n this.zone.runOutsideAngular(() => {\n this.mouseUpListener = this.renderer.listen(this.window, 'mouseup', () => this.cancelListeners());\n this.mouseMoveListener = this.renderer.listen(this.window, 'mousemove', (mouseMoveEvent: MouseEvent) => {\n const calculatedWidth = this.elementRef.nativeElement.clientWidth + mouseMoveEvent.x;\n const minWidthCheck = AssertionUtils.isNullOrUndefined(this.minResizeWidth) || calculatedWidth >= this.minResizeWidth;\n const maxWidthCheck = AssertionUtils.isNullOrUndefined(this.maxResizeWidth) || calculatedWidth <= this.maxResizeWidth;\n\n if (this._isResizing === true && minWidthCheck && maxWidthCheck) {\n this.resizeElement.emit(mouseMoveEvent);\n }\n });\n });\n }\n };\n\n private cancelListeners(): void {\n this._isResizing = false;\n this.resizeElementEnd.emit();\n\n if (this.mouseMoveListener) {\n this.mouseMoveListener();\n this.mouseMoveListener = null;\n }\n\n if (this.mouseUpListener) {\n this.mouseUpListener();\n this.mouseUpListener = null;\n }\n }\n\n public ngOnDestroy(): void {\n this.elementRef?.nativeElement?.removeEventListener('mousedown', this.onResizerMouseDown);\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'capitalFirstLetter'})\nexport class CapitalFirstLetterPipe implements PipeTransform {\n public transform(str: string): string {\n str = str.charAt(0).toUpperCase() + str.slice(1);\n\n return str;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {DateTime} from 'luxon';\nimport {DateTimeFormat} from '../../common/datetime-format.enum';\n\n@Pipe({name: 'DateTime'})\nexport class DateTimePipe implements PipeTransform {\n public transform(value: Date | DateTime, format: DateTimeFormat | string): string {\n let dateTime: DateTime;\n\n if (value === null || value === undefined) {\n return null;\n }\n if (value instanceof Date) {\n dateTime = DateTime.fromJSDate(value);\n } else if (value instanceof DateTime) {\n dateTime = value;\n } else {\n throw new Error('Unsupported value type');\n }\n if (typeof format === 'string') {\n format = DateTimeFormat[format as keyof typeof DateTimeFormat];\n }\n switch (format) {\n case DateTimeFormat.TIME_SIMPLE:\n return dateTime.toLocaleString(DateTime.TIME_SIMPLE);\n case DateTimeFormat.TIME_WITH_SECONDS:\n return dateTime.toLocaleString(DateTime.TIME_WITH_SECONDS);\n case DateTimeFormat.DATE_SHORT:\n return dateTime.toLocaleString(DateTime.DATE_SHORT);\n case DateTimeFormat.DATE_HUGE:\n return dateTime.toLocaleString(DateTime.DATE_HUGE);\n case DateTimeFormat.DAY_WEEKDAY:\n return dateTime.toFormat('ccc d');\n case DateTimeFormat.DATETIME_SHORT:\n return dateTime.toLocaleString(DateTime.DATETIME_SHORT);\n case DateTimeFormat.DATETIME_SHORT_WITH_SECONDS:\n return dateTime.toLocaleString(DateTime.DATETIME_SHORT_WITH_SECONDS);\n case DateTimeFormat.DATETIME_MED_WITH_WEEKDAY:\n return dateTime.toLocaleString({weekday: 'long', year: 'numeric', month: 'short', day: '2-digit', hour: 'numeric', minute: 'numeric'});\n case DateTimeFormat.MONTH_YEAR:\n return dateTime.toLocaleString({month: 'long', year: 'numeric'});\n case DateTimeFormat.DAY_MONTH_SHORT_TIME_WITH_SECONDS:\n return dateTime.toLocaleString({day: 'numeric', month: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric'});\n default:\n throw new Error('Unsupported or missing DateTime format');\n }\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'hexValue'})\nexport class HexValuePipe implements PipeTransform {\n public transform(value: string, length: number = 4): string {\n if (value && length) {\n const hexValue = this.binToHex(value);\n return '0x' + this.addLeadingZeros(length - hexValue.length) + hexValue;\n }\n if (value) {\n return '0x' + this.binToHex(value);\n }\n return '0x' + this.addLeadingZeros(length);\n }\n\n private binToHex(value: string): string {\n return parseInt(value, 2).toString(16).toUpperCase();\n }\n\n private addLeadingZeros(numberOfZeros: number): string {\n return ''.padStart(numberOfZeros, '0');\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {StringUtils} from '../../common/utils/string-utils';\n\n@Pipe({\n name: 'htmlWithVariablesToText'\n})\nexport class HtmlWithVariablesToTextPipe implements PipeTransform {\n public transform(html: string, listOfVariables?: {id: number; name: string}[]): string {\n if (AssertionUtils.isNullOrUndefined(html)) {\n return '';\n }\n\n const splitedHtml = html.split(/(%\\{-?\\d+\\}%)/g)?.filter((value: string) => !AssertionUtils.isEmpty(value));\n\n const textWithVariables = splitedHtml\n ?.map((value: string) => (!AssertionUtils.isNullOrUndefined(listOfVariables) && value.startsWith('%{') ? `*${this.getVariableNameByValue(value, listOfVariables)}*` : ` ${value} `))\n .join('');\n\n return StringUtils.htmlToText(textWithVariables ?? '');\n }\n\n private getVariableNameByValue(value: string, listOfVariables: {id: number; name: string}[]): string {\n const match = /%\\{(-?\\d+)\\}%/.exec(value);\n return match?.length >= 2 ? listOfVariables.find((variable: {id: number; name: string}) => variable.id === parseInt(match[1], 10))?.name : value;\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport moment from 'moment';\nimport {interval, map, Observable, startWith} from 'rxjs';\nimport {DateTimeFormat} from '../../common/datetime-format.enum';\nimport {DateTimePipe} from '../date-time-pipe/date-time.pipe';\n\n@Pipe({\n name: 'minutesFromNow'\n})\nexport class MinutesFromNowPipe implements PipeTransform {\n public constructor(private readonly dateTimePipe: DateTimePipe) {}\n public transform(date: Date | string): Observable {\n return interval(1000).pipe(\n startWith(0),\n map(() => {\n const dateToTransform = typeof date === 'string' ? new Date(date) : date;\n\n if (dateToTransform) {\n if (moment(dateToTransform).isAfter(moment().clone().subtract(1, 'hours'))) {\n return moment(dateToTransform).fromNow();\n } else {\n return this.dateTimePipe.transform(dateToTransform, DateTimeFormat.DAY_MONTH_SHORT_TIME_WITH_SECONDS);\n }\n }\n return '';\n })\n );\n }\n}\n","import {InjectionToken} from '@angular/core';\n\nexport const LOCALSTORAGE_CONFIG = new InjectionToken('LocalStorageConfig');\n\nexport interface LocalStorageConfig {\n prefix: string;\n}\n","import {ModuleWithProviders, NgModule} from '@angular/core';\nimport {LocalStorageConfig, LOCALSTORAGE_CONFIG} from './local-storage-config';\nimport {LocalStorageService} from './local-storage.service';\n\n@NgModule()\nexport class LocalStorageModule {\n public static forRoot(config: LocalStorageConfig): ModuleWithProviders {\n return {\n ngModule: LocalStorageModule,\n providers: [LocalStorageService, {provide: LOCALSTORAGE_CONFIG, useValue: config}]\n };\n }\n}\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {LocalStorageConfig, LOCALSTORAGE_CONFIG} from './local-storage-config';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorageService {\n private readonly prefix: string;\n\n public constructor(@Optional() @Inject(LOCALSTORAGE_CONFIG) config: LocalStorageConfig) {\n this.prefix = config?.prefix;\n Object.keys(localStorage)\n .filter((key: string) => key.startsWith(this.prefix))\n .forEach((key: string) => {\n let value = localStorage.getItem(key);\n if (value.startsWith('\"[') || value.startsWith('\"{\\\\')) {\n localStorage.setItem(key, JSON.parse(value));\n }\n if (value === '\"null\"') {\n localStorage.removeItem(key);\n }\n });\n }\n\n public get(key: string): T {\n return JSON.parse(localStorage.getItem(`${this.prefix}.${key}`));\n }\n\n public set(key: string, value: any): void {\n localStorage.setItem(`${this.prefix}.${key}`, JSON.stringify(value));\n }\n\n public remove(...keys: string[]): void {\n keys.forEach((key: string) => {\n localStorage.removeItem(`${this.prefix}.${key}`);\n });\n }\n}\n","import {isEqual} from 'lodash-es';\n\nexport class AlertDialogData {\n private static readonly exclamationInfo: string = 'info-blue';\n private static readonly exclamationWarning: string = 'warning-blue';\n private static readonly exclamationWarningFull: string = 'warning-full-36px';\n private static readonly exclamationError: string = 'error-full-36px';\n private static readonly cancelText: string = 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.CANCEL';\n private readonly _titleIcon: string;\n private readonly _titleText: string;\n private readonly _messageText: string;\n private readonly _extraInformationText: string;\n private readonly _cancelButtonText: string;\n private readonly _confirmationTypes: AlertDialogConfirmationType[];\n private readonly _confirmButtonText: string;\n private readonly _informationUrl: string;\n private readonly _entities: any[];\n private readonly _saveButton: boolean;\n\n public constructor(\n titleIcon: string,\n titleText: string,\n messageText: string,\n cancelButtonText: string,\n confirmationTypes: AlertDialogConfirmationType[],\n confirmButtonText?: string,\n extraInformationText?: string,\n informationUrl?: string,\n entities?: any[],\n saveButton: boolean = false\n ) {\n this._titleIcon = titleIcon;\n this._titleText = titleText;\n this._messageText = messageText;\n this._extraInformationText = extraInformationText;\n this._cancelButtonText = cancelButtonText;\n this._confirmationTypes = confirmationTypes;\n this._confirmButtonText = confirmButtonText;\n this._informationUrl = informationUrl;\n this._entities = entities;\n this._saveButton = saveButton;\n }\n\n public get titleIcon(): string {\n return this._titleIcon;\n }\n\n public get titleText(): string {\n return this._titleText;\n }\n\n public get messageText(): string {\n return this._messageText;\n }\n\n public get extraInformationText(): string {\n return this._extraInformationText;\n }\n\n public get cancelButtonText(): string {\n return this._cancelButtonText;\n }\n\n public get confirmationTypes(): AlertDialogConfirmationType[] {\n return this._confirmationTypes;\n }\n\n public get confirmButtonText(): string {\n return this._confirmButtonText;\n }\n\n public get informationUrl(): string {\n return this._informationUrl;\n }\n\n public get entities(): any[] {\n return this._entities;\n }\n\n public get saveButton(): boolean {\n return this._saveButton;\n }\n\n public static createConfirmationData(titleIcon: string, titleText: string, messageText: string, confirmationType: AlertDialogConfirmationType): AlertDialogData {\n return new AlertDialogData(isEqual(confirmationType, AlertDialogConfirmationType.DELETE) ? AlertDialogData.exclamationWarning : titleIcon, titleText, messageText, AlertDialogData.cancelText, [\n confirmationType\n ]);\n }\n\n public static createReportData(titleText: string, messageText: string, extraInformationText: string, confirmButtonText: string, informationUrl: string): AlertDialogData {\n return new AlertDialogData(\n AlertDialogData.exclamationInfo,\n titleText,\n messageText,\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.CLOSE',\n [AlertDialogConfirmationType.REPORT],\n confirmButtonText,\n extraInformationText,\n informationUrl\n );\n }\n\n public static createErrorData(titleText: string, messageText: string, extraInformationText?: string): AlertDialogData {\n return new AlertDialogData(AlertDialogData.exclamationError, titleText, messageText, '', [AlertDialogConfirmationType.REPORT], null, extraInformationText);\n }\n\n public static createInformativeData(titleText: string, messageText: string): AlertDialogData {\n return new AlertDialogData(AlertDialogData.exclamationWarning, titleText, messageText, 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.OK', null);\n }\n\n public static createConfirmData(titleText: string, messageText: string): AlertDialogData {\n return new AlertDialogData(AlertDialogData.exclamationWarning, titleText, messageText, AlertDialogData.cancelText, [AlertDialogConfirmationType.CONFIRM]);\n }\n\n public static createDiscardData(): AlertDialogData {\n return new AlertDialogData(\n AlertDialogData.exclamationError,\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.TITLE',\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.MESSAGE',\n AlertDialogData.cancelText,\n [AlertDialogConfirmationType.DISCARD],\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.ACTION'\n );\n }\n\n public static createDiscardAndSaveData(): AlertDialogData {\n return new AlertDialogData(\n AlertDialogData.exclamationError,\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.TITLE',\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.MESSAGE',\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD.ACTION',\n [AlertDialogConfirmationType.DISCARD],\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.SAVE_CHANGES',\n undefined,\n undefined,\n undefined,\n true\n );\n }\n\n public static createConfirmationDeleteData(titleText: string, messageText: string, extraInformationText: string, entities: any[] = null, buttonText: string = null): AlertDialogData {\n return new AlertDialogData(\n AlertDialogData.exclamationError,\n titleText,\n messageText,\n AlertDialogData.cancelText,\n [AlertDialogConfirmationType.CONFIRM_DELETE],\n buttonText ?? 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DELETE_FOREVER',\n extraInformationText,\n null,\n entities\n );\n }\n\n public static createOverrideData(titleText: string, messageText: string): AlertDialogData {\n return new AlertDialogData(\n AlertDialogData.exclamationWarningFull,\n titleText,\n messageText,\n AlertDialogData.cancelText,\n [AlertDialogConfirmationType.OVERRIDE],\n 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.IMPORT_TEMPLATE'\n );\n }\n}\n\nexport enum AlertDialogConfirmationType {\n CONFIRM,\n DELETE,\n DISCARD,\n REPORT,\n CONFIRM_DELETE,\n OVERRIDE\n}\n\nexport enum AlertDialogResult {\n CANCEL,\n CONFIRM,\n DISCARD,\n SAVE\n}\n","import {AlertDialogConfirmationType} from './alert-dialog-data';\n\nexport class AlertDialogUtils {\n private static readonly CONFIRMATION_TYPE_TEXTS = new Map([\n [AlertDialogConfirmationType.CONFIRM, 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.CONFIRM'],\n [AlertDialogConfirmationType.DELETE, 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DELETE_FOREVER'],\n [AlertDialogConfirmationType.DELETE, 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.DISCARD']\n ]);\n\n public static getButtonTextForConfirmationType(confirmationType: AlertDialogConfirmationType): string {\n return this.CONFIRMATION_TYPE_TEXTS.get(confirmationType);\n }\n}\n","
\n \n \n \n \n \n \n
\n","import {Component, Inject} from '@angular/core';\nimport {MatDialogRef, MAT_DIALOG_DATA} from '@angular/material/dialog';\nimport {includes, isEqual, isNil} from 'lodash-es';\nimport {ENVIRONMENT, EnvironmentVariables} from '../../common/environment-variables';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {WINDOW} from '../../window/window.service';\nimport {AlertDialogConfirmationType, AlertDialogData, AlertDialogResult} from './alert-dialog-data';\nimport {AlertDialogUtils} from './alert-dialog-utils';\n\n@Component({\n templateUrl: './alert-dialog.component.html',\n styleUrls: ['./alert-dialog.component.scss']\n})\nexport class AlertDialogComponent {\n public dialogData: AlertDialogData;\n\n public constructor(\n @Inject(WINDOW) private readonly window: Window,\n private dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: any,\n @Inject(ENVIRONMENT) private environment: EnvironmentVariables\n ) {\n this.dialogData = data;\n }\n\n public cancel(): void {\n if (this.hasDiscardButton() && this.hasSaveButton()) {\n this.discard();\n } else {\n this.dialogRef.close(AlertDialogResult.CANCEL);\n }\n }\n\n public save(): void {\n this.dialogRef.close(AlertDialogResult.SAVE);\n }\n\n public getChooseEventName(): string {\n if (this.hasReportButton()) {\n return this.getReportButtonText();\n }\n\n if (this.hasConfirmButton()) {\n return this.getConfirmButtonText();\n }\n }\n\n public chooseEvent(): void {\n if (this.hasReportButton()) {\n return this.report();\n }\n\n if (this.hasConfirmButton()) {\n return this.confirm();\n }\n }\n\n public canShowChooseButton(): boolean {\n return this.hasReportButton() || this.hasConfirmButton();\n }\n\n public hasSaveButton(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.dialogData) && this.dialogData.saveButton;\n }\n\n public hasCancelButton(): boolean {\n return !isNil(this.dialogData) && this.hasCancelText();\n }\n\n public hasReportButton(): boolean {\n return !isNil(this.dialogData) && this.hasConfirmationTypeReport();\n }\n\n public hasDiscardButton(): boolean {\n return !isNil(this.dialogData) && this.hasConfirmationTypeDiscard();\n }\n\n public hasDeleteButton(): boolean {\n return this.dialogData !== null && this.hasConfirmationTypeConfirmDelete();\n }\n\n public hasOverrideButton(): boolean {\n return this.dialogData !== null && this.hasConfirmationTypeOverride();\n }\n\n public getIcon(): string {\n return this.hasConfirmButtonText() ? 'empty-2' : 'report-warning';\n }\n\n public getIconClass(): string {\n return this.hasConfirmButtonText() ? 'empty-icon-content' : 'report-warning-icon-content';\n }\n\n public getConfirmButtonText(): string {\n let result = '';\n if (!isNil(this.dialogData)) {\n result = isNil(this.dialogData.confirmButtonText) ? AlertDialogUtils.getButtonTextForConfirmationType(AlertDialogConfirmationType.CONFIRM) : this.dialogData.confirmButtonText;\n }\n\n return result;\n }\n\n public getReportButtonText(): string {\n return this.hasConfirmButtonText() ? this.dialogData.confirmButtonText : 'ANGULAR_COMPONENT_LIBRARY.ALERT_DIALOG.REPORT';\n }\n\n public discard(): void {\n this.dialogRef.close(AlertDialogResult.DISCARD);\n }\n\n public confirm(): void {\n this.dialogRef.close(AlertDialogResult.CONFIRM);\n }\n\n public hasMessageText(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.dialogData.messageText);\n }\n\n public hasExtraInformationText(): boolean {\n return !isNil(this.dialogData.extraInformationText);\n }\n\n public canShowReportIssueText(): boolean {\n return this.hasReportButton() || this.hasDeleteButton() || this.hasOverrideButton() || this.hasDiscardButton();\n }\n\n public hasConfirmButtonText(): boolean {\n return !isNil(this.dialogData.confirmButtonText);\n }\n\n public navigateToUrl(route: string): void {\n this.window.open(route);\n }\n\n private hasConfirmButton(): boolean {\n return !isNil(this.dialogData) && (this.hasConfirmationTypeConfirm() || this.hasConfirmationTypeDelete());\n }\n\n private hasConfirmationTypeConfirm(): boolean {\n return includes(this.dialogData.confirmationTypes, AlertDialogConfirmationType.CONFIRM);\n }\n\n private hasConfirmationTypeDiscard(): boolean {\n return includes(this.dialogData.confirmationTypes, AlertDialogConfirmationType.DISCARD);\n }\n\n private hasConfirmationTypeDelete(): boolean {\n return includes(this.dialogData.confirmationTypes, AlertDialogConfirmationType.DELETE);\n }\n\n private hasConfirmationTypeReport(): boolean {\n return includes(this.dialogData.confirmationTypes, AlertDialogConfirmationType.REPORT);\n }\n\n private hasConfirmationTypeConfirmDelete(): boolean {\n return this.dialogData.confirmationTypes?.includes(AlertDialogConfirmationType.CONFIRM_DELETE);\n }\n\n private hasConfirmationTypeOverride(): boolean {\n return this.dialogData.confirmationTypes?.includes(AlertDialogConfirmationType.OVERRIDE);\n }\n\n private hasCancelText(): boolean {\n return !isEqual(this.dialogData.cancelButtonText, '');\n }\n\n private hasInformationUrl(): boolean {\n return this.dialogData.informationUrl ? true : false;\n }\n\n private report(): void {\n let urlToOpen = this.environment.helpUrl;\n if (this.hasInformationUrl()) {\n urlToOpen = this.dialogData.informationUrl;\n }\n\n this.window.open(urlToOpen);\n }\n}\n","import {Injectable} from '@angular/core';\nimport {DialogOpenerService} from '../dialog-opener/dialog-opener.service';\nimport {RepositionWatchDialogFactoryService} from '../dialog-reposition/reposition-watch-dialog-factory.service';\nimport {DialogBuilder} from './dialog-builder';\n\n@Injectable({providedIn: 'root'})\nexport class DialogBuilderFactoryService {\n public constructor(\n private readonly repositionDialogWatchFactoryService: RepositionWatchDialogFactoryService,\n private readonly dialogOpener: DialogOpenerService\n ) {}\n\n public getBuilder(): DialogBuilder {\n return new DialogBuilder(this.repositionDialogWatchFactoryService.getService(), this.dialogOpener);\n }\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {ChangeDetectorRef} from '@angular/core';\nimport {DialogPosition, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {cloneDeep} from 'lodash-es';\nimport {concat, Observable, skip, tap} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {UuidUtils} from '../../common/utils/uuid-utils';\nimport {AlertDialogConfirmationType, AlertDialogData, AlertDialogResult} from '../alert-dialog/alert-dialog-data';\nimport {DialogOpenerService} from '../dialog-opener/dialog-opener.service';\nimport {DialogOptions} from '../dialog-options';\nimport {ArrowPosition} from '../dialog-reposition/arrow-position.enum';\nimport {RepositionWatchDialog} from '../dialog-reposition/reposition-watch-dialog.interface';\nimport {DialogType} from '../dialog-type';\nimport {SelectGridDialog} from '../select-grid-dialog.interface';\n\nexport class DialogBuilder {\n private readonly dialogConfig: MatDialogConfig = {\n autoFocus: false,\n restoreFocus: false,\n id: UuidUtils.generateV4Uuid()\n };\n\n private refData: object;\n private autoWidth: boolean;\n private autoHeight: boolean;\n private onDialogOpened: (dialogRef: MatDialogRef) => void;\n\n public constructor(\n private readonly repositionWatchDialog: RepositionWatchDialog,\n private readonly dialogOpener: DialogOpenerService\n ) {}\n\n public withId(id: string): DialogBuilder {\n this.dialogConfig.id = id;\n return this;\n }\n\n public withClass(panelClass: string | string[]): DialogBuilder {\n this.dialogConfig.panelClass = panelClass;\n return this;\n }\n\n public withWidth(width: string): DialogBuilder {\n this.dialogConfig.width = width;\n return this;\n }\n\n public withMinWidth(minWidth: string | number): DialogBuilder {\n this.dialogConfig.minWidth = minWidth;\n return this;\n }\n\n public withMaxWidth(maxWidth: string | number): DialogBuilder {\n this.dialogConfig.maxWidth = maxWidth;\n return this;\n }\n\n public withAutoWidth(): DialogBuilder {\n this.autoWidth = true;\n return this;\n }\n\n public withHeight(height: string): DialogBuilder {\n if (!AssertionUtils.isNullOrUndefined(height)) {\n this.dialogConfig.height = height;\n }\n return this;\n }\n\n public withMinHeight(minHeight: string | number): DialogBuilder {\n this.dialogConfig.minHeight = minHeight;\n\n return this;\n }\n\n public withMaxHeight(maxHeight: string | number): DialogBuilder {\n this.dialogConfig.maxHeight = maxHeight;\n return this;\n }\n\n public withAutoHeight(autoHeight: boolean): DialogBuilder {\n this.autoHeight = autoHeight;\n return this;\n }\n\n public withoutBackdrop(): DialogBuilder {\n this.dialogConfig.hasBackdrop = false;\n return this;\n }\n\n public withCustomBackdrop(backdropClass?: string | string[]): DialogBuilder {\n this.dialogConfig.hasBackdrop = true;\n this.dialogConfig.backdropClass = backdropClass;\n return this;\n }\n\n public withCloseDisabled(): DialogBuilder {\n this.dialogConfig.disableClose = true;\n return this;\n }\n\n public withAutoFocus(): DialogBuilder {\n this.dialogConfig.autoFocus = true;\n return this;\n }\n\n public withRefData(data: object): DialogBuilder {\n this.refData = data;\n return this;\n }\n\n public withPosition(position: DialogPosition): DialogBuilder {\n this.dialogConfig.position = position;\n return this;\n }\n\n public withOnDialogOpened(onDialogOpened: (dialogRef: MatDialogRef) => void): DialogBuilder {\n this.onDialogOpened = onDialogOpened;\n return this;\n }\n\n public open(component: ComponentType, data?: S, passDataAsReference: boolean = false): MatDialogRef {\n return this.dialogOpener.open(component, this.buildWithData(data, passDataAsReference));\n }\n\n public openDialog(component: ComponentType, data?: S): Observable {\n return this.dialogOpener.openDialog(component, this.buildWithData(data));\n }\n\n public openAlertDialog(options: DialogOptions): Observable {\n let data: AlertDialogData;\n\n if (options.type === DialogType.CONFIRM) {\n data = AlertDialogData.createConfirmData(options.titleText, options.messageText);\n } else if (options.type === DialogType.INFORMATION) {\n data = AlertDialogData.createInformativeData(options.titleText, options.messageText);\n } else if (options.type === DialogType.DISCARD) {\n data = AlertDialogData.createDiscardData();\n } else if (options.type === DialogType.DISCARD_AND_SAVE) {\n data = AlertDialogData.createDiscardAndSaveData();\n } else if (options.type === DialogType.ERROR) {\n data = AlertDialogData.createErrorData(options.titleText, options.messageText, options.extraMessageText);\n } else if (options.type === DialogType.DELETE) {\n data = AlertDialogData.createConfirmationData('', options.titleText, options.messageText, AlertDialogConfirmationType.DELETE);\n } else if (options.type === DialogType.CONFIRM_DELETE) {\n data = AlertDialogData.createConfirmationDeleteData(options.titleText, options.messageText, options.extraMessageText, options.entities, options.buttonText);\n } else if (options.type === DialogType.REPORT) {\n data = AlertDialogData.createReportData(options.titleText, options.messageText, options.extraMessageText, options.confirmButtonText, options.informationUrl);\n } else if (options.type === DialogType.OVERRIDE) {\n data = AlertDialogData.createOverrideData(options.titleText, options.messageText);\n }\n\n return this.dialogOpener.openAlertDialog(this.withId('alert-dialog').withClass('alert-dialog').buildWithData(data));\n }\n\n public openSelectGridDialog(component: ComponentType, data?: T): Observable {\n return this.dialogOpener.openSelectGridDialog(component, this.withClass('large-modal').buildWithData(data));\n }\n\n public openAtElement(\n element: Element,\n arrowPosition: ArrowPosition,\n component: ComponentType,\n data: S,\n changeDetectorRef: ChangeDetectorRef,\n showArrow: boolean = true,\n align: 'left' | 'right' = null,\n verticalOffset: number = 0,\n horizontalOffset: number = 0,\n margin: number = undefined\n ): Observable {\n const dialogRef = this.dialogOpener.open(component, this.buildWithData(data));\n\n this.repositionWatchDialog.initWithElement(dialogRef, changeDetectorRef, arrowPosition, element, showArrow, align, verticalOffset, horizontalOffset, this.autoHeight, this.autoWidth, margin);\n\n if (!AssertionUtils.isNullOrUndefined(this.onDialogOpened)) {\n this.onDialogOpened(dialogRef);\n }\n\n return concat(dialogRef.beforeClosed().pipe(tap(() => this.repositionWatchDialog.destroy())), dialogRef.afterClosed()).pipe(skip(1));\n }\n\n public openAtPosition(\n x: number,\n y: number,\n arrowPosition: ArrowPosition,\n component: ComponentType,\n data: S,\n changeDetectorRef: ChangeDetectorRef,\n showArrow: boolean = true\n ): Observable {\n const dialogRef = this.dialogOpener.open(component, this.buildWithData(data));\n\n this.repositionWatchDialog.initWithPosition(dialogRef, changeDetectorRef, arrowPosition, x, y, showArrow, this.autoHeight, this.autoWidth);\n\n return concat(dialogRef.beforeClosed().pipe(tap(() => this.repositionWatchDialog.destroy())), dialogRef.afterClosed()).pipe(skip(1));\n }\n\n public close(value?: any): void {\n this.dialogOpener.close(this.dialogConfig.id, value);\n }\n\n private buildWithData(data: T, passDataAsReference: boolean = false): MatDialogConfig {\n if (AssertionUtils.isNullOrUndefined(this.refData)) {\n if ((data instanceof Object && 'grid' in data) || passDataAsReference) {\n return {...cloneDeep(this.dialogConfig), data: data};\n } else {\n return {...cloneDeep(this.dialogConfig), data: cloneDeep(data)};\n }\n }\n\n return {...cloneDeep(this.dialogConfig), data: {...cloneDeep(data), ...this.refData}};\n }\n}\n","import {ComponentType} from '@angular/cdk/portal';\nimport {Injectable} from '@angular/core';\nimport {MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';\nimport {GridApi} from 'ag-grid-community';\nimport {finalize, Observable, Subject} from 'rxjs';\nimport {FooterConstants} from '../../custom-components/footer/footer.constants';\nimport {GridOptionsBuilderFactoryService} from '../../grids/grid-options-builder-factory.service';\nimport {AlertDialogData, AlertDialogResult} from '../alert-dialog/alert-dialog-data';\nimport {AlertDialogComponent} from '../alert-dialog/alert-dialog.component';\nimport {SelectGridDialog} from '../select-grid-dialog.interface';\n\n@Injectable({providedIn: 'root'})\nexport class DialogOpenerService {\n public constructor(\n private readonly dialog: MatDialog,\n private readonly gridOptionsBuilderFactoryService: GridOptionsBuilderFactoryService\n ) {}\n\n public open(component: ComponentType, config: MatDialogConfig): MatDialogRef {\n return this.dialog.open(component, config);\n }\n\n public openDialog(component: ComponentType, config: MatDialogConfig): Observable {\n return this.dialog.open(component, config)?.afterClosed();\n }\n\n public openAlertDialog(config: MatDialogConfig): Observable {\n return this.openDialog(AlertDialogComponent, config);\n }\n\n public openSelectGridDialog(component: ComponentType, config: MatDialogConfig): Observable {\n const dialogRef = this.dialog.open(component, config);\n const resultSubject = new Subject();\n\n dialogRef.afterOpened().subscribe(() => {\n dialogRef.componentInstance.listOfGridApis?.forEach((gridApi: GridApi) => {\n this.withExistingGridRowSelectionAndButtonFocusOnSelection(gridApi, dialogRef.id);\n });\n });\n\n dialogRef\n .afterClosed()\n .pipe(\n finalize(() => {\n resultSubject.complete();\n })\n )\n .subscribe((result: R) => resultSubject.next(result));\n\n return resultSubject.asObservable();\n }\n\n public close(id: string, value: any): void {\n this.dialog.getDialogById(id)?.close(value);\n }\n\n private withExistingGridRowSelectionAndButtonFocusOnSelection(gridApi: GridApi, dialogId: string): void {\n this.gridOptionsBuilderFactoryService\n .getBuilderFromExistingGridApi(gridApi)\n .withAutomaticRowSelection()\n .withAutomaticButtonFocusOnRowSelection(`[id=\"${dialogId}\"] .${FooterConstants.CHOOSE_BUTTON_CLASS_NAME}`)\n .build();\n }\n}\n","export enum ArrowPosition {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n TOP = 'TOP',\n BOTTOM = 'BOTTOM'\n}\n","import {ApplicationRef, ChangeDetectorRef, ComponentRef, createComponent} from '@angular/core';\nimport {DialogPosition, MatDialogRef} from '@angular/material/dialog';\nimport {MatIcon} from '@angular/material/icon';\nimport {concat, concatAll, distinctUntilChanged, filter, first, map, merge, Observable, Subject, takeUntil} from 'rxjs';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {DOMUtils} from '../../common/utils/dom-utils';\nimport {ArrowPosition} from './arrow-position.enum';\nimport {RepositionWatchDialog} from './reposition-watch-dialog.interface';\n\nexport class RepositionWatchDialogService implements RepositionWatchDialog {\n private dialogRef: MatDialogRef;\n private changeDetectorRef: ChangeDetectorRef;\n private arrowComponentRef: ComponentRef;\n private showArrow: boolean;\n private actualMargin: number;\n\n private readonly MARGIN_IN_PX = 4;\n private readonly ARROW_WIDTH_IN_PX = 24;\n private readonly ARROW_OFFSET_IN_PX = 5;\n private readonly unSubscribeOnDestroy = new Subject();\n private readonly DIALOG_SURFACE_CLASS = 'mat-mdc-dialog-surface';\n\n public constructor(\n private readonly window: Window,\n private readonly document: Document,\n private readonly applicationRef: ApplicationRef\n ) {}\n\n public initWithPosition(\n dialogRef: MatDialogRef,\n changeDetectorRef: ChangeDetectorRef,\n arrowPosition: ArrowPosition,\n x: number,\n y: number,\n showArrow: boolean,\n autoHeight: boolean,\n autoWidth: boolean,\n margin: number\n ): void {\n this.init(dialogRef, changeDetectorRef, showArrow);\n\n this.actualMargin = margin ?? this.MARGIN_IN_PX;\n\n this.getEventsToUpdatePosition()\n .pipe(takeUntil(this.unSubscribeOnDestroy))\n .subscribe(() => {\n const [position, [width, height]] = this.getPositionAndSize(arrowPosition, x, y);\n this.dialogRef.updatePosition(position);\n\n if (autoHeight && !autoWidth) {\n this.dialogRef.updateSize(`${width}px`);\n } else if (!autoHeight && autoWidth) {\n this.dialogRef.updateSize(null, `${height}px`);\n } else {\n this.dialogRef.updateSize(`${width}px`, `${height}px`);\n }\n });\n\n if (showArrow) {\n this.addArrow(arrowPosition, x, y, 0);\n }\n }\n\n public initWithElement(\n dialogRef: MatDialogRef,\n changeDetectorRef: ChangeDetectorRef,\n arrowPosition: ArrowPosition,\n element: Element,\n showArrow: boolean,\n align: 'left' | 'right',\n verticalOffset: number,\n horizontalOffset: number,\n autoHeight: boolean,\n autoWidth: boolean,\n margin: number\n ): void {\n this.init(dialogRef, changeDetectorRef, showArrow);\n\n this.actualMargin = margin ?? this.MARGIN_IN_PX;\n const eventsToUpdatePosition = merge(DOMUtils.observeResize(element), this.getEventsToUpdatePosition());\n\n eventsToUpdatePosition.pipe(takeUntil(this.unSubscribeOnDestroy)).subscribe(() => {\n if (showArrow) {\n const [x, y] = this.getArrowPosition(arrowPosition, element);\n\n this.setArrowStyling(arrowPosition, x, y, verticalOffset);\n }\n\n const [position, [width, height]] = this.getPositionAndSizeWithElement(arrowPosition, element, align, verticalOffset, horizontalOffset);\n\n if (!AssertionUtils.isNullOrUndefined(position)) {\n this.dialogRef.updatePosition(position);\n\n if (autoHeight && !autoWidth) {\n this.dialogRef.updateSize(`${width}px`);\n } else if (!autoHeight && autoWidth) {\n this.dialogRef.updateSize(null, `${height}px`);\n } else {\n this.dialogRef.updateSize(`${width}px`, `${height}px`);\n }\n }\n });\n if (showArrow) {\n const [x, y] = this.getArrowPosition(arrowPosition, element);\n\n this.addArrow(arrowPosition, x, y, verticalOffset);\n }\n }\n\n public destroy(): void {\n this.unSubscribeOnDestroy.next(null);\n this.unSubscribeOnDestroy.complete();\n\n if (this.showArrow) {\n this.applicationRef.detachView(this.arrowComponentRef.hostView);\n\n this.document.body.removeChild(this.arrowComponentRef.location.nativeElement);\n }\n }\n\n private init(dialogRef: MatDialogRef, changeDetectorRef: ChangeDetectorRef, showArrow: boolean = true): void {\n this.dialogRef = dialogRef;\n this.changeDetectorRef = changeDetectorRef;\n this.showArrow = showArrow;\n }\n\n private getEventsToUpdatePosition(): Observable {\n return concat(\n DOMUtils.observeMutations(this.document.body, {childList: true, subtree: true}).pipe(\n filter(() => !AssertionUtils.isNullOrUndefined(this.getComponent())),\n concatAll(),\n first()\n ),\n DOMUtils.observeWindowEvents(this.window, 'resize').pipe(distinctUntilChanged())\n ).pipe(map(() => null));\n }\n\n private getArrowPosition(arrowPosition: ArrowPosition, element: Element, align: 'left' | 'right' = null): [number, number] {\n const rect = element.getBoundingClientRect();\n\n switch (arrowPosition) {\n case ArrowPosition.LEFT:\n return [rect.right, rect.top + rect.height / 2];\n case ArrowPosition.RIGHT:\n return [rect.left, rect.top + rect.height / 2];\n case ArrowPosition.TOP:\n return [align ? rect[align] : rect.left + rect.width / 2, rect.bottom];\n case ArrowPosition.BOTTOM:\n return [align ? rect[align] : rect.left + rect.width / 2, rect.top];\n }\n }\n\n private getPositionAndSizeWithElement(arrowPosition: ArrowPosition, element: Element, align: 'left' | 'right', verticalOffset: number, horizontalOffset: number): [DialogPosition, [number, number]] {\n let [x, y] = this.getArrowPosition(arrowPosition, element, align);\n return this.getPositionAndSize(arrowPosition, x, y, align, verticalOffset, horizontalOffset);\n }\n\n private getPositionAndSize(\n arrowPosition: ArrowPosition,\n x: number,\n y: number,\n align: 'left' | 'right' = null,\n verticalOffset: number = 0,\n horizontalOffset: number = 0\n ): [DialogPosition, [number, number]] {\n const component = this.getComponent();\n if (!AssertionUtils.isNullOrUndefined(component)) {\n component.style.overflow = 'hidden';\n }\n const rect = this.document.getElementById(this.dialogRef.id)?.getBoundingClientRect();\n\n let dialogPosition: DialogPosition;\n let top, left: number;\n const arrowWidthInPx = this.showArrow ? this.ARROW_WIDTH_IN_PX : 0;\n const arrowOffsetInPx = this.showArrow ? this.ARROW_OFFSET_IN_PX : 0;\n\n if (!AssertionUtils.isNullOrUndefined(rect)) {\n switch (arrowPosition) {\n case ArrowPosition.LEFT:\n top = y - Math.ceil(rect.height / 2) - arrowWidthInPx / 2 + verticalOffset;\n dialogPosition = {left: `${Math.floor(x + arrowWidthInPx - arrowOffsetInPx) + horizontalOffset}px`, top: `${this.fitTop(top, component.scrollHeight)}px`};\n break;\n case ArrowPosition.RIGHT:\n top = y - Math.ceil(rect.height / 2) - arrowWidthInPx / 2 + verticalOffset;\n dialogPosition = {\n right: `${Math.ceil(this.window.innerWidth - x + arrowWidthInPx - arrowOffsetInPx) + horizontalOffset}px`,\n top: `${this.fitTop(top, component.scrollHeight)}px`\n };\n break;\n case ArrowPosition.TOP:\n left = x + horizontalOffset;\n if (align !== 'left') {\n left -= align ? rect.width : Math.ceil(rect.width / 2);\n }\n dialogPosition = {left: `${this.fitLeft(left, rect.width)}px`, top: `${Math.ceil(y + arrowWidthInPx - arrowOffsetInPx) + verticalOffset}px`};\n break;\n case ArrowPosition.BOTTOM:\n left = x + horizontalOffset;\n if (align !== 'left') {\n left -= align ? rect.width : Math.ceil(rect.width / 2);\n }\n dialogPosition = {left: `${this.fitLeft(left, rect.width)}px`, bottom: `${Math.ceil(this.window.innerHeight - y + arrowWidthInPx - arrowOffsetInPx) + verticalOffset}px`};\n break;\n }\n }\n return [\n dialogPosition,\n [\n Math.min(rect?.width ?? Number.MAX_VALUE, Math.ceil(this.window.innerWidth) - this.actualMargin * 2),\n Math.min(rect?.height ?? Number.MAX_VALUE, Math.ceil(this.window.innerHeight) - this.actualMargin * 2)\n ]\n ];\n }\n\n private fitTop(top: number, height: number): number {\n height = Math.ceil(height);\n if (height > this.window.innerHeight) {\n return this.actualMargin;\n }\n\n if (top + height + this.actualMargin > this.window.innerHeight) {\n top = Math.ceil(this.window.innerHeight - height - this.actualMargin);\n }\n\n return Math.max(top, this.actualMargin);\n }\n\n private fitLeft(left: number, width: number): number {\n left = Math.ceil(left);\n if (width > this.window.innerWidth) {\n return this.actualMargin;\n }\n\n if (left + width + this.actualMargin > this.window.innerWidth) {\n left = Math.ceil(this.window.innerWidth - width - this.actualMargin);\n }\n\n return Math.max(left, this.actualMargin);\n }\n\n private addArrow(arrowPosition: ArrowPosition, x: number, y: number, verticalOffset: number): void {\n this.arrowComponentRef = createComponent(MatIcon, {\n environmentInjector: this.applicationRef.injector\n });\n\n this.arrowComponentRef.instance.svgIcon = 'atoms-arrow';\n\n this.setArrowStyling(arrowPosition, x, y, verticalOffset);\n\n this.applicationRef.attachView(this.arrowComponentRef.hostView);\n\n this.document.body.appendChild(this.arrowComponentRef.location.nativeElement);\n\n this.changeDetectorRef?.detectChanges();\n }\n\n private setArrowStyling(arrowPosition: ArrowPosition, x: number, y: number, verticalOffset: number): void {\n const nativeElement = this.arrowComponentRef.location.nativeElement as HTMLElement;\n\n const className = 'arrow';\n if (nativeElement.classList.contains(className)) {\n nativeElement.classList.add(className);\n }\n\n nativeElement.style.position = 'absolute';\n nativeElement.style['z-index'] = 1001;\n\n switch (arrowPosition) {\n case ArrowPosition.LEFT: {\n nativeElement.style.left = `${x}px`;\n nativeElement.style.top = `${y - this.ARROW_WIDTH_IN_PX / 2}px`;\n break;\n }\n case ArrowPosition.RIGHT: {\n nativeElement.style.left = `${x - this.ARROW_WIDTH_IN_PX}px`;\n nativeElement.style.top = `${y - this.ARROW_WIDTH_IN_PX / 2}px`;\n nativeElement.style.transform = 'rotate(180deg)';\n break;\n }\n case ArrowPosition.TOP: {\n nativeElement.style.left = `${x - this.ARROW_WIDTH_IN_PX / 2}px`;\n nativeElement.style.top = `${verticalOffset + y}px`;\n nativeElement.style.transform = 'rotate(90deg)';\n break;\n }\n case ArrowPosition.BOTTOM: {\n nativeElement.style.left = `${x - this.ARROW_WIDTH_IN_PX / 2}px`;\n nativeElement.style.top = `${verticalOffset + y - this.ARROW_WIDTH_IN_PX}px`;\n nativeElement.style.transform = 'rotate(270deg)';\n break;\n }\n }\n }\n\n private getComponent(): HTMLElement {\n const dialogContainer = this.document.getElementById(this.dialogRef.id);\n return dialogContainer?.getElementsByClassName(this.DIALOG_SURFACE_CLASS)?.item(0).firstChild as HTMLElement;\n }\n}\n","import {DOCUMENT} from '@angular/common';\nimport {ApplicationRef, Inject, Injectable} from '@angular/core';\nimport {WINDOW} from '../../window/window.service';\nimport {RepositionWatchDialog} from './reposition-watch-dialog.interface';\nimport {RepositionWatchDialogService} from './reposition-watch-dialog.service';\n\n@Injectable({providedIn: 'root'})\nexport class RepositionWatchDialogFactoryService {\n public constructor(\n @Inject(WINDOW) private readonly window: Window,\n @Inject(DOCUMENT) private readonly document: Document,\n private readonly applicationRef: ApplicationRef\n ) {}\n\n public getService(): RepositionWatchDialog {\n return new RepositionWatchDialogService(this.window, this.document, this.applicationRef);\n }\n}\n","export enum DialogType {\n INFORMATION = 'INFORMATION',\n ERROR = 'ERROR',\n CONFIRM = 'CONFIRM',\n DISCARD = 'DISCARD',\n DISCARD_AND_SAVE = 'DISCARD_AND_SAVE',\n DELETE = 'DELETE',\n CONFIRM_DELETE = 'CONFIRM_DELETE',\n REPORT = 'REPORT',\n OVERRIDE = 'OVERRIDE'\n}\n","import {Injectable} from '@angular/core';\nimport {MatDialogRef} from '@angular/material/dialog';\nimport {UUID} from 'crypto';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {UuidUtils} from '../../common/utils/uuid-utils';\nimport {DialogBuilder} from '../dialog-builder/dialog-builder';\nimport {DialogOpenerService} from '../dialog-opener/dialog-opener.service';\nimport {RepositionWatchDialogFactoryService} from '../dialog-reposition/reposition-watch-dialog-factory.service';\n\n@Injectable()\nexport class HoverDialogBuilderService {\n private id: UUID;\n private timeout: number;\n private dialogRef: HTMLElement;\n private createdBuilder: DialogBuilder;\n private hoveredElements: {element: HTMLElement; isHovered: boolean}[] = [];\n\n public constructor(\n private readonly repositionDialogWatchFactoryService: RepositionWatchDialogFactoryService,\n private readonly dialogOpener: DialogOpenerService\n ) {}\n\n public getBuilderWithHoverElements(hoveredElement: HTMLElement, otherElements: HTMLElement[], timeout: number = 100): DialogBuilder {\n if (!AssertionUtils.isNullOrUndefined(this.createdBuilder)) {\n return this.createdBuilder;\n }\n\n this.timeout = timeout;\n this.id = UuidUtils.generateV4Uuid() as UUID;\n [hoveredElement, ...otherElements].forEach((element: HTMLElement) => this.addEventListeners(element));\n\n this.hoveredElements.push({element: hoveredElement, isHovered: true});\n otherElements.forEach((element: HTMLElement) => this.hoveredElements.push({element, isHovered: false}));\n\n this.createdBuilder = new DialogBuilder(this.repositionDialogWatchFactoryService.getService(), this.dialogOpener).withId(this.id).withOnDialogOpened((dialog: MatDialogRef) => {\n this.dialogRef = dialog._containerInstance['_elementRef'].nativeElement as HTMLElement;\n this.hoveredElements.push({element: this.dialogRef, isHovered: false});\n\n this.addEventListeners(this.dialogRef);\n });\n\n return this.createdBuilder;\n }\n\n public registerElement(element: HTMLElement, isHovered: boolean): void {\n if (AssertionUtils.isNullOrUndefined(this.createdBuilder)) {\n return;\n }\n\n this.hoveredElements.push({element: element, isHovered});\n this.addEventListeners(element);\n }\n\n public setHovered(element: HTMLElement, isHovered: boolean): void {\n const foundElement = this.hoveredElements.find((hoveredElement: {element: HTMLElement; isHovered: boolean}) => hoveredElement.element.id === element.id);\n\n if (!AssertionUtils.isNullOrUndefined(foundElement)) {\n foundElement.isHovered = isHovered;\n }\n }\n\n public closeHoverDialog(): void {\n if (!AssertionUtils.isNullOrUndefined(this.createdBuilder)) {\n this.createdBuilder.close(this.id);\n this.cleanup();\n }\n }\n\n private mouseEnter = (event: MouseEvent): void => {\n this.setHovered(event.target as HTMLElement, true);\n };\n\n private mouseLeave = (event: MouseEvent): void => {\n this.setHovered(event.target as HTMLElement, false);\n\n if (!AssertionUtils.isNullOrUndefined(this.createdBuilder)) {\n setTimeout(() => {\n const anyHovered = this.hoveredElements.map((hoveredElement: {element: HTMLElement; isHovered: boolean}) => hoveredElement.isHovered).some((value: boolean) => value === true);\n\n if (!anyHovered && !(event.relatedTarget as HTMLElement)?.classList.contains('mat-mdc-tooltip')) {\n this.closeHoverDialog();\n }\n }, this.timeout);\n }\n };\n\n private cleanup(): void {\n const elements = this.hoveredElements.map((hoveredElement: {element: HTMLElement; isHovered: boolean}) => hoveredElement.element);\n\n elements.forEach((element: HTMLElement) => this.removeEventListeners(element));\n this.removeEventListeners(this.dialogRef);\n\n this.hoveredElements = [];\n this.createdBuilder = null;\n }\n\n private addEventListeners(element: HTMLElement): void {\n element.addEventListener('mouseenter', this.mouseEnter);\n element.addEventListener('mouseleave', this.mouseLeave);\n }\n\n private removeEventListeners(element: HTMLElement): void {\n element?.removeEventListener('mouseenter', this.mouseEnter);\n element?.removeEventListener('mouseleave', this.mouseLeave);\n }\n}\n","/**\n * Workaround to be able to catch the instance of the error\n * https://github.com/Microsoft/TypeScript/issues/13965#issuecomment-278570200\n */\n\nexport class BaseError extends Error {\n public constructor(message?: string) {\n super(message);\n Object.setPrototypeOf(this, new.target.prototype);\n }\n}\n","import {BaseError} from './base-error';\n\nexport class NotImplementedError extends BaseError {\n public constructor() {\n super('Method not implemented');\n }\n}\n","import {ChangeDetectorRef} from '@angular/core';\nimport {UntypedFormGroup} from '@angular/forms';\nimport {filter, find, first, forEach, includes, isEmpty, isEqual, isNil, size} from 'lodash-es';\nimport {StringUtils} from '../common/utils/string-utils';\n\nexport class FormValidationHelper {\n private static allowedElements = ['mat-form-field', 'input', 'button', 'span'];\n\n public checkForm(form: UntypedFormGroup, document: Document): boolean {\n return this.checkForms([form], document);\n }\n\n public checkForms(forms: UntypedFormGroup[], document: Document, changeDetectorRef: ChangeDetectorRef = null, skipDisabled: boolean = false): boolean {\n forms = filter(forms, (form: UntypedFormGroup) => !isNil(form));\n let formIndex = 0;\n forEach(forms, (form: UntypedFormGroup) => {\n form.markAllAsTouched();\n\n if (!isNil(changeDetectorRef)) {\n changeDetectorRef.detectChanges();\n }\n\n if (form.valid) {\n formIndex += 1;\n }\n\n if (!form.valid && form.disabled && skipDisabled) {\n formIndex += 1;\n }\n });\n\n this.checkDocumentFormControls(document);\n return formIndex === forms.length;\n }\n\n public scrollToFirstInvalidAndTouchedFormField(document: Document): void {\n const invalidAndTouchedElements: HTMLElement[] = this.findInvalidControlsInForms(document, '.ng-invalid.ng-touched, .mat-form-field-invalid.ng-touched, .tab-error');\n\n if (!isEmpty(invalidAndTouchedElements)) {\n this.scrollToFirstInvalidFormElement(invalidAndTouchedElements);\n }\n }\n\n private checkDocumentFormControls(document: Document): boolean {\n const invalidElements: HTMLElement[] = this.findInvalidControlsInForms(document);\n const isFormValid = isEmpty(invalidElements);\n if (!isFormValid) {\n this.scrollToFirstInvalidFormElement(invalidElements);\n }\n return isFormValid;\n }\n\n private findInvalidControlsInForms(document: Document, query: string = '.ng-invalid, .mat-form-field-invalid, .tab-error'): HTMLElement[] {\n const elementsFromMatDialogContainer: HTMLElement[] = [];\n const elementsNotFromMatDialogContainer: HTMLElement[] = [];\n const invalidElements: NodeListOf = document.querySelectorAll(query);\n forEach(invalidElements, (element: HTMLElement) => {\n if (this.isChildOfOrMatDialogContainer(element)) {\n elementsFromMatDialogContainer.push(element);\n } else {\n elementsNotFromMatDialogContainer.push(element);\n }\n });\n\n const matDialogs: NodeListOf = document.querySelectorAll('mat-dialog-container');\n if (size(matDialogs) > 0 && size(elementsFromMatDialogContainer) < 1) {\n return [];\n }\n\n return size(elementsFromMatDialogContainer) > 0 ? elementsFromMatDialogContainer : elementsNotFromMatDialogContainer;\n }\n\n private isChildOfOrMatDialogContainer(element: HTMLElement): boolean {\n const elementIsMatDialogContainer = StringUtils.isEqualIgnoreCase('mat-dialog-container', element.nodeName);\n if (elementIsMatDialogContainer) {\n return true;\n }\n return isNil(element.parentElement) ? false : this.isChildOfOrMatDialogContainer(element.parentElement);\n }\n\n private findFirstFormElement(elements: HTMLElement[]): HTMLElement {\n let result: HTMLElement = first(elements);\n\n const matchingElement: HTMLElement = find(elements, (element: HTMLElement) => {\n const elementName: string = element.nodeName.toLowerCase();\n return includes(FormValidationHelper.allowedElements, elementName);\n });\n\n if (!isNil(matchingElement)) {\n result = matchingElement;\n }\n\n return result;\n }\n\n private openParentExtensionPanel(element: HTMLElement): void {\n const elementIsExpansionPanel = StringUtils.isEqualIgnoreCase(element.nodeName, 'mat-expansion-panel');\n if (elementIsExpansionPanel) {\n const firstElement: HTMLElement = find(element.children, (child: HTMLElement) => {\n const isExpansionHeader = StringUtils.isEqualIgnoreCase(child.nodeName, 'mat-expansion-panel-header');\n const isExpanded = child.className.indexOf('mat-expanded') >= 0;\n return isExpansionHeader && !isExpanded;\n }) as HTMLElement;\n if (!isNil(firstElement)) {\n firstElement.click();\n }\n }\n\n if (!isNil(element.parentElement)) {\n this.openParentExtensionPanel(element.parentElement);\n }\n }\n\n private selectParentTab(element: HTMLElement): void {\n const elementIsTabPanel = element.classList.contains('mat-tab-label');\n if (elementIsTabPanel) {\n element.click();\n }\n\n if (!isNil(element.parentElement)) {\n this.selectParentTab(element.parentElement);\n }\n }\n\n private checkIfElementIsContainedInTabBody(element: HTMLElement): void {\n const elementIsTabBody = StringUtils.isEqualIgnoreCase('mat-tab-body', element.nodeName);\n if (elementIsTabBody) {\n const tabName: string = element.getAttribute('aria-labelledby');\n this.selectMatTabGroup(element, tabName);\n }\n\n if (!isNil(element.parentElement)) {\n this.checkIfElementIsContainedInTabBody(element.parentElement);\n }\n }\n\n private selectMatTabGroup(element: HTMLElement, tabName: string): void {\n const elementIsMatTabGroup = StringUtils.isEqualIgnoreCase('mat-tab-group', element.nodeName);\n\n if (elementIsMatTabGroup) {\n this.selectMatTabHeader(element, tabName);\n }\n\n if (!isNil(element.parentElement)) {\n this.selectMatTabGroup(element.parentElement, tabName);\n }\n }\n\n private selectMatTabHeader(element: HTMLElement, tabName: string): void {\n const tabHeadersElements: HTMLCollectionOf = element.getElementsByClassName('mat-tab-label');\n const tabElement: HTMLElement = find(tabHeadersElements, (tab: HTMLElement) => isEqual(tabName, tab.getAttribute('aria-controls'))) as HTMLElement;\n\n if (!isNil(tabElement)) {\n tabElement.click();\n }\n }\n\n private scrollToFirstInvalidFormElement(invalidElements: HTMLElement[]): void {\n const element: HTMLElement = this.findFirstFormElement(invalidElements);\n this.openParentExtensionPanel(element);\n this.selectParentTab(element);\n this.checkIfElementIsContainedInTabBody(element);\n setTimeout(() => element.parentElement.scrollIntoView(), 400);\n }\n}\n","
\n \n @if (compact) {\n {{ message | bmsTranslate }}{{ entityName && '.' }} \n } @else {\n {{ message | bmsTranslate }}{{ entityName && '.' }} \n }\n\n @if (link && !isDialog()) {\n {{ linkTranslationKey | bmsTranslate }} {{ entityName }}\n }\n @if (loadEntry && isDialog()) {\n
{{ linkTranslationKey | bmsTranslate }} {{ entityName }}
\n }\n
\n","import {Component, Input, OnChanges, SimpleChanges} from '@angular/core';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {ContentSwitcherDialogService} from '../../custom-components/content-switcher/content-switcher-dialog.service';\nimport {ContentSwitcherEntry} from '../../custom-components/content-switcher/content-switcher-entry.interface';\nimport {ContentSwitcherNavigationInput} from '../../custom-components/navigation-helper-prototype/content-switcher-navigation-input.interface';\nimport {NavigationHelperPrototypeService} from '../../custom-components/navigation-helper-prototype/navigation-helper-prototype.service';\n\n@Component({\n selector: 'vdw-invalid-form-message',\n templateUrl: './invalid-form-message.component.html',\n styleUrls: ['./invalid-form-message.component.scss']\n})\nexport class InvalidFormMessageComponent implements OnChanges {\n @Input() public message = 'ANGULAR_COMPONENT_LIBRARY.FORM_MESSAGE.CHECK_INVALID_FIELDS';\n @Input() public compact = false;\n @Input() public link = null;\n @Input() public linkTranslationKey = 'GENERAL.ACTIONS.LOAD';\n @Input() public loadEntry: ContentSwitcherEntry | ContentSwitcherNavigationInput;\n\n public entityName = '';\n\n public constructor(\n private readonly contentSwitcher: ContentSwitcherDialogService,\n private readonly navigationHelper: NavigationHelperPrototypeService\n ) {}\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.entityName = 'loadEntry' in changes ? (this.loadEntry as ContentSwitcherEntry).entityName : '';\n }\n\n protected navigate(): void {\n if (this.navigationHelper.contentSwitcherDialogActive()) {\n this.navigationHelper.navigateWithContentSwitcher(this.loadEntry as ContentSwitcherNavigationInput);\n return;\n }\n\n this.contentSwitcher.navigateBack();\n this.contentSwitcher.navigateForward({key: 'placeholder', component: undefined, data: null});\n\n setTimeout(() => {\n this.contentSwitcher.navigateForward(this.loadEntry as ContentSwitcherEntry);\n }, 0);\n }\n\n protected isDialog(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.contentSwitcher.dialog) || this.navigationHelper.contentSwitcherDialogActive();\n }\n}\n","export enum AgGridRowSelection {\n SINGLE = 'singleRow',\n MULTIPLE = 'multiRow'\n}\n","@if (canShowSingleIcon()) {\n \n} @else {\n \n}\n\n\n
\n @for (button of buttons; track $index) {\n \n }\n
\n
\n","import {Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {Component, ElementRef, TemplateRef, ViewChild, ViewContainerRef} from '@angular/core';\nimport {ICellRendererAngularComp} from 'ag-grid-angular';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {CrudOverviewButtonConfig} from '../../custom-components/crud-overview-data/interfaces/crud-overview-button-config.interface';\nimport {CellButtonParams} from './cell-button-params.interface';\n\n@Component({\n templateUrl: './cell-button.component.html',\n styleUrls: ['./cell-button.component.scss']\n})\nexport class CellButtonComponent extends BaseComponent implements ICellRendererAngularComp {\n @ViewChild('hoverButton', {read: ElementRef}) public hoverButton: ElementRef;\n @ViewChild('overlayTemplate') public overlayTemplate: TemplateRef;\n\n public buttons: CrudOverviewButtonConfig[];\n public menuWidth = 0;\n public offsetXWidthPerButton = -8;\n private overlayRef: OverlayRef;\n private isOverlayOpen = false;\n private params: CellButtonParams;\n private closeOverlayTimeout: any;\n\n public constructor(\n private overlay: Overlay,\n private vcr: ViewContainerRef\n ) {\n super();\n }\n\n public agInit(params: CellButtonParams): void {\n this.params = params;\n this.buttons = params.buttons;\n }\n\n public showOverlay(): void {\n if (AssertionUtils.isNullOrUndefined(this.overlayRef)) {\n const positionStrategy = this.overlay\n .position()\n .flexibleConnectedTo(this.hoverButton)\n .withPositions([{originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: 6}]);\n\n this.overlayRef = this.overlay.create({positionStrategy, hasBackdrop: false});\n const portal = new TemplatePortal(this.overlayTemplate, this.vcr);\n this.overlayRef.attach(portal);\n\n this.isOverlayOpen = true;\n }\n }\n\n public closeOverlay(): void {\n if (this.isOverlayOpen) {\n this.overlayRef?.detach();\n this.overlayRef = undefined;\n this.isOverlayOpen = false;\n }\n }\n\n public onMouseLeave(): void {\n this.closeOverlayTimeout = setTimeout(() => {\n this.closeOverlay();\n });\n }\n\n public cancelClose(): void {\n if (this.closeOverlayTimeout) {\n clearTimeout(this.closeOverlayTimeout);\n this.closeOverlayTimeout = null;\n }\n }\n\n public refresh(params: any): boolean {\n return false;\n }\n\n public stopClickEvent(event: PointerEvent): void {\n event.stopPropagation();\n }\n\n public canShowSingleIcon(): boolean {\n return this.buttons.length === 1;\n }\n\n public iconClicked(event: PointerEvent, button: CrudOverviewButtonConfig): void {\n event.stopPropagation();\n button.onClick({gridApi: this.params.api, rowNode: this.params.node});\n }\n}\n","import {Inject, Injectable, Optional} from '@angular/core';\nimport {Router} from '@angular/router';\nimport {ColDef, GridApi} from 'ag-grid-community';\nimport {Observable} from 'rxjs';\nimport {CrudOverviewButtonConfig} from '../custom-components/crud-overview-data/interfaces/crud-overview-button-config.interface';\nimport {TranslateService} from '../translation/translate.service';\nimport {GridOptionsBuilder} from './grid-options-builder';\n\ntype SaveGridSettingsFunction = (identifier: any, columnState: Record) => Observable;\ntype GetGridSettingsFunction = (identifier: any) => Observable;\n\n@Injectable({providedIn: 'root'})\nexport class GridOptionsBuilderFactoryService {\n public constructor(\n private readonly translateService: TranslateService,\n private readonly router: Router,\n @Optional() @Inject('SaveGridSettingsFunction') private readonly saveGridSettings: SaveGridSettingsFunction,\n @Optional() @Inject('GetGridSettingsFunction') private readonly getGridSettings: GetGridSettingsFunction\n ) {}\n\n public getBuilder(columnDefs: ColDef[], gridIdentifier: string, rowData?: any, resizable: boolean = false): GridOptionsBuilder {\n return new GridOptionsBuilder(this.translateService, this.router, this.saveGridSettings, this.getGridSettings).getDefaultGridOptions(columnDefs, gridIdentifier, rowData, resizable);\n }\n\n public getCrudBuilder(columnDefs: ColDef[], gridIdentifier: string, rowData: any, rowActionButtons: CrudOverviewButtonConfig[], resizable: boolean = false): GridOptionsBuilder {\n return new GridOptionsBuilder(this.translateService, this.router, this.saveGridSettings, this.getGridSettings).getDefaultCrudGridOptions(\n columnDefs,\n gridIdentifier,\n rowData,\n rowActionButtons,\n resizable\n );\n }\n\n public getBuilderFromExistingGridApi(gridApi: GridApi): GridOptionsBuilder {\n return new GridOptionsBuilder(this.translateService, this.router, this.saveGridSettings, this.getGridSettings).fromExistingGridApi(gridApi);\n }\n}\n","import {ColorConstants} from '../common/colors-variables.generated';\n\nexport const gridThemeParameters = {\n spacing: 8,\n wrapperBorder: true,\n wrapperBorderRadius: 4,\n cellHorizontalPadding: 12,\n accentColor: ColorConstants.NEUTRAL_900,\n borderColor: ColorConstants.NEUTRAL_850,\n rowBorder: true,\n fontSize: 14,\n rowHeight: 32,\n pinnedColumnBorder: true,\n pinnedRowBorder: false,\n rowHoverColor: ColorConstants.NEUTRAL_900,\n popupShadow: `0px 0px 3px 0px ${ColorConstants.NEUTRAL_BLACK}33, 0px 8px 16px -4px ${ColorConstants.NEUTRAL_BLACK}26`,\n selectedRowBackgroundColor: ColorConstants.PRIMARY_900,\n focusShadow: 'none',\n rowGroupIndentSize: 0,\n fontFamily: 'Source Sans Pro',\n //header\n headerTextColor: ColorConstants.NEUTRAL_BLACK,\n headerBackgroundColor: ColorConstants.NEUTRAL_950,\n headerFontWeight: 600,\n headerVerticalPaddingScale: 0.6,\n headerColumnBorder: true,\n headerColumnResizeHandleHeight: 0,\n //icon\n iconSize: 16,\n iconButtonHoverBackgroundColor: 'tranparent',\n iconButtonHoverColor: 'transparent',\n //menu\n menuBackgroundColor: ColorConstants.NEUTRAL_WHITE,\n menuSeparatorColor: ColorConstants.NEUTRAL_900,\n menuTextColor: ColorConstants.NEUTRAL_BLACK,\n menuBorder: 'none',\n //floating filter\n widgetContainerHorizontalPadding: {ref: 'spacing'},\n widgetContainerVerticalPadding: {ref: 'spacing'},\n listItemHeight: 32,\n //panel\n dialogBorder: 'none',\n panelBackgroundColor: ColorConstants.NEUTRAL_WHITE,\n panelTitleBarBackgroundColor: ColorConstants.NEUTRAL_WHITE,\n panelTitleBarBorder: {color: ColorConstants.NEUTRAL_900}\n};\n","import {Router} from '@angular/router';\nimport {\n AgGridEvent,\n BodyScrollEvent,\n CellDoubleClickedEvent,\n CellEditingStartedEvent,\n CellEditingStoppedEvent,\n CellMouseOverEvent,\n CellPosition,\n CellValueChangedEvent,\n ColDef,\n ColumnMenuTab,\n ColumnMovedEvent,\n ColumnPinnedEvent,\n ColumnResizedEvent,\n ColumnState,\n ColumnVisibleEvent,\n createTheme,\n DisplayedColumnsChangedEvent,\n DndSourceCallbackParams,\n DndSourceOnRowDragParams,\n FilterChangedEvent,\n FirstDataRenderedEvent,\n GetContextMenuItemsParams,\n GetLocaleTextParams,\n GetMainMenuItemsParams,\n GetRowIdFunc,\n GetRowIdParams,\n GetServerSideGroupKey,\n GridApi,\n GridOptions,\n GridPreDestroyedEvent,\n GridReadyEvent,\n GridSizeChangedEvent,\n IDetailCellRendererParams,\n IRowDragItem,\n IServerSideDatasource,\n IsServerSideGroup,\n MenuItemDef,\n NewColumnsLoadedEvent,\n RowClassParams,\n RowClassRules,\n RowClickedEvent,\n RowDataUpdatedEvent,\n RowDoubleClickedEvent,\n RowDragCallbackParams,\n RowDragEndEvent,\n RowDragEnterEvent,\n RowDragEvent,\n RowDragLeaveEvent,\n RowDropZoneParams,\n RowEditingStoppedEvent,\n RowGroupingDisplayType,\n RowGroupOpenedEvent,\n RowHeightParams,\n RowNode,\n RowSelectedEvent,\n RowSelectionOptions,\n RowStyle,\n RowValueChangedEvent,\n SelectionChangedEvent,\n SortChangedEvent,\n TabToNextCellParams\n} from 'ag-grid-community';\nimport {MultiRowSelectionOptions} from 'ag-grid-community/dist/types/core/entities/gridOptions';\nimport {throttle} from 'lodash-es';\nimport {catchError, Observable, of, ReplaySubject, Subject, takeUntil} from 'rxjs';\nimport {ColorConstants} from '../common/colors-variables.generated';\nimport {AssertionUtils} from '../common/utils/assertion-utils';\nimport {CrudOverviewButtonConfig} from '../custom-components/crud-overview-data/interfaces/crud-overview-button-config.interface';\nimport {TranslateService} from '../translation/translate.service';\nimport {AgGridRowSelection} from './ag-grid-row-selection.enum';\nimport {CellButtonParams} from './cell-button/cell-button-params.interface';\nimport {CellButtonComponent} from './cell-button/cell-button.component';\nimport {GridColumnSettings} from './grid-column-settings.interface';\nimport {ExternalGridDropZone} from './grid-drop-zone.interface';\nimport {GridState} from './grid-state.interface';\nimport {gridThemeParameters} from './grid-theme-api-parameters';\nimport {GridTooltipComponent} from './grid-tooltip/grid-tooltip.component';\nimport {HeaderClass} from './header-class';\nimport {AgGridUtils} from './helper/ag-grid-utils';\nimport {LoadingOverlayComponent} from './overlay/loading-overlay/loading-overlay.component';\nimport {NoDataOverlayComponent} from './overlay/no-data-overlay/no-data-overlay.component';\n\nexport class GridOptionsBuilder {\n private gridOptions: GridOptions = {\n theme: createTheme().withParams(gridThemeParameters),\n headerHeight: 32,\n getRowId: (params: GetRowIdParams) => `${params.data.id}`,\n defaultColDef: {\n sortable: true,\n suppressHeaderMenuButton: true,\n tooltipComponent: GridTooltipComponent,\n filter: 'agMultiColumnFilter',\n filterParams: {\n filters: [\n {\n filter: 'agTextColumnFilter',\n filterParams: {buttons: ['reset']}\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {buttons: ['reset']}\n }\n ]\n },\n floatingFilter: true\n },\n suppressMovableColumns: false,\n suppressDragLeaveHidesColumns: true,\n tabIndex: -1,\n onFilterChanged: (event: FilterChangedEvent) => {\n this.addPlaceholderToFloatingFilter();\n this.resizeGrid(event.api);\n },\n onDisplayedColumnsChanged: () => this.addPlaceholderToFloatingFilter(),\n onFirstDataRendered: (event: FirstDataRenderedEvent) => this.onFirstDataRendered(event),\n onGridReady: (event: GridReadyEvent) => this.onGridReady(event),\n onGridPreDestroyed: (event: GridPreDestroyedEvent) => this.onGridPreDestroyed(event),\n getMainMenuItems: (params: GetMainMenuItemsParams) => {\n return params.defaultItems.filter((item: string) => item !== 'rowUnGroup');\n },\n getRowClass: (params: RowClassParams) => this.assignParamsToGetTheClass(params),\n animateRows: true,\n loadingOverlayComponent: LoadingOverlayComponent,\n rowSelection: {mode: AgGridRowSelection.SINGLE, checkboxes: false, enableClickSelection: true},\n context: {\n rowSelection: {mode: AgGridRowSelection.SINGLE, checkboxes: false, enableClickSelection: true},\n gridIdentifier: 'undefined'\n },\n rowClass: 'normal',\n stopEditingWhenCellsLoseFocus: true,\n suppressCellFocus: true,\n tooltipShowDelay: 500,\n multiSortKey: 'ctrl',\n suppressContextMenu: true,\n columnMenu: 'new'\n } as GridOptions;\n\n private gridApi: GridApi;\n private readonly gridColumnSettings = new ReplaySubject(1);\n private readonly SHOW_HIDE_SEARCH_TRANSLATION_KEY = 'AGGRID.SHOWHIDESEARCH';\n private readonly EXPAND_ALL_TRANSLATION_KEY = 'AGGRID.EXPANDALL';\n private readonly COLLAPSE_ALL_TRANSLATION_KEY = 'AGGRID.COLLAPSEALL';\n\n private readonly unSubscribeOnGridDestroy = new Subject();\n\n public constructor(\n private readonly translateService: TranslateService,\n private readonly router: Router,\n private readonly saveGridSettings: (identifier: any, columnState: Record) => Observable,\n private readonly getGridSettings: (identifier: any) => Observable\n ) {\n if (AssertionUtils.isNullOrUndefined(this.saveGridSettings)) {\n this.saveGridSettings = (): Observable => of(null);\n }\n\n if (AssertionUtils.isNullOrUndefined(this.getGridSettings)) {\n this.getGridSettings = (): Observable => of(null);\n }\n }\n\n public build(): GridOptions {\n return this.gridOptions;\n }\n\n public withInitialGroupOrderComparator(comparator: any): this {\n this.gridOptions.initialGroupOrderComparator = comparator;\n\n return this;\n }\n\n public getDefaultGridOptions(columnDefs: ColDef[], gridIdentifier: string, rowData?: any, resizable: boolean = false): this {\n this.gridOptions.maintainColumnOrder = true;\n\n if (rowData) {\n this.gridOptions.rowData = rowData;\n }\n\n if (columnDefs.length > 0 && columnDefs.every((columnDef: ColDef) => !columnDef.lockVisible)) {\n columnDefs[0].lockVisible = true;\n }\n\n const groupColDefIndex = columnDefs.findIndex((columnDef: ColDef) => columnDef.rowGroup && columnDef.hide);\n\n if (groupColDefIndex !== -1) {\n columnDefs[groupColDefIndex].suppressColumnsToolPanel = true;\n }\n\n if (columnDefs.length === 1) {\n this.withoutMovableColumns();\n }\n\n this.extendOption('columnDefs', columnDefs);\n\n this.withColumnMenu();\n\n this.withOnBodyScroll(() => {\n this.addPlaceholderToFloatingFilter();\n this.addCompactClassToFloatingFilter();\n });\n\n this.withGridIdentifier(gridIdentifier, resizable);\n\n this.withMainMenuItems(true, ['hideFloatingFilter']);\n\n return this;\n }\n\n public getDefaultCrudGridOptions(columnDefs: ColDef[], gridIdentifier: string, rowData: any, rowActionButtons: CrudOverviewButtonConfig[], resizable: boolean = false): this {\n this.gridOptions.maintainColumnOrder = true;\n\n if (rowData) {\n this.gridOptions.rowData = rowData;\n }\n\n if (columnDefs.length > 0 && columnDefs.every((columnDef: ColDef) => !columnDef.lockVisible)) {\n columnDefs[0].lockVisible = true;\n }\n\n const groupColDefIndex = columnDefs.findIndex((columnDef: ColDef) => columnDef.rowGroup && columnDef.hide);\n\n if (groupColDefIndex !== -1) {\n columnDefs[groupColDefIndex].suppressColumnsToolPanel = true;\n }\n\n if (columnDefs.length === 1) {\n this.withoutMovableColumns();\n }\n\n this.extendOption('columnDefs', columnDefs);\n this.gridOptions.popupParent = document.body;\n\n this.withColumnMenu();\n\n if (!AssertionUtils.isEmpty(rowActionButtons)) {\n this.withRowActions({buttons: rowActionButtons});\n }\n\n this.withOnBodyScroll(() => {\n this.addPlaceholderToFloatingFilter();\n this.addCompactClassToFloatingFilter();\n });\n\n this.withGridIdentifier(gridIdentifier, resizable);\n\n this.withMainMenuItems(true, ['hideFloatingFilter']);\n\n return this;\n }\n\n public fromExistingGridApi(gridApi: GridApi): this {\n this.gridApi = gridApi;\n\n return this;\n }\n\n // General\n public withServerSideDataSource(cacheBlockSize: number, dataSource: IServerSideDatasource): this {\n this.setOption('blockLoadDebounceMillis', 1);\n this.setOption('rowModelType', 'serverSide');\n this.setOption('maxConcurrentDatasourceRequests', 1);\n this.setOption('loadingOverlayComponent', LoadingOverlayComponent);\n\n this.gridOptions.cacheBlockSize = cacheBlockSize;\n this.gridOptions.serverSideDatasource = dataSource;\n this.gridOptions.loadingCellRendererParams = {loadingForTheFirstTime: true};\n\n return this;\n }\n\n public withTreeData(isServerSideGroup: IsServerSideGroup = null, getServerSideGroupKey: GetServerSideGroupKey = null): this {\n this.gridOptions.treeData = true;\n this.gridOptions.isServerSideGroup = isServerSideGroup;\n this.gridOptions.getServerSideGroupKey = getServerSideGroupKey;\n return this;\n }\n\n // Add properties\n public withHeaderHeight(height: number): this {\n this.gridOptions.headerHeight = height;\n return this;\n }\n\n /**\n *\n * @deprecated Please use the predefined css classes to set the row height of a grid.\n * Row height is 32px by default, use css class='ag-grid-compact-view' for 24px and css class='ag-grid-large-view' for 48px.\n */\n public withRowHeight(height: number): this {\n this.gridOptions.rowHeight = height;\n return this;\n }\n\n public withLoadingCellRenderer(loadingCellRenderer: string): this {\n this.gridOptions.loadingCellRenderer = loadingCellRenderer;\n return this;\n }\n\n public withComponents(components: any): this {\n this.setOption('components', components);\n return this;\n }\n\n public withFloatingFiltersHeight(height: number): this {\n this.gridOptions.floatingFiltersHeight = height;\n return this;\n }\n\n public withRowClass(rowClass: string | string[]): this {\n this.gridOptions.rowClass = rowClass;\n return this;\n }\n\n public withRowClassRules(rules: RowClassRules): this {\n this.gridOptions.rowClassRules = rules;\n return this;\n }\n\n public withCompactView(): this {\n if (this.gridOptions.autoGroupColumnDef) {\n this.gridOptions.autoGroupColumnDef = {\n ...this.gridOptions.autoGroupColumnDef,\n headerClass: Array.isArray(this.gridOptions.autoGroupColumnDef.headerClass) ? this.gridOptions.autoGroupColumnDef.headerClass.join(' ') : this.gridOptions.autoGroupColumnDef.headerClass\n };\n\n this.gridOptions.autoGroupColumnDef = {...this.gridOptions.autoGroupColumnDef, headerClass: `${this.gridOptions.autoGroupColumnDef.headerClass ?? ''} ${HeaderClass.COMPACT}`};\n }\n\n for (const colDef of this.gridOptions.columnDefs) {\n colDef.headerClass = Array.isArray(colDef.headerClass) ? colDef.headerClass.join(' ') : colDef.headerClass;\n colDef.headerClass = `${colDef.headerClass ?? ''} ${HeaderClass.COMPACT}`;\n }\n\n this.gridOptions.rowClass = Array.isArray(this.gridOptions.rowClass) ? this.gridOptions.rowClass.join(' ') : this.gridOptions.rowClass;\n this.gridOptions.rowClass = `${this.gridOptions.rowClass ?? ''} ${HeaderClass.COMPACT}`;\n\n return this;\n }\n\n public withGetRowId(getRowIdFunction: GetRowIdFunc): this {\n this.setOption('getRowId', (params: GetRowIdParams) => getRowIdFunction(params).toString());\n return this;\n }\n\n public withoutGetRowId(): this {\n this.setOption('getRowId', undefined);\n return this;\n }\n\n public withAutoHeight(): this {\n this.setOption('autoHeight', true);\n return this;\n }\n\n public withRowSelection(allowMultipleSelection: boolean, headerWithCheckbox: boolean = true, groupSelectsChildren: boolean = false): this {\n const defaultOptions = this.gridOptions.rowSelection as RowSelectionOptions;\n this.gridOptions.selectionColumnDef = {pinned: 'left', headerClass: 'ag-cell-flex-center', cellClass: 'ag-cell-flex-center', minWidth: 40, maxWidth: 40};\n\n defaultOptions.checkboxes = true;\n defaultOptions.enableClickSelection = true;\n defaultOptions.enableSelectionWithoutKeys = true;\n\n if (allowMultipleSelection) {\n const multiOptions = this.gridOptions.rowSelection as MultiRowSelectionOptions;\n\n multiOptions.mode = AgGridRowSelection.MULTIPLE;\n multiOptions.headerCheckbox = headerWithCheckbox;\n multiOptions.groupSelects = groupSelectsChildren ? 'descendants' : 'self';\n\n this.setOption('context', {...this.gridOptions.context, ...{rowSelection: multiOptions}});\n }\n\n return this;\n }\n\n public withoutRowSelection(): this {\n this.gridOptions.rowSelection = null;\n return this;\n }\n\n private assignParamsToGetTheClass(params: RowClassParams): string[] {\n return [this.applyClassToGroupLastRow(params), this.applyClassToOpenedRowGroup(params)];\n }\n\n private applyClassToGroupLastRow(params: RowClassParams): string {\n if (!AssertionUtils.isNullOrUndefined(params.node.parent) && !AssertionUtils.isNullOrUndefined(params.node.parent.group)) {\n const allChildren = params.node.parent.allLeafChildren;\n if (allChildren?.at(-1) === params.node) {\n return 'last-expanded-row';\n }\n return '';\n }\n }\n\n private applyClassToOpenedRowGroup(params: RowClassParams): string {\n return !AssertionUtils.isNullOrUndefined(params.node.parent) && !AssertionUtils.isNullOrUndefined(params.node.parent.group) ? 'row-group-class' : '';\n }\n\n private getDragHandleColDef(\n dragHandleText: (params: IRowDragItem, dragItemCount: number) => string = () => '',\n rowDrag: boolean | ((params: RowDragCallbackParams) => boolean) = undefined,\n dndSource: boolean | ((params: DndSourceCallbackParams) => boolean) = undefined,\n dndOnRowDrag: (params: DndSourceOnRowDragParams) => void = undefined\n ): ColDef {\n return {\n colId: 'dragHandle',\n cellClass: 'ag-cell-flex-center',\n rowDrag: rowDrag,\n rowDragText: dragHandleText,\n width: 35,\n minWidth: 35,\n maxWidth: 35,\n resizable: false,\n suppressHeaderMenuButton: true,\n filter: false,\n floatingFilter: false,\n lockVisible: true,\n suppressColumnsToolPanel: true,\n lockPosition: 'left',\n pinned: 'left',\n lockPinned: true,\n suppressMovable: true,\n sortable: false,\n dndSource: dndSource,\n dndSourceOnRowDrag: dndOnRowDrag\n };\n }\n\n public withRowDraggingToExternalDropZones(\n dragHandleText: (params: IRowDragItem, dragItemCount: number) => string,\n externalDropZones: ExternalGridDropZone[],\n draggingInsideGrid: boolean = false\n ): this {\n this.extendOption('columnDefs', [this.getDragHandleColDef(dragHandleText, true)]);\n this.gridOptions.rowDragManaged = draggingInsideGrid;\n\n this.gridOptions.onRowDragEnter = (rowDragStartParams: RowDragEnterEvent): void => {\n externalDropZones.forEach((externalDropZone: ExternalGridDropZone) => {\n document.querySelectorAll(externalDropZone.querySelector).forEach((dropTarget: HTMLElement) => {\n let dropZoneParams: RowDropZoneParams = {\n getContainer: () => dropTarget,\n onDragEnter: (params: RowDragEnterEvent) => {\n document.querySelector('.ag-dnd-ghost').classList.add('no-pointer-events');\n externalDropZone.setData(params);\n },\n onDragLeave: (params: RowDragLeaveEvent) => {\n document.querySelector('.ag-dnd-ghost').classList.remove('no-pointer-events');\n externalDropZone.clearData(params);\n },\n onDragStop: externalDropZone.clearData\n };\n\n rowDragStartParams.api.removeRowDropZone({getContainer: () => dropTarget});\n rowDragStartParams.api.addRowDropZone(dropZoneParams);\n });\n });\n };\n\n return this;\n }\n\n public withRowDraggingOutsideGrid(onRowDrag: (params: Partial) => void, dndSource: (params: DndSourceCallbackParams) => boolean = null, columnIndex?: number): this {\n this.extendOption('columnDefs', [this.getDragHandleColDef(undefined, undefined, dndSource ?? true, onRowDrag)]);\n\n return this;\n }\n\n public withRowDraggingInsideGrid(dragHandleText: (params: IRowDragItem, dragItemCount: number) => string = undefined, rowDrag: boolean | ((params: RowDragCallbackParams) => boolean) = true): this {\n this.extendOption('columnDefs', [this.getDragHandleColDef(dragHandleText, rowDrag)]);\n this.gridOptions.rowDragManaged = true;\n\n return this;\n }\n\n public withNoRowsOverlay(params?: any): this {\n this.setOption('noRowsOverlayComponent', NoDataOverlayComponent);\n this.gridOptions.noRowsOverlayComponentParams = params;\n\n this.withOnRowDataUpdated(({api}: RowDataUpdatedEvent) => AgGridUtils.onRowDataUpdated(api));\n this.withOnFilterChanged(({api}: FilterChangedEvent) => AgGridUtils.onRowDataUpdated(api));\n\n return this;\n }\n\n public withLoadingOverlay(params?: any): this {\n this.setOption('loadingOverlayComponent', LoadingOverlayComponent);\n this.gridOptions.loadingOverlayComponentParams = params;\n return this;\n }\n\n public withOverlayLoadingTemplate(overlayLoadingTemplate: string): this {\n this.setOption('loadingOverlayComponent', null);\n this.gridOptions.loadingOverlayComponentParams = null;\n this.gridOptions.overlayLoadingTemplate = overlayLoadingTemplate;\n\n return this;\n }\n\n public withoutSorting(): this {\n this.gridOptions.defaultColDef = {...this.gridOptions.defaultColDef, sortable: false};\n return this;\n }\n\n public withLockPinnedColumns(): this {\n this.gridOptions.defaultColDef = {...this.gridOptions.defaultColDef, lockPinned: true};\n return this;\n }\n\n public withoutMovableColumns(): this {\n this.gridOptions.suppressMovableColumns = true;\n return this;\n }\n\n public withDefaultColDef(defaultColDef: any): this {\n this.gridOptions.defaultColDef = defaultColDef;\n return this;\n }\n\n public withGroupDisplayType(groupDisplayType: RowGroupingDisplayType): this {\n this.gridOptions.groupDisplayType = groupDisplayType;\n return this;\n }\n\n public withSuppressRowClickSelection(value: boolean = true): this {\n this.gridOptions.suppressRowClickSelection = value;\n return this;\n }\n\n public withoutEnableClickSelection(): this {\n const defaultOptions = this.gridOptions.rowSelection as RowSelectionOptions;\n defaultOptions.enableClickSelection = false;\n return this;\n }\n\n public withAutoGroupColumnDef(autoGroupColumnDef: ColDef, pinAndLockColumn: boolean = true): this {\n if (pinAndLockColumn) {\n autoGroupColumnDef.pinned = true;\n autoGroupColumnDef.lockPinned = true;\n }\n\n this.gridOptions.autoGroupColumnDef = autoGroupColumnDef;\n return this;\n }\n\n public withSingleClickEdit(): this {\n this.gridOptions.singleClickEdit = true;\n return this;\n }\n\n public withEditType(): this {\n this.gridOptions.editType = 'fullRow';\n return this;\n }\n\n public withStopEditingWhenCellsLoseFocus(): this {\n this.setOption('stopEditingWhenCellsLoseFocus', true);\n return this;\n }\n\n public withGroupRowRendererParams(groupRowRendererParams: any): this {\n this.gridOptions.groupRowRendererParams = groupRowRendererParams;\n return this;\n }\n\n public withRowDragManaged(): this {\n this.gridOptions.rowDragManaged = true;\n return this;\n }\n\n public withPinnedBottomRowData(data: any): this {\n this.gridOptions.pinnedBottomRowData = data;\n return this;\n }\n\n public withSuppressNoRowsOverlay(): this {\n this.setOption('suppressNoRowsOverlay', true);\n return this;\n }\n\n public withGroupEdit(): this {\n this.setOption('enableGroupEdit', true);\n return this;\n }\n\n public withMasterDetailGrid(detailCellRenderer: any, getDetailCellRendererParams: (dcrParams: any) => IDetailCellRendererParams): this {\n this.gridOptions.masterDetail = true;\n this.gridOptions.detailCellRenderer = detailCellRenderer;\n this.gridOptions.detailCellRendererParams = getDetailCellRendererParams;\n return this;\n }\n\n public withDetailRowHeight(height: number): this {\n this.setOption('height', height);\n return this;\n }\n\n public withMasterDetail(\n detailCellRenderer: any,\n withExpandAndCollapseButton: boolean = false,\n getDetailCellRendererParams?: (dcrParams: any) => IDetailCellRendererParams,\n detailAutoRowHeight: boolean = true\n ): this {\n this.gridOptions.masterDetail = true;\n this.gridOptions.detailCellRenderer = detailCellRenderer;\n this.setOption('detailRowAutoHeight', detailAutoRowHeight);\n\n if (!AssertionUtils.isNullOrUndefined(getDetailCellRendererParams)) {\n this.gridOptions.detailCellRendererParams = getDetailCellRendererParams;\n }\n\n if (withExpandAndCollapseButton) {\n this.withMainMenuItems(true, ['hideFloatingFilter', 'expandButton', 'collapseButton']);\n }\n\n return this;\n }\n\n public withGetRowClass(getRowClass: (params: RowClassParams) => string | string[]): this {\n this.gridOptions.getRowClass = getRowClass;\n return this;\n }\n\n public withSuppressRowHoverHighlight(): this {\n this.gridOptions.suppressRowHoverHighlight = true;\n return this;\n }\n\n public withTooltipShowDelay(tooltipShowDelay: number): this {\n this.gridOptions.tooltipShowDelay = tooltipShowDelay;\n return this;\n }\n\n public withTooltipHideDelay(tooltipHideDelay: number): this {\n this.gridOptions.tooltipHideDelay = tooltipHideDelay;\n return this;\n }\n\n // Add functions\n public withIsRowMaster(isRowMaster: (dataItem: any) => boolean): this {\n this.gridOptions.isRowMaster = isRowMaster;\n return this;\n }\n\n public withIsRowSelectable(isRowSelectable: (dataItem: RowNode) => boolean): this {\n this.gridOptions.isRowSelectable = isRowSelectable;\n this.gridOptions.getRowStyle = (params: RowClassParams): RowStyle => (params.node.selectable ? undefined : {color: ColorConstants.TINT_DARKBLUE_50});\n\n return this;\n }\n\n public withIsExternalFilterPresent(isExternalFilterPresent: () => boolean): this {\n this.gridOptions.isExternalFilterPresent = isExternalFilterPresent;\n return this;\n }\n\n public withRowActions(cellButtonParams?: Partial): this {\n this.extendOption('columnDefs', [\n {\n colId: 'actions',\n cellRendererSelector: (params: CellButtonParams): any => {\n return {\n component: CellButtonComponent,\n params: cellButtonParams\n };\n },\n width: 32,\n minWidth: 32,\n maxWidth: 32,\n resizable: false,\n suppressMenu: true,\n filter: false,\n suppressHeaderMenuButton: true,\n floatingFilter: false,\n lockVisible: true,\n suppressColumnsToolPanel: true,\n lockPosition: 'right',\n pinned: 'right',\n lockPinned: true,\n suppressMovable: true,\n sortable: false\n }\n ]);\n\n return this;\n }\n\n public withDoesExternalFilterPass(doesExternalFilterPass: (node: RowNode) => boolean): this {\n this.gridOptions.doesExternalFilterPass = doesExternalFilterPass;\n return this;\n }\n\n public withTabToNextCell(): this {\n this.gridOptions.tabToNextCell = (params: TabToNextCellParams): CellPosition => {\n const row = params.api.getDisplayedRowAtIndex(params.nextCellPosition.rowIndex);\n if (row.isSelected()) {\n return params.nextCellPosition;\n }\n };\n\n return this;\n }\n\n /**\n *\n * @deprecated Please use the predefined css classes to set the row height of a grid.\n * Row height is 32px by default, use css class='ag-grid-compact-view' for 24px and css class='ag-grid-large-view' for 48px.\n */\n public withGetRowHeight(getRowHeightFunction: (params: RowHeightParams) => number): this {\n this.gridOptions.getRowHeight = getRowHeightFunction;\n return this;\n }\n\n public withColumnMenu(menuTabs: ColumnMenuTab[] = ['generalMenuTab', 'filterMenuTab', 'columnsMenuTab']): this {\n let defaultColDef = this.gridOptions.defaultColDef;\n defaultColDef.menuTabs = menuTabs;\n defaultColDef.suppressHeaderMenuButton = menuTabs.length <= 0;\n\n this.gridOptions.defaultColDef = defaultColDef;\n\n return this;\n }\n\n public withoutColumnMenu(): this {\n return this.withColumnMenu([]);\n }\n\n public withPopupParent(htmlElement: HTMLElement): this {\n this.gridOptions.popupParent = htmlElement;\n return this;\n }\n\n public withContext(context: Record): this {\n this.updateGridContext(context);\n\n return this;\n }\n\n public withRememberStateForNavigationHelper(): this {\n const gridIdentifier = this.gridOptions.context.gridIdentifier;\n\n this.withOnBodyScroll((event: BodyScrollEvent) => {\n if (event.top > -1 && gridIdentifier) {\n sessionStorage.setItem(`gridState.${this.router.url}${gridIdentifier}`, JSON.stringify({...this.getNavigationHelperGridState(), top: event.top} as GridState));\n }\n });\n this.withOnFilterChanged((event: FilterChangedEvent) => {\n sessionStorage.setItem(\n `gridState.${this.router.url}${gridIdentifier}`,\n JSON.stringify({\n ...this.getNavigationHelperGridState(),\n quickFilter: event.api.getQuickFilter(),\n filterModel: event.api.getFilterModel()\n })\n );\n });\n\n return this;\n }\n\n private getNavigationHelperGridState(): GridState {\n return JSON.parse(sessionStorage.getItem(`gridState.${this.router.url}${this.gridOptions.context.gridIdentifier}`)) as GridState;\n }\n\n public withAutomaticRowSelection(): this {\n this.withOnFilterChanged(({api}: FilterChangedEvent) => this.automaticFilterChangedSelection(api));\n this.withOnFirstDataRendered(({api}: FirstDataRenderedEvent) => this.automaticFirstDataRenderedSelection(api));\n this.withOnGridReady(({api}: GridReadyEvent) => this.automaticFirstDataRenderedSelection(api));\n\n return this;\n }\n\n public withAutomaticButtonFocusOnRowSelection(buttonSelector: string): this {\n this.withOnRowSelected((event: RowSelectedEvent) => {\n if (event.api.getSelectedNodes().length > 0) {\n setTimeout(() => {\n const button = document.querySelector(buttonSelector);\n button?.focus();\n }, 500);\n }\n });\n\n return this;\n }\n\n public withMainMenuItems(useDefaultMenuItems: boolean, customItems: string[]): this {\n this.setOption('getMainMenuItems', (params: GetContextMenuItemsParams) => {\n let menuItems: (string | MenuItemDef)[] = [];\n\n if (useDefaultMenuItems) {\n if (params.column.isSortable()) {\n menuItems.push(...params.defaultItems.slice(0, 3));\n }\n\n menuItems.push({\n name: this.translateService.instant('AGGRID.AUTOSIZETHISCOLUMN'),\n icon: '',\n action: (): void => params.api.autoSizeColumns([params.column])\n });\n\n if (!params.column.getColDef().lockPinned) {\n menuItems.push('pinSubMenu');\n }\n\n menuItems.push(...['separator', 'autoSizeAll', 'columnChooser', 'resetColumns']);\n }\n\n if (customItems.includes('hideFloatingFilter')) {\n let defaultColdef = this.getOption(this.gridApi, 'defaultColDef');\n menuItems.push(\n ...[\n 'separator',\n {\n name: this.translateService.instant(this.SHOW_HIDE_SEARCH_TRANSLATION_KEY),\n icon: ``,\n action: (): void => {\n defaultColdef.floatingFilter = !defaultColdef.floatingFilter;\n this.setOption('defaultColDef', defaultColdef);\n this.gridApi.refreshHeader();\n\n if (defaultColdef.floatingFilter) {\n this.addPlaceholderToFloatingFilter();\n }\n }\n }\n ]\n );\n }\n if (customItems.includes('expandButton')) {\n menuItems.push({\n name: this.translateService.instant(this.EXPAND_ALL_TRANSLATION_KEY),\n action: (): void => {\n params.api.forEachNode((node: RowNode) => node.setExpanded(true));\n params.api.hidePopupMenu();\n }\n });\n }\n if (customItems.includes('collapseButton')) {\n menuItems.push({\n name: this.translateService.instant(this.COLLAPSE_ALL_TRANSLATION_KEY),\n action: (): void => {\n params.api.forEachNode((node: RowNode) => node.setExpanded(false));\n params.api.hidePopupMenu();\n }\n });\n }\n\n return menuItems;\n });\n\n return this;\n }\n\n // Event handlers\n public withOnColumnPinned(onColumnPinnedFunction: (event: ColumnPinnedEvent) => void): this {\n this.setOption('onColumnPinned', onColumnPinnedFunction);\n return this;\n }\n\n public withOnColumnMoved(onColumnMovedFunction: (event: ColumnMovedEvent) => void): this {\n this.setOption('onColumnMoved', onColumnMovedFunction);\n return this;\n }\n\n public withOnSortChanged(onSortChangedFunction: (event: SortChangedEvent) => void): this {\n this.setOption('onSortChanged', onSortChangedFunction);\n return this;\n }\n\n public withOnRowSelected(onRowSelectedFunction: (event: RowSelectedEvent) => void): this {\n this.setOption('onRowSelected', onRowSelectedFunction);\n return this;\n }\n\n public withOnFilterChanged(onFilterChangedFunction: (event: FilterChangedEvent) => void): this {\n this.setOption('onFilterChanged', onFilterChangedFunction);\n return this;\n }\n\n public withOnFirstDataRendered(onFirstDataRenderedFunction: (event: FirstDataRenderedEvent) => void): this {\n this.setOption('onFirstDataRendered', onFirstDataRenderedFunction);\n return this;\n }\n\n public withOnBodyScroll(onBodyScrollFunction: (event: BodyScrollEvent) => void): this {\n this.setOption('onBodyScroll', onBodyScrollFunction);\n return this;\n }\n\n public withOnGridReady(gridReadyFunction: (event: GridReadyEvent) => void): this {\n this.setOption('onGridReady', gridReadyFunction);\n return this;\n }\n\n public withOnColumnVisible(columnVisibleFunction: (event: ColumnVisibleEvent) => void): this {\n this.setOption('onColumnVisible', columnVisibleFunction);\n return this;\n }\n\n public withOnRowDataUpdated(rowDataUpdatedFunction: (event: RowDataUpdatedEvent) => void): this {\n this.setOption('onRowDataUpdated', rowDataUpdatedFunction);\n return this;\n }\n\n public withOnColumnResized(columnResizedFunction: (event: ColumnResizedEvent) => void): this {\n this.setOption('onColumnResized', columnResizedFunction);\n return this;\n }\n\n public withOnRowDoubleClicked(onRowDoubleClickedFunction: (event: RowDoubleClickedEvent) => void): this {\n this.gridOptions.onRowDoubleClicked = onRowDoubleClickedFunction;\n return this;\n }\n\n public withOnCellDoubleClicked(onCellDoubleClickedFunction: (event: CellDoubleClickedEvent) => void): this {\n this.gridOptions.onCellDoubleClicked = onCellDoubleClickedFunction;\n return this;\n }\n\n public withOnGridSizeChanged(gridSizeChangedFunction: (event: GridSizeChangedEvent) => void): this {\n this.gridOptions.onGridSizeChanged = gridSizeChangedFunction;\n return this;\n }\n\n public withOnRowClicked(rowClickedFunction: (event: RowClickedEvent) => void): this {\n this.gridOptions.onRowClicked = rowClickedFunction;\n return this;\n }\n\n public withOnCellMouseOver(cellMouseOverFunction: (event: CellMouseOverEvent) => void): this {\n this.gridOptions.onCellMouseOver = cellMouseOverFunction;\n return this;\n }\n\n public withOnRowValueChanged(rowValueChangedFunction: (event: RowValueChangedEvent) => void): this {\n this.gridOptions.onRowValueChanged = rowValueChangedFunction;\n return this;\n }\n\n public withOnRowEditingStopped(rowEditingStoppedFunction: (event: RowEditingStoppedEvent) => void): this {\n this.gridOptions.onRowEditingStopped = rowEditingStoppedFunction;\n return this;\n }\n\n public withOnCellValueChanged(cellValueChangedFunction: (event: CellValueChangedEvent) => void): this {\n this.gridOptions.onCellValueChanged = cellValueChangedFunction;\n return this;\n }\n\n public withOnCellEditingStopped(cellEditingStoppedFunction: (event: CellEditingStoppedEvent) => void = null): this {\n this.gridOptions.onCellEditingStopped = cellEditingStoppedFunction;\n return this;\n }\n\n public withOnCellEditingStarted(cellEditingStartedFunction: (event: CellEditingStartedEvent) => void): this {\n this.gridOptions.onCellEditingStarted = cellEditingStartedFunction;\n return this;\n }\n\n public withOnNewColumnsLoaded(withOnNewColumnsLoaded: (event: NewColumnsLoadedEvent) => void): this {\n this.gridOptions.onNewColumnsLoaded = withOnNewColumnsLoaded;\n return this;\n }\n\n public withOnRowGroupOpened(rowGroupOpened: (event: RowGroupOpenedEvent) => void): this {\n this.gridOptions.onRowGroupOpened = rowGroupOpened;\n return this;\n }\n\n public withOnDisplayedColumnsChanged(onDisplayedColumnsChangedFunction: (event: DisplayedColumnsChangedEvent) => void): this {\n this.gridOptions.onDisplayedColumnsChanged = onDisplayedColumnsChangedFunction;\n return this;\n }\n\n public withOnSelectionChanged(selectionChanged: (event: SelectionChangedEvent) => void): this {\n this.gridOptions.onSelectionChanged = selectionChanged;\n return this;\n }\n\n public withOnRowDragEnd(onRowDragEnd: (event: RowDragEndEvent) => void): this {\n this.gridOptions.onRowDragEnd = onRowDragEnd;\n return this;\n }\n\n public withOnRowDragEndOrLeave(onRowDrag: (event: RowDragEvent) => void): this {\n this.gridOptions.onRowDragEnd = onRowDrag;\n this.gridOptions.onRowDragLeave = onRowDrag;\n return this;\n }\n\n public withSuppressMoveWhenRowDragging(): this {\n this.gridOptions.suppressMoveWhenRowDragging = true;\n return this;\n }\n\n private withGridIdentifier(gridIdentifier: string, resizable: boolean = false): this {\n this.setOption('context', {\n ...this.gridOptions.defaultColDef,\n gridIdentifier: gridIdentifier,\n resizable\n });\n\n this.gridOptions.suppressMovableColumns = false;\n\n const debouncedSaveColumnStateFn = throttle((gridApi: GridApi) => {\n if (!gridApi.isDestroyed()) {\n this.saveGridSettings(this.gridOptions.context.gridIdentifier, this.getGridColumnSettings(gridApi)).pipe(takeUntil(this.unSubscribeOnGridDestroy)).subscribe();\n }\n }, 5000);\n\n this.withOnColumnResized((event: ColumnResizedEvent) => debouncedSaveColumnStateFn(event.api));\n this.withOnColumnPinned((event: ColumnPinnedEvent) => debouncedSaveColumnStateFn(event.api));\n this.withOnColumnMoved((event: ColumnMovedEvent) => debouncedSaveColumnStateFn(event.api));\n this.withOnColumnVisible((event: ColumnVisibleEvent) => debouncedSaveColumnStateFn(event.api));\n this.withOnSortChanged((event: SortChangedEvent) => debouncedSaveColumnStateFn(event.api));\n this.withOnDisplayedColumnsChanged((event: DisplayedColumnsChangedEvent) => {\n if (event.source === 'contextMenu') {\n event.api.sizeColumnsToFit();\n this.sizeColumnsToMoreSuitedWidth(event.api);\n }\n });\n\n this.setOption('getLocaleText', (params: GetLocaleTextParams): string => this.translateGridText(params.key));\n return this;\n }\n\n private translateGridText(key: string): string {\n return this.translateService.instant('AGGRID.' + key.toUpperCase());\n }\n\n private withOnEvent(eventHandlerName: string, onEventFunction: (event: AgGridEvent) => void): this {\n const onEvent = this.gridOptions[eventHandlerName];\n\n this.gridOptions[eventHandlerName] = (event: AgGridEvent): void => {\n if (onEvent) {\n onEvent(event);\n }\n onEventFunction(event);\n };\n\n return this;\n }\n\n // Default callbacks for gridoptions\n private resizeGrid(gridApi: GridApi): void {\n const context = this.getOption(gridApi, 'context');\n\n if (!context.gridIdentifier) {\n gridApi?.sizeColumnsToFit();\n }\n }\n\n private getGridColumnSettings(api: GridApi): GridColumnSettings {\n const defaultColDef = (({floatingFilter}: ColDef): Partial => ({floatingFilter}))(api?.getGridOption('defaultColDef'));\n const columnState = api?.getColumnState();\n\n return {defaultColDef, columnState};\n }\n\n private onGridPreDestroyed(event: GridPreDestroyedEvent): void {\n event.api.hideColumnChooser();\n\n this.saveGridSettings(this.gridOptions.context.gridIdentifier, this.getGridColumnSettings(event.api))\n .pipe(takeUntil(this.unSubscribeOnGridDestroy))\n .subscribe(() => {\n this.unSubscribeOnGridDestroy.next(true);\n this.unSubscribeOnGridDestroy.complete();\n });\n }\n\n private onGridReady(event: GridReadyEvent): void {\n this.getGridSettings(this.gridOptions.context.gridIdentifier)\n .pipe(\n catchError(() => of(null)),\n takeUntil(this.unSubscribeOnGridDestroy)\n )\n .subscribe((settings: GridColumnSettings) => this.gridColumnSettings.next(settings));\n\n this.gridColumnSettings.subscribe((gridSettings: GridColumnSettings) => {\n if (AssertionUtils.isNullOrUndefined(gridSettings)) {\n event.api?.sizeColumnsToFit();\n this.sizeColumnsToMoreSuitedWidth(event.api);\n this.updateGridContext({forceColumnAutosizeOnFirstDataRenderedEvent: true});\n } else if (!event.api?.isDestroyed()) {\n if (gridSettings.columnState) {\n this.applyColumnState(event.api, gridSettings.columnState);\n }\n if (gridSettings.defaultColDef) {\n this.applyDefaultColDef(event.api, gridSettings.defaultColDef);\n }\n }\n\n this.gridApi = event.api;\n\n this.withMainMenuItems(true, ['hideFloatingFilter']);\n this.addPlaceholderToFloatingFilter();\n this.addCompactClassToFloatingFilter();\n });\n }\n\n private onFirstDataRendered(event: FirstDataRenderedEvent): void {\n const context = this.getOption(event.api, 'context');\n\n if (!context.gridIdentifier) {\n event.api.sizeColumnsToFit();\n } else if (context.forceColumnAutosizeOnFirstDataRenderedEvent) {\n this.sizeColumnsToMoreSuitedWidth(event.api);\n\n this.updateGridContext({forceColumnAutosizeOnFirstDataRenderedEvent: true});\n }\n this.scrollToSavedPosition(event.api);\n }\n\n private applyDefaultColDef(gridApi: GridApi, defaultColDef: Partial): void {\n let actualDefaultColDef = this.getOption(gridApi, 'defaultColDef');\n\n for (const [key, value] of Object.entries(defaultColDef)) {\n actualDefaultColDef[key] = value;\n }\n\n gridApi.setGridOption('defaultColDef', actualDefaultColDef);\n }\n\n private applyColumnState(gridApi: GridApi, columnState: any): void {\n gridApi.applyColumnState({state: columnState, applyOrder: true});\n }\n\n private autoSizeAllColumns(gridApi: GridApi): void {\n gridApi.expandAll();\n gridApi.autoSizeAllColumns();\n gridApi.collapseAll();\n }\n\n private getTotalColumnsWidth(gridApi: GridApi): number {\n return gridApi.getColumnState()?.reduce((totalWidth: number, columnState: ColumnState) => {\n if (!columnState.hide) {\n totalWidth += columnState.width;\n }\n\n return totalWidth;\n }, 0);\n }\n\n private sizeColumnsToMoreSuitedWidth(gridApi: GridApi): void {\n const widthToFitGrid = this.getTotalColumnsWidth(gridApi);\n\n this.autoSizeAllColumns(gridApi);\n\n const widthWithAutoSizedColumns = this.getTotalColumnsWidth(gridApi);\n\n if (widthToFitGrid > widthWithAutoSizedColumns) {\n gridApi.sizeColumnsToFit({\n columnLimits: gridApi.getColumnState().map(({colId, width}: ColumnState) => {\n return {key: colId, minWidth: width};\n })\n });\n }\n }\n\n private addPlaceholderToFloatingFilter(): void {\n Array.from(document.querySelectorAll('.ag-floating-filter-input .ag-input-field-input')).forEach((obj: any) => {\n if (obj.attributes['disabled']) {\n return;\n }\n obj.setAttribute('placeholder', 'Search');\n });\n }\n\n private addCompactClassToFloatingFilter(): void {\n document.querySelectorAll(`.ag-header-row:has(.${HeaderClass.COMPACT}) + .ag-header-row .ag-floating-filter:not(.compact)`).forEach((floatingFilterElement: HTMLElement) => {\n if (floatingFilterElement.attributes['disabled']) {\n return;\n }\n\n if (floatingFilterElement.clientHeight < 35) {\n floatingFilterElement.classList.add(HeaderClass.COMPACT);\n }\n });\n }\n\n private scrollToSavedPosition(gridApi: GridApi): void {\n const savedScrollState = this.getNavigationHelperGridState();\n\n if (savedScrollState) {\n if (savedScrollState.quickFilter) {\n gridApi.setGridOption('quickFilterText', savedScrollState.quickFilter);\n }\n if (savedScrollState.filterModel) {\n gridApi.setFilterModel(savedScrollState.filterModel);\n }\n\n const gridBodyElement = document?.querySelector('.mat-mdc-dialog-container')?.querySelector('.ag-body-viewport');\n if (gridBodyElement) {\n gridBodyElement.scrollTop = savedScrollState.top;\n }\n }\n }\n\n private updateGridContext(gridContext: Record): void {\n this.setOption('context', {\n ...this.gridOptions.context,\n ...gridContext\n });\n }\n\n private automaticFilterChangedSelection(gridApi: GridApi): void {\n if (!this.getOption(gridApi, 'suppressRowClickSelection')) {\n const isMultipleSelectionAllowed = this.getOption(gridApi, 'rowSelection') === AgGridRowSelection.MULTIPLE;\n const renderedNodes = gridApi.getRenderedNodes().filter((node: RowNode) => node.level === 0 && node.displayed);\n\n if (renderedNodes.length === 1) {\n const node = renderedNodes[0];\n\n if (node.group && node.childrenAfterFilter.length === 1) {\n node.childrenAfterFilter[0].setSelected(true, !isMultipleSelectionAllowed);\n } else if (!node.group) {\n node.setSelected(true, !isMultipleSelectionAllowed);\n } else if (!isMultipleSelectionAllowed) {\n gridApi.deselectAll();\n }\n } else if (!isMultipleSelectionAllowed) {\n gridApi.deselectAll();\n }\n }\n }\n\n private automaticFirstDataRenderedSelection(gridApi: GridApi): void {\n if (!this.getOption(gridApi, 'suppressRowClickSelection')) {\n const renderedNodes = gridApi.getRenderedNodes().filter((node: RowNode) => node.level === 0);\n\n if (renderedNodes.length === 1) {\n const node = renderedNodes[0];\n\n if (node.group && node.allLeafChildren.length === 1) {\n node.allLeafChildren[0].setSelected(true);\n } else if (!node.group) {\n node.setSelected(true);\n }\n }\n }\n }\n\n private getOption(api: GridApi, key: keyof GridOptions): any {\n return api?.getGridOption(key) ?? this.gridOptions[key];\n }\n\n private extendOption(key: any, value: any[]): void {\n const option: any[] = this.getOption(this.gridApi, key);\n if (!AssertionUtils.isNullOrUndefined(option)) {\n value.push(...option);\n }\n\n this.setOption(key, value);\n }\n\n private setOption(key: any, value: any): void {\n const listenersThatCantBeOverwritten = [\n 'onColumnResized',\n 'onColumnPinned',\n 'onColumnMoved',\n 'onColumnVisible',\n 'onSortChanged',\n 'onRowSelected',\n 'onRowDataUpdated',\n 'onFilterChanged',\n 'onFirstDataRendered',\n 'onBodyScroll',\n 'onGridReady',\n 'onColumnEverythingChanged'\n ];\n\n const isListener = listenersThatCantBeOverwritten.includes(key);\n\n if (isListener) {\n const existingFunction = this.gridApi ? this.gridApi.getGridOption(key) : this.gridOptions[key];\n\n const combinedFunction = (arg1: any, arg2: any): void => {\n if (existingFunction) {\n existingFunction(arg1, arg2);\n }\n value(arg1, arg2);\n };\n\n this.gridOptions[key] = combinedFunction;\n } else {\n if (this.gridApi && !this.gridApi.isDestroyed()) {\n this.gridApi.setGridOption(key, value);\n } else {\n this.gridOptions[key] = value;\n }\n }\n }\n}\n","import {Component} from '@angular/core';\nimport {ITooltipAngularComp} from 'ag-grid-angular';\nimport {ITooltipParams} from 'ag-grid-community';\nimport {toString} from 'lodash-es';\n\n@Component({\n selector: 'vdw-grid-tooltip',\n templateUrl: './grid-tooltip.component.html',\n styleUrls: ['./grid-tooltip.component.scss']\n})\nexport class GridTooltipComponent implements ITooltipAngularComp {\n public tooltip: string;\n\n public agInit(params: ITooltipParams): void {\n this.tooltip = toString(params.value);\n }\n}\n","{{ tooltip }}\n","export enum HeaderClass {\n RIGHT = 'right',\n TEXT_ALIGN_RIGHT = 'text-align-right',\n CAPITALIZE = 'capitalize',\n AMOUNT_FULL_WEIGHT = 'amount-full-width',\n COMPACT = 'compact'\n}\n","import {ColDef, GridApi} from 'ag-grid-community';\nimport {L10nIntlService} from 'angular-l10n';\nimport {isNil, isNumber} from 'lodash-es';\nimport {Subject} from 'rxjs';\nimport {debounceTime, takeUntil} from 'rxjs/operators';\nimport {convertUnit} from '../../common/converters/convert-unit';\nimport {Color} from '../../common/data/color';\nimport {Unit} from '../../common/unit.enum';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {LocaleUtils} from '../../common/utils/locale-utils';\nimport {StringUtils} from '../../common/utils/string-utils';\n\nexport class AgGridUtils {\n public static buildAgGridCellTextWithUnit(text: string | number, unit: string, l10nIntlService: L10nIntlService, decimals?: number): string {\n let result: string;\n\n if (!isNil(text)) {\n result = `${isNumber(text) ? LocaleUtils.formatNumber(text, l10nIntlService, decimals) : text}${unit}`;\n }\n\n return result;\n }\n\n public static buildAgGridCellTextWithUnitConversion(text: string | number, fromUnit: Unit, toUnit: Unit, l10nIntlService: L10nIntlService, decimals?: number): string {\n let result: string;\n\n if (isNumber(text)) {\n const convertedValue = convertUnit({\n from: {\n value: text,\n unit: fromUnit\n },\n to: toUnit\n });\n\n result = decimals !== undefined ? parseFloat(convertedValue.toFixed(decimals)).toString() : convertedValue.toString();\n\n result = this.buildAgGridCellTextWithUnit(result, toUnit, l10nIntlService);\n } else {\n result = this.buildAgGridCellTextWithUnit(text, toUnit, l10nIntlService);\n }\n\n return result;\n }\n\n public static buildAgGridCellTooltipWithUnit(text: string | number, unit: string, l10nIntlService: L10nIntlService, withUnit: boolean = true, decimals?: number): string {\n let result: string;\n\n if (!isNil(text)) {\n result = `${isNumber(text) ? LocaleUtils.formatNumber(text, l10nIntlService, decimals) : text} ${withUnit ? unit : ''}`;\n }\n\n return result;\n }\n\n public static buildAgGridCellTooltipWithUnitConversion(text: string | number, fromUnit: Unit, toUnit: Unit, l10nIntlService: L10nIntlService, withUnit: boolean = true, decimals?: number): string {\n let result: string;\n\n if (isNumber(text)) {\n const convertedValue = convertUnit({\n from: {\n value: text,\n unit: fromUnit\n },\n to: toUnit\n });\n\n result = decimals !== undefined ? parseFloat(convertedValue.toFixed(decimals)).toString() : convertedValue.toString();\n\n result = this.buildAgGridCellTooltipWithUnit(result, toUnit, l10nIntlService, withUnit);\n } else {\n result = this.buildAgGridCellTooltipWithUnit(text, toUnit, l10nIntlService, withUnit);\n }\n\n return result;\n }\n\n public static buildAgGridCellTextWithoutUnit(value: number, fromUnit: Unit, toUnit: Unit, l10nIntlService: L10nIntlService, decimals?: number): string {\n const conversionResult = convertUnit({\n from: {\n value,\n unit: fromUnit\n },\n to: toUnit\n });\n\n return LocaleUtils.formatNumber(conversionResult, l10nIntlService, decimals);\n }\n\n public static buildAgGridCellListWithoutUnit(value: number[], fromUnit: Unit, toUnit: Unit): string {\n const conversionResult = [];\n\n value.forEach((item: number) => {\n const convertedUnit = convertUnit({\n from: {\n value: item,\n unit: fromUnit\n },\n to: toUnit\n });\n if (!AssertionUtils.isNullOrUndefined(convertedUnit)) {\n conversionResult.push(convertedUnit);\n }\n });\n const stringResult = conversionResult.toString();\n\n return stringResult.split(',').join(', ');\n }\n\n public static buildAgGridCellProductionOrderStatus(status: number): string {\n return String(status);\n }\n\n public static buildAgGridCellColorRGB(color: Color, showColorName: boolean = false): string {\n let result: string;\n\n if (!isNil(color) && !isNil(color.rgb)) {\n const colorName = showColorName ? color.name : '';\n result = `
${colorName}`;\n }\n\n return result;\n }\n\n public static createColumnString(fieldName: string, tooltipField: string, minWidth: number, headerNameKey: string, textAlign: string): ColDef {\n return {\n field: fieldName,\n sortable: true,\n minWidth,\n headerName: headerNameKey,\n comparator: StringUtils.stringComparator,\n tooltipField,\n cellStyle: {\n 'text-align': textAlign\n }\n } as ColDef;\n }\n\n public static getSkeletonView(): string {\n return `
\n
\n
\n
\n
\n
\n
`;\n }\n\n public static onRowDataUpdated(gridApi: GridApi): void {\n if (!AssertionUtils.isNullOrUndefined(gridApi)) {\n if (gridApi.getDisplayedRowCount() < 1) {\n gridApi.showNoRowsOverlay();\n } else {\n gridApi.hideOverlay();\n }\n }\n }\n\n public static initSimpleSearchSubject(gridApi: GridApi, searchSubject: Subject, unsubSubject: Subject): void {\n searchSubject.pipe(takeUntil(unsubSubject), debounceTime(500)).subscribe((searchValue: string) => {\n if (searchValue?.length > 0) {\n const filterModel = {\n name: {\n filterType: 'multi',\n filterModels: [\n {\n filterType: 'text',\n type: 'contains',\n filter: searchValue\n }\n ]\n }\n };\n gridApi?.setFilterModel(filterModel);\n } else {\n gridApi?.setFilterModel(null);\n }\n });\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {isEmpty, isEqual, isString, lowerCase} from 'lodash-es';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {TranslateService} from '../../translation/translate.service';\nimport {OverlayActionsService} from './overlay-actions.service';\nimport {OverlayComponentParams} from './overlay-component-params';\nimport {OverlayComponentParamsAction} from './overlay-component-params-actions';\n\n@Component({\n template: ''\n})\nexport abstract class BaseOverlayComponent {\n @Input() public smallTableMode: boolean;\n @Input() public titleKey: string;\n @Input() public titleParam: string | Record;\n @Input() public descriptionKey: string;\n @Input() public image: string;\n @Input() public scale = 1;\n @Input() public hideDescription = false;\n @Input() public actionsParam: OverlayComponentParamsAction[];\n @Input() public hideActions = false;\n\n public title: string;\n public description: string;\n public heightImage = 188;\n public titleFontSize = 22;\n public descriptionFontSize = 16;\n public actions: OverlayComponentParamsAction[];\n public icon: string;\n public shouldDisplaySpinner = false;\n protected translate: TranslateService;\n private overlayActionsService: OverlayActionsService;\n private minimumFontSize = 13;\n\n public constructor(overlayActionsService: OverlayActionsService, translate: TranslateService) {\n this.overlayActionsService = overlayActionsService;\n this.translate = translate;\n }\n\n public get shouldDisplayTitle(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.title) && !this.smallTableMode;\n }\n\n public get shouldDisplayDescription(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.description) && !this.smallTableMode;\n }\n\n public get shouldDisplayImage(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.image) && !this.smallTableMode;\n }\n\n public get shouldDisplayIcon(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.icon);\n }\n\n public get shouldDisplayActions(): boolean {\n return !isEmpty(this.actions) && !this.smallTableMode;\n }\n\n public getActionClass(action: OverlayComponentParamsAction): boolean {\n return !AssertionUtils.isNullOrUndefined(action) && action.isPrimary;\n }\n\n public onActionClicked(actionKey: string): void {\n this.overlayActionsService.notifyActionTriggered(actionKey);\n }\n\n public scaled(value: number): number {\n return this.scale * value < this.minimumFontSize ? this.minimumFontSize : this.scale * value;\n }\n\n public isActionDisabled(disabled: boolean | (() => boolean)): boolean {\n if (AssertionUtils.isNullOrUndefined(disabled)) {\n return false;\n }\n return typeof disabled === 'boolean' ? disabled : disabled();\n }\n\n protected getTranslation(key: string, objectParam: Record | string = null): string {\n let result = null;\n\n if (!AssertionUtils.isNullOrUndefined(key)) {\n const replaceableValues: Record = isString(objectParam) ? {object: lowerCase(this.translate.instant(objectParam, {count: 0}))} : objectParam;\n result = this.translate.instant(key, replaceableValues);\n }\n return result;\n }\n\n protected createParamsObject(): OverlayComponentParams {\n return {\n api: null,\n context: null,\n smallTableMode: this.smallTableMode,\n titleKey: this.titleKey,\n titleParam: this.titleParam,\n descriptionKey: this.descriptionKey,\n image: this.image,\n scale: this.scale,\n hideDescription: this.hideDescription,\n hideActions: this.hideActions,\n actions: this.getActions()\n };\n }\n\n private getActions(): OverlayComponentParamsAction[] {\n if (!this.hideActions) {\n if (!AssertionUtils.isNullOrUndefined(this.titleKey)) {\n return [{key: 'default action', titleKey: this.titleKey, isPrimary: true}];\n } else if (this.actionsParam) {\n return this.actionsParam;\n }\n }\n\n return [];\n }\n\n protected initializeOverlayComponent(params: OverlayComponentParams): void {\n this.smallTableMode = params.smallTableMode;\n this.hideDescription = params.hideDescription;\n this.hideActions = params.hideActions;\n this.titleKey = params.titleKey;\n this.titleParam = params.titleParam;\n this.title = this.getTranslation(params.titleKey, params.titleParam);\n this.description = params.hideDescription ? null : this.getTranslation(params.descriptionKey);\n this.image = params.image;\n\n if (AssertionUtils.isNullOrUndefined(params.scale)) {\n this.scale = isEqual(this.smallTableMode, true) ? 0.7 : 1;\n } else {\n this.scale = params.scale;\n }\n\n this.actions = this.hideActions ? [] : params.actions;\n }\n}\n","
\n @if (shouldDisplayImage) {\n \"illustration\"\n }\n @if (shouldDisplayIcon) {\n \n }\n @if (shouldDisplaySpinner) {\n \n }\n\n
\n @if (shouldDisplayTitle) {\n

\n }\n @if (shouldDisplayDescription) {\n

{{ description }}

\n }\n
\n\n
\n
\n \n \n
\n
\n
\n","import {Component, OnInit} from '@angular/core';\nimport {ILoadingOverlayAngularComp} from 'ag-grid-angular';\nimport {ILoadingOverlayParams} from 'ag-grid-community';\nimport {isNil} from 'lodash-es';\nimport {BaseOverlayComponent} from '../base-overlay.component';\nimport {OverlayComponentParams} from '../overlay-component-params';\n\n@Component({\n selector: 'vdw-loading-overlay',\n templateUrl: '../base-overlay.component.html',\n styleUrls: ['../base-overlay.component.scss']\n})\nexport class LoadingOverlayComponent extends BaseOverlayComponent implements ILoadingOverlayAngularComp, OnInit {\n private params: OverlayComponentParams;\n\n public agInit({api, ...overlayComponentParams}: ILoadingOverlayParams): void {\n this.params = overlayComponentParams as OverlayComponentParams;\n }\n\n public ngOnInit(): void {\n if (isNil(this.params)) {\n this.params = this.createParamsObject();\n }\n\n this.initializeOverlayComponent(this.params);\n this.title = this.getTranslation('ANGULAR_COMPONENT_LIBRARY.OVERLAY.LOADING.TITLE');\n this.description = this.description ?? this.getTranslation('ANGULAR_COMPONENT_LIBRARY.OVERLAY.LOADING.DATA_BEING_FETCHED');\n this.shouldDisplaySpinner = true;\n }\n}\n","import {Component, Input, OnChanges} from '@angular/core';\nimport {INoRowsOverlayAngularComp} from 'ag-grid-angular';\nimport {GridApi, INoRowsOverlayParams} from 'ag-grid-community';\nimport {isEmpty, isNil} from 'lodash-es';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {TranslateService} from '../../../translation/translate.service';\nimport {BaseOverlayComponent} from '../base-overlay.component';\nimport {OverlayActionsService} from '../overlay-actions.service';\nimport {OverlayComponentParams} from '../overlay-component-params';\nimport {NoDataOverlayComponentParams} from './no-data-overlay-component-params';\n\n@Component({\n selector: 'vdw-nodata-overlay',\n templateUrl: '../base-overlay.component.html',\n styleUrls: ['../base-overlay.component.scss']\n})\nexport class NoDataOverlayComponent extends BaseOverlayComponent implements INoRowsOverlayAngularComp, OnChanges {\n @Input() public shouldShowFilterNoResult = false;\n @Input() public filterDescriptionParam: any;\n @Input() public machineDisconnectedOverlay = false;\n private hasAgInitBeenCalled = false;\n\n public constructor(translate: TranslateService, actionsService: OverlayActionsService) {\n super(actionsService, translate);\n }\n\n public ngOnChanges(): void {\n if (!this.hasAgInitBeenCalled) {\n const params: NoDataOverlayComponentParams = this.createParamsObject() as NoDataOverlayComponentParams;\n\n params.filterDescriptionParam = this.filterDescriptionParam;\n params.isAnyFilterPresent = (): boolean => this.shouldShowFilterNoResult;\n\n this.initializeOverlayComponent(params);\n this.initializeNoDataOverlayComponent(params);\n }\n }\n\n public agInit({api, ...noDataOverlayComponentParams}: INoRowsOverlayParams): void {\n this.initializeOverlayComponent(noDataOverlayComponentParams as NoDataOverlayComponentParams);\n this.initializeNoDataOverlayComponent({\n isAnyFilterPresent: this.getIsAnyFilterPresentFunction(api),\n ...(noDataOverlayComponentParams as NoDataOverlayComponentParams)\n });\n this.hasAgInitBeenCalled = true;\n }\n\n private initializeNoDataOverlayComponent(params: NoDataOverlayComponentParams): void {\n if (params.isAnyFilterPresent() === true) {\n this.title = this.getTranslation('ANGULAR_COMPONENT_LIBRARY.OVERLAY.FILTER.NO_DATA.TITLE');\n this.description = this.description ?? this.getTranslation('ANGULAR_COMPONENT_LIBRARY.OVERLAY.FILTER.NO_DATA.UPDATE_QUERY');\n this.icon = 'solid-search-off';\n } else {\n this.title = '';\n if (isEmpty(params.titleKey) && !isNil(params.titleParam) && !this.machineDisconnectedOverlay) {\n params.titleKey = 'ANGULAR_COMPONENT_LIBRARY.OVERLAY.NO_DATA.TITLE_WITH_PARAM';\n } else if (this.machineDisconnectedOverlay) {\n params.titleKey = 'ANGULAR_COMPONENT_LIBRARY.OVERLAY.NO_DATA.MACHINE_DISCONNECTED_MESSAGE';\n }\n\n this.title = this.getTranslation(params.titleKey, params.titleParam);\n\n if (!params.hideDescription) {\n this.setDescription(params);\n }\n\n this.setActions(params);\n this.icon = 'solid-edit-document';\n }\n }\n\n private setDescription(params: OverlayComponentParams): void {\n if (params.descriptionKey) {\n this.description = this.getTranslation(params.descriptionKey);\n } else {\n this.description = this.getTranslation(\n 'ANGULAR_COMPONENT_LIBRARY.OVERLAY.NO_DATA.CREATE_OBJECT',\n AssertionUtils.isNullOrUndefined(params.titleParam) ? this.translate.instant('ANGULAR_COMPONENT_LIBRARY.OVERLAY.NO_DATA.DEFAULT_PARAM').toLowerCase() : params.titleParam\n );\n }\n }\n\n private setActions(params: OverlayComponentParams): void {\n if (params.actions) {\n this.actions = params.actions;\n }\n }\n\n private getIsAnyFilterPresentFunction(api: GridApi): () => boolean {\n if (isNil(api?.isAnyFilterPresent)) {\n return (): boolean => false;\n } else {\n return (): boolean => !!api.isAnyFilterPresent();\n }\n }\n}\n","import {EventEmitter, Injectable} from '@angular/core';\n\n@Injectable({providedIn: 'root'})\nexport class OverlayActionsService {\n public actionTriggeredEmitter = new EventEmitter();\n\n public notifyActionTriggered(actionKey: string): void {\n this.actionTriggeredEmitter.next(actionKey);\n }\n}\n","import {Component, OnInit} from '@angular/core';\nimport {TranslateService} from '../../../translation/translate.service';\nimport {BaseOverlayComponent} from '../base-overlay.component';\nimport {OverlayActionsService} from '../overlay-actions.service';\n\n@Component({\n selector: 'vdw-overlay',\n templateUrl: '../base-overlay.component.html',\n styleUrls: ['../base-overlay.component.scss']\n})\nexport class OverlayComponent extends BaseOverlayComponent implements OnInit {\n public constructor(translate: TranslateService, actionsService: OverlayActionsService) {\n super(actionsService, translate);\n }\n\n public ngOnInit(): void {\n this.image = '/assets/icons/illustrations/unauthorized.svg';\n this.initializeOverlayComponent(this.createParamsObject());\n }\n}\n","import {Component, Input} from '@angular/core';\n\n@Component({\n selector: 'vdw-planning-display',\n templateUrl: './planning-display.component.html',\n styleUrls: ['./planning-display.component.scss']\n})\nexport class PlanningDisplayComponent {\n @Input()\n public planningHeight = 0;\n\n public getPlanningHeight(): string {\n return this.planningHeight === 0 ? '100%' : `${this.planningHeight}px`;\n }\n}\n","
\n \n
\n","import {InjectionToken} from '@angular/core';\n\nexport const PLANNING_GRID_TOKEN = new InjectionToken('PlanningGridToken');\n","
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {debounceTime, map, switchMap, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {InterfaceOf} from '../../../common/types/interface-of';\nimport {ShiftInstance} from '../../shift-schedule/shift-instance';\nimport {ShiftScheduleComponent} from '../../shift-schedule/shift-schedule.component';\nimport type {PlanningGridComponent} from '../planning-grid/planning-grid.component';\nimport {PLANNING_GRID_TOKEN} from '../planning-grid/planning-grid.token';\n\n@Component({\n selector: 'vdw-regimes-indicator',\n templateUrl: './regimes-indicator.component.html',\n styleUrls: ['./regimes-indicator.component.scss']\n})\nexport class RegimesIndicatorComponent extends BaseComponent implements OnInit {\n public shifts: ShiftInstance[];\n\n public constructor(@Inject(PLANNING_GRID_TOKEN) private readonly grid: InterfaceOf) {\n super();\n }\n\n public ngOnInit(): void {\n this.grid.shiftSchedules\n .pipe(\n switchMap((shiftSchedules: ShiftScheduleComponent[]) => this.grid.onChanges.pipe(map(() => shiftSchedules))),\n debounceTime(20),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((shiftSchedules: ShiftScheduleComponent[]) => this.getShiftsForSchedule(shiftSchedules[0]));\n }\n\n private getShiftsForSchedule(schedule: ShiftScheduleComponent): void {\n this.shifts = schedule?.getShiftsForPeriod(this.grid.startDate, this.grid.endDate) ?? [];\n let x = 0;\n for (const shift of this.shifts) {\n shift.alternate = shift.name && ++x % 2 === 0;\n }\n }\n}\n","
\n
\n

{{ dayCell.date | DateTime: 'DAY_WEEKDAY' }}

\n
\n
\n\n","import {Component, Inject} from '@angular/core';\nimport {InterfaceOf} from '../../../common/types/interface-of';\nimport type {PlanningGridComponent} from '../planning-grid/planning-grid.component';\nimport {PLANNING_GRID_TOKEN} from '../planning-grid/planning-grid.token';\n\n@Component({\n selector: 'vdw-date-header-row',\n templateUrl: './date-header-row.component.html',\n styleUrls: ['./date-header-row.component.scss']\n})\nexport class DateHeaderRowComponent {\n public constructor(@Inject(PLANNING_GRID_TOKEN) public readonly grid: InterfaceOf) {}\n}\n","import {Moment, unitOfTime} from 'moment';\nimport {DateRange} from 'moment-range';\nimport {moment} from '../../../common/moment';\nimport {TimeViewMode} from '../../time-view-mode.enum';\n\nexport class PlanningDisplayHelper {\n public static split(range: DateRange, interval: unitOfTime.Diff, step: number, timeView: TimeViewMode): DateRange[] {\n let start: Moment = range.start;\n const dateRanges: DateRange[] = [];\n\n while (start < range.end) {\n const end = start.clone().add(step, interval);\n\n if (start.get('h') === 0 && timeView === TimeViewMode.DAY) {\n const hourOffset = PlanningDisplayHelper.getHourOffset(start, end);\n end.add(hourOffset);\n }\n\n dateRanges.push(moment.range(start, end));\n start = end;\n }\n\n return dateRanges;\n }\n\n public static getHoursForDate(date: Date): number {\n date.setHours(0);\n return moment.range(date, PlanningDisplayHelper.getNextDate(date)).duration('h');\n }\n\n public static getNextDate(date: Date): Date {\n return moment(date).set('h', 24).toDate();\n }\n\n public static isSameDate(firstDate: Date, secondDate: Date): boolean {\n if (firstDate == null || secondDate == null) {\n return false;\n }\n\n return firstDate.getFullYear() === secondDate.getFullYear() && firstDate.getMonth() === secondDate.getMonth() && firstDate.getDate() === secondDate.getDate();\n }\n\n private static getHourOffset(start: Moment, end: Moment): number {\n const hourOffset = this.getHoursForDate(start.toDate()) - 24;\n const hourOffsetValid = hourOffset !== 0 && end.hours() > 0;\n const canApplyHourOffset = hourOffsetValid && ((hourOffset === -1 && end.hours() !== 23) || hourOffset === 1);\n\n return canApplyHourOffset ? hourOffset : 0;\n }\n}\n","
\n
\n \n
\n
\n\n","import {AfterContentInit, Component, EventEmitter, Inject, Output} from '@angular/core';\nimport {DateRange} from 'moment-range';\nimport {distinctUntilChanged, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {moment} from '../../../common/moment';\nimport {InterfaceOf} from '../../../common/types/interface-of';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {TimeViewMode} from '../../time-view-mode.enum';\nimport {PlanningDisplayHelper} from '../helpers/planning-display-helper';\nimport type {PlanningGridComponent} from '../planning-grid/planning-grid.component';\nimport {PLANNING_GRID_TOKEN} from '../planning-grid/planning-grid.token';\n\n@Component({\n selector: 'vdw-hour-header-row',\n templateUrl: './hour-header-row.component.html',\n styleUrls: ['./hour-header-row.component.scss']\n})\nexport class HourHeaderRowComponent extends BaseComponent implements AfterContentInit {\n private _selectedDate: Date;\n private _selectedHour: DateRange;\n public hoursForDate: DateRange[] = [];\n\n @Output() public selectedHourChanged = new EventEmitter();\n\n public constructor(@Inject(PLANNING_GRID_TOKEN) public readonly grid: InterfaceOf) {\n super();\n }\n\n public ngAfterContentInit(): void {\n this.updateHoursToRender();\n this._selectedHour = this.hoursForDate.find((hour: DateRange) => hour.start.isSameOrBefore(this.grid.currentTime) && hour.end.isSameOrAfter(this.grid.currentTime)) ?? this.hoursForDate[0];\n\n this.grid.setTimeToHour(this._selectedHour.start.toDate());\n\n this.grid.onChanges\n .asObservable()\n .pipe(distinctUntilChanged(), takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.updateHoursToRender());\n }\n\n public onHourClicked(duration: DateRange): void {\n if (this.isHourSelected(duration)) {\n return;\n }\n\n this._selectedHour = duration;\n this.selectedHourChanged.emit(this._selectedHour);\n\n this.grid.setTimeToHour(this._selectedHour.start.toDate());\n }\n\n public isHourSelected(hour: DateRange): boolean {\n return this._selectedHour.start.hours() === hour.start.hours() && this._selectedHour.end.hours() === hour.end.hours();\n }\n\n private updateHoursToRender(): void {\n if (AssertionUtils.isEmpty(this.grid.dayCellData)) {\n return;\n }\n\n const isDifferentDate = this._selectedDate != null && !PlanningDisplayHelper.isSameDate(this._selectedDate, this.grid.dayCellData[0].date);\n\n this._selectedDate = moment(this.grid.dayCellData[0].date).set('h', 0).toDate();\n this.hoursForDate = PlanningDisplayHelper.split(moment.range(this._selectedDate, PlanningDisplayHelper.getNextDate(this._selectedDate)), 'hours', 1, TimeViewMode.HOUR);\n\n if (isDifferentDate) {\n this._selectedHour = this.hoursForDate[0];\n }\n }\n}\n","
\n","import {Component, Inject, OnInit} from '@angular/core';\nimport {distinctUntilChanged, interval, merge, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {InterfaceOf} from '../../../common/types/interface-of';\nimport type {PlanningGridComponent} from '../planning-grid/planning-grid.component';\nimport {PLANNING_GRID_TOKEN} from '../planning-grid/planning-grid.token';\n\n@Component({\n selector: 'vdw-current-time-indicator',\n templateUrl: './current-time-indicator.component.html',\n styleUrls: ['./current-time-indicator.component.scss']\n})\nexport class CurrentTimeIndicatorComponent extends BaseComponent implements OnInit {\n private _width: number;\n private _shouldIndicatorBeRendered: boolean;\n\n public get width(): number {\n return this._width;\n }\n\n public get shouldIndicatorBeRendered(): boolean {\n return this._shouldIndicatorBeRendered;\n }\n\n public constructor(@Inject(PLANNING_GRID_TOKEN) private readonly grid: InterfaceOf) {\n super();\n }\n\n public ngOnInit(): void {\n merge(this.grid.onChanges.pipe(distinctUntilChanged()), interval(this.grid.MILLISECONDS_IN_MINUTE))\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => this.updateCurrentDate());\n }\n\n public updateCurrentDate(): void {\n this._width = this.grid.getLeftPercentForDate(this.grid.currentTime);\n this._shouldIndicatorBeRendered = this._width > 0;\n }\n}\n","
\n","import {Component, ElementRef, HostBinding, Input, OnInit} from '@angular/core';\nimport {PlanningItemData} from '../../planning-items/planning-item-base/planning-item-data';\n\n@Component({\n selector: 'vdw-planning-item-display',\n templateUrl: './planning-item-display.component.html',\n styleUrls: ['./planning-item-display.component.scss']\n})\nexport class PlanningItemDisplayComponent implements OnInit {\n @Input()\n public planningItem: PlanningItemData;\n\n @HostBinding('class.border')\n public get applyCustomBorder(): boolean {\n return this.planningItem?.applyCustomBorder;\n }\n\n @HostBinding('class.background')\n public get applyBackground(): boolean {\n return this.planningItem?.applyBackground;\n }\n\n @HostBinding('class.cursor-pointer')\n public get clickable(): boolean {\n return this.planningItem?.clickable;\n }\n\n @HostBinding('class.cursor-grab')\n public get draggable(): boolean {\n return this.planningItem?.draggable;\n }\n\n public constructor(private readonly element: ElementRef) {}\n\n public ngOnInit(): void {\n if (this.planningItem != null) {\n this.planningItem.displayElement = this.element;\n }\n }\n}\n","
\n
\n
\n
\n
\n
\n
\n
\n
\n

{{ rowTitle }}

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

{{ timeCell.date | DateTime: 'TIME_SIMPLE' }}

\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n","import {\n AfterContentInit,\n AfterViewInit,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChange,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport {Duration, duration, Moment} from 'moment';\nimport {DateRange} from 'moment-range';\nimport {BehaviorSubject, interval, map, Observable, startWith, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {Point} from '../../../common/interfaces/point';\nimport {moment} from '../../../common/moment';\nimport {PlanningRowComponent} from '../../planning-row/planning-row.component';\nimport {ShiftScheduleComponent} from '../../shift-schedule/shift-schedule.component';\nimport {TimeViewMode} from '../../time-view-mode.enum';\nimport {DayCellData} from './day-cell-data';\nimport {PLANNING_GRID_TOKEN} from './planning-grid.token';\n\n@Component({\n selector: 'vdw-planning-grid',\n templateUrl: './planning-grid.component.html',\n styleUrls: ['./planning-grid.component.scss'],\n providers: [\n {\n provide: PLANNING_GRID_TOKEN,\n useExisting: PlanningGridComponent\n }\n ]\n})\nexport class PlanningGridComponent extends BaseComponent implements AfterContentInit, AfterViewInit, OnChanges, OnDestroy {\n @Input() public minCellWidth = 71;\n @Input() public rowTitle: string;\n\n @Output() public selectedHourChanged = new EventEmitter();\n @Output() public gridSelected = new EventEmitter<{event: PointerEvent; rowIndex: number; date: Date}>();\n\n @Output() public scrolledToTop = new EventEmitter();\n @Output() public scrolledToBottom = new EventEmitter();\n @Output() public scrolled = new EventEmitter();\n\n @ViewChild('dragContainer', {read: ViewContainerRef})\n public dragContainer: ViewContainerRef;\n\n @ViewChild('bodyContainer')\n public bodyContainer: ElementRef;\n\n @ViewChild('scrollContainer')\n public scrollContainer: ElementRef;\n\n @ContentChildren(PlanningRowComponent)\n public _rowIndicators: QueryList;\n\n public rowIndicators: PlanningRowComponent[] = [];\n\n @ContentChildren(ShiftScheduleComponent)\n private _shiftSchedules: QueryList;\n\n public shiftSchedules: Observable;\n\n public readonly ROW_INDICATOR_WIDTH = 184;\n public readonly COLUMN_HEADER_HEIGHT = 96;\n public readonly MILLISECONDS_IN_MINUTE = 60000;\n\n private readonly MAX_CELLS_PER_DAY = 8;\n private readonly ROW_HEIGHT = 91;\n private readonly DEFAULT_CELLS_PER_DAY = 4;\n private readonly MAX_CELLS_PER_DAY_FOR_HOUR_VIEW = 12;\n\n public totalTime: Duration;\n public timeView = TimeViewMode.DAY;\n public bodyContainerOffset: Point;\n public dayCellData: DayCellData[] = [];\n public onChanges = new BehaviorSubject(undefined);\n public get onDestroy(): Observable {\n return this.unSubscribeOnViewDestroy;\n }\n\n private _cachedScrollTop: number;\n\n private _rowWidth = 0;\n private _currentTime: Date;\n private _endDate = new Date('2022-10-27');\n private _startDate = new Date('2022-10-20');\n private _cellsPerDay = this.DEFAULT_CELLS_PER_DAY;\n private _cellsPerHour = this.MAX_CELLS_PER_DAY_FOR_HOUR_VIEW;\n private _resizeObserver: ResizeObserver;\n\n @Input()\n public set cellsPerDay(newCellsPerDay: number) {\n this._cellsPerDay = Math.min(Math.max(newCellsPerDay, 1), this.MAX_CELLS_PER_DAY);\n\n if (this.timeView === TimeViewMode.DAY) {\n this.updatePlanningVariables();\n }\n }\n\n @Input()\n public set cellsPerHour(newCellsPerHour: number) {\n this._cellsPerHour = Math.min(Math.max(newCellsPerHour, 1), this.MAX_CELLS_PER_DAY_FOR_HOUR_VIEW);\n\n if (this.timeView === TimeViewMode.HOUR) {\n this.updatePlanningVariables();\n }\n }\n\n @Input()\n public set timeViewMode(newTimeViewMode: TimeViewMode) {\n if (this.timeView === newTimeViewMode) {\n return;\n }\n\n this.timeView = newTimeViewMode;\n if (this.timeView === TimeViewMode.HOUR) {\n this.endDate = moment(this._startDate).startOf('h').add(1, 'h').toDate();\n } else if (this.timeView === TimeViewMode.DAY) {\n this.startDate = this._startDate;\n this.endDate = this._startDate;\n }\n }\n\n @Input()\n public set startDate(newStartDate: Date) {\n this._startDate = this.timeView === TimeViewMode.DAY ? moment(newStartDate).startOf('d').toDate() : moment(newStartDate).startOf('h').toDate();\n this.updatePlanningVariables();\n }\n\n public get startDate(): Date {\n return this._startDate;\n }\n\n @Input()\n public set endDate(newEndDate: Date) {\n this._endDate = this.timeView === TimeViewMode.DAY ? moment(newEndDate).startOf('d').add(1, 'd').toDate() : moment(newEndDate).startOf('h').toDate();\n this.updatePlanningVariables();\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public get rowWidth(): number {\n return this._rowWidth;\n }\n\n public get currentTime(): Date {\n return this._currentTime;\n }\n\n public ngAfterContentInit(): void {\n this._rowIndicators.changes\n .pipe(\n startWith(undefined),\n map(() => this._rowIndicators.toArray()),\n takeUntil(this.unSubscribeOnViewDestroy)\n )\n .subscribe((rowIndicators: PlanningRowComponent[]) => (this.rowIndicators = rowIndicators));\n\n this.shiftSchedules = this._shiftSchedules.changes.pipe(\n startWith(undefined),\n map(() => this._shiftSchedules.toArray())\n );\n\n this._currentTime = new Date();\n\n interval(this.MILLISECONDS_IN_MINUTE)\n .pipe(takeUntil(this.unSubscribeOnViewDestroy))\n .subscribe(() => (this._currentTime = new Date()));\n }\n\n public ngAfterViewInit(): void {\n this._resizeObserver = new ResizeObserver(() => {\n this.calculateRowWidth();\n this.calculateBodyContainerOffset();\n });\n this._resizeObserver.observe(this.bodyContainer.nativeElement.parentElement);\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n this.onChanges.next(changes);\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this._resizeObserver?.disconnect();\n }\n\n public scrolling(event: Event): void {\n const nativeElement = this.scrollContainer.nativeElement;\n\n this._cachedScrollTop = nativeElement.scrollTop;\n\n this.scrolled.emit(Math.floor(nativeElement.scrollTop / this.ROW_HEIGHT));\n\n if (nativeElement.scrollTop === 0) {\n this.scrolledToTop.emit();\n }\n\n if (nativeElement.scrollTop > nativeElement.scrollHeight - nativeElement.offsetHeight) {\n this.scrolledToBottom.emit();\n }\n\n event.stopPropagation();\n }\n\n public resetScrollPosition(): void {\n this.scrollContainer.nativeElement.scrollTop = 0;\n }\n\n public onMouseWheelInput(event: WheelEvent): void {\n if (event.deltaY < 0 && this._cachedScrollTop === 0) {\n this.scrolledToTop.emit();\n }\n\n event.stopPropagation();\n }\n\n public getLeftPercentForDate(start: Date): number {\n return (duration(moment(start).diff(this.startDate)).asMinutes() / this.totalTime.asMinutes()) * 100;\n }\n\n public getDateForHorizontalPosition(positionX: number): Date {\n const minutesForPosition = (positionX / this._rowWidth) * this.totalTime.asMinutes();\n return moment(this._startDate).add(minutesForPosition, 'm').toDate();\n }\n\n public calculateRowWidth(): void {\n if (this.bodyContainer?.nativeElement) {\n this._rowWidth = this.bodyContainer.nativeElement.clientWidth - this.ROW_INDICATOR_WIDTH;\n }\n }\n\n public calculateBodyContainerOffset(): void {\n this.bodyContainerOffset = this.bodyContainer.nativeElement.parentElement.getBoundingClientRect();\n }\n\n public setTimeToHour(hour: Date): void {\n this._startDate = new Date(hour);\n this._endDate = moment(hour).add(1, 'h').toDate();\n\n this.updatePlanningVariables();\n }\n\n public onGridSelected(rowIndex: number, event: PointerEvent): void {\n this.calculateRowWidth();\n this.gridSelected.emit({event, rowIndex, date: this.getDateForHorizontalPosition(event.offsetX)});\n }\n\n public onSelectedHourChanged(selectedHour: DateRange): void {\n this.selectedHourChanged.emit(selectedHour);\n }\n\n private updatePlanningVariables(): void {\n this.generateCells();\n this.totalTime = duration(moment(this.endDate).diff(this.startDate));\n this.ngOnChanges({gridChange: new SimpleChange('', `start: ${this._startDate.toString()}, end: ${this._endDate.toString()}`, false)});\n }\n\n private generateCells(): void {\n this.dayCellData = [];\n const end: Moment = moment(this._endDate);\n const currentDate: Moment = moment(this._startDate);\n const normalCellDuration = this.timeView === TimeViewMode.DAY ? 24 / this._cellsPerDay : 60 / this._cellsPerHour;\n const timeInterval = this.timeView === TimeViewMode.DAY ? 'hours' : 'minutes';\n\n const currentCells = this.timeView === TimeViewMode.DAY ? this._cellsPerDay : this._cellsPerHour;\n\n while (currentDate < end) {\n const dayCell: DayCellData = {date: currentDate.toDate(), duration: duration(currentDate.clone().add(1, 'd').diff(currentDate)).asHours(), items: []};\n this.dayCellData.push(dayCell);\n\n for (let cellIndex = 1; cellIndex <= currentCells; cellIndex++) {\n const dateForCell = currentDate.toDate();\n\n currentDate.set(timeInterval, cellIndex * normalCellDuration);\n dayCell.items.push({date: dateForCell, duration: duration(currentDate.diff(dateForCell)).asMinutes()});\n }\n }\n }\n}\n","import {Directive, ElementRef, HostBinding, HostListener, Input, OnInit} from '@angular/core';\nimport moment, {Duration, duration} from 'moment';\nimport {takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../../base-component';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\nimport {PlanningItemData} from '../../planning-items/planning-item-base/planning-item-data';\n\n@Directive({\n selector: '[vdwTimelinePosition]'\n})\nexport class TimelinePositionDirective extends BaseComponent implements OnInit {\n @Input()\n public set parentStartDate(value: Date) {\n if (AssertionUtils.datesAreEqual(this._parentStartDate, value)) {\n return;\n }\n this._parentStartDate = value;\n this.calculatePosition();\n }\n\n public get parentStartDate(): Date {\n return this._parentStartDate;\n }\n\n @Input()\n public set parentEndDate(value: Date) {\n if (AssertionUtils.datesAreEqual(this._parentEndDate, value)) {\n return;\n }\n this._parentEndDate = value;\n this.calculatePosition();\n }\n\n public get parentEndDate(): Date {\n return this._parentEndDate;\n }\n\n public get endDate(): Date {\n return this._data?.endDate;\n }\n\n @Input()\n public set data(value: PlanningItemData) {\n if (this._data === value) {\n return;\n }\n this._data = value;\n this._data.displayElement ??= this.element;\n this.calculatePosition();\n }\n\n public get data(): PlanningItemData {\n return this._data;\n }\n\n @HostBinding('style.width.%')\n public widthPercent = 0;\n\n @HostBinding('style.max-width.%')\n public maxWidthPercent = 0;\n\n @HostBinding('style.left.%')\n public leftPercent = 0;\n\n @HostBinding('class.hidden')\n public isHidden = true;\n\n @HostBinding('class.clipped-right')\n public isClippedRight = false;\n\n @HostBinding('class.clipped-left')\n public isClippedLeft = false;\n\n private _parentStartDate: Date;\n private _parentEndDate: Date;\n private _parentDuration: Duration;\n private _data: PlanningItemData;\n\n public constructor(private readonly element: ElementRef) {\n super();\n }\n\n public ngOnInit(): void {\n this.calculatePosition();\n this._data?.periodChanged.pipe(takeUntil(this.unSubscribeOnViewDestroy)).subscribe(() => this.calculatePosition());\n }\n\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n if (this._data?.clickable) {\n event.stopPropagation();\n this._data.selected.emit(event);\n }\n }\n\n private calculatePosition(): void {\n if (this._parentStartDate == null || this._parentEndDate == null || this._data == null) {\n this.isHidden = true;\n return;\n }\n this._parentDuration = duration(moment(this.parentEndDate).diff(this.parentStartDate));\n this.leftPercent = Math.max(this.getLeftPercentForDate(this.data.startDate), 0);\n this.maxWidthPercent = 100 - this.leftPercent;\n this.widthPercent = this.getLeftPercentForDate(this.endDate) - this.leftPercent;\n this.isClippedLeft = this.data.startDate <= this.parentStartDate;\n this.isClippedRight = this.data.endDate >= this.parentEndDate;\n this.isHidden = this.data.startDate > this.parentEndDate || this.endDate < this.parentStartDate;\n }\n\n private getLeftPercentForDate(date: Date): number {\n return (duration(moment(date).diff(this.parentStartDate)).asMinutes() / this._parentDuration.asMinutes()) * 100;\n }\n}\n","import {Directive, ElementRef, EventEmitter, Input, OnDestroy, OnInit, Optional, Output} from '@angular/core';\nimport {filter, pairwise, takeUntil} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {Point} from '../../common/interfaces/point';\nimport {PlanningGridComponent} from '../planning-display/planning-grid/planning-grid.component';\nimport {PlanningGroupComponent} from '../planning-items/planning-group/planning-group.component';\nimport {PlanningItemDirective} from '../planning-items/planning-item/planning-item.directive';\nimport {PlanningRowComponent} from '../planning-row/planning-row.component';\nimport {DragDropData} from './planning-drag-drop-data';\nimport {PlanningDragDropService} from './planning-drag-drop.service';\n\n@Directive({\n selector: '[vdwPlanningDragDrop]'\n})\nexport class PlanningDragDropDirective extends BaseComponent implements OnInit, OnDestroy {\n private currentDisplayElement: ElementRef;\n private isNestedItem = false;\n\n @Input()\n public set isItemDraggable(isDraggable: boolean) {\n const draggedItem = this.planningItem?.data ?? this.planningGroup?.data;\n draggedItem.draggable = isDraggable;\n }\n\n @Input()\n public newGroupText: string;\n\n @Output()\n public readonly dragEnd = new EventEmitter();\n\n @Output()\n public readonly dragMove = this.dragDropService.drag.pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n filter((eventData: DragDropData) => eventData.draggedItem === (this.planningItem?.data ?? this.planningGroup?.data))\n );\n\n @Output()\n public readonly dragStart = new EventEmitter();\n\n public constructor(\n @Optional() private readonly planningItem: PlanningItemDirective,\n @Optional() private readonly planningGroup: PlanningGroupComponent,\n private readonly dragDropService: PlanningDragDropService,\n private readonly planningRow: PlanningRowComponent,\n private readonly planningGrid: PlanningGridComponent\n ) {\n super();\n this.isNestedItem = this.planningItem != null && this.planningGroup != null;\n }\n\n public ngOnInit(): void {\n const draggedItem = this.planningItem?.data ?? this.planningGroup?.data;\n const changesObservable = draggedItem.displayElementChanges;\n\n changesObservable.pipe(takeUntil(this.unSubscribeOnViewDestroy), pairwise()).subscribe(([previousDisplayElement, currentDisplayElement]: ElementRef[]) => {\n this.removeItemListeners(previousDisplayElement);\n this.addItemListeners(currentDisplayElement);\n });\n\n this.dragDropService.dragEnd\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n filter((data: DragDropData) => data.draggedItem === (this.planningItem?.data ?? this.planningGroup?.data))\n )\n .subscribe((data: DragDropData) => this.onDragEnd(data));\n }\n\n public ngOnDestroy(): void {\n super.ngOnDestroy();\n this.removeItemListeners(this.currentDisplayElement);\n }\n\n private removeItemListeners(element: ElementRef): void {\n if (element?.nativeElement == null) {\n return;\n }\n\n element.nativeElement.removeEventListener('dragstart', this.onDragStart);\n element.nativeElement.draggable = false;\n }\n\n private addItemListeners(element: ElementRef): void {\n if (element?.nativeElement == null) {\n return;\n }\n element.nativeElement.addEventListener('dragstart', this.onDragStart);\n element.nativeElement.draggable = true;\n this.currentDisplayElement = element;\n }\n\n private onDragStart = (event: DragEvent): void => {\n const draggedItem = this.planningItem?.data ?? this.planningGroup?.data;\n\n if (!draggedItem.draggable) {\n event.preventDefault();\n return;\n }\n\n const indicatorWidthPx = this.currentDisplayElement.nativeElement.clientWidth;\n const startMousePositionInContainer: Point = {\n x: this.currentDisplayElement.nativeElement.offsetLeft + this.planningGrid.ROW_INDICATOR_WIDTH + event.offsetX + 2,\n y: this.currentDisplayElement.nativeElement.offsetTop + event.offsetY\n };\n\n if (this.isNestedItem) {\n startMousePositionInContainer.x += this.planningGroup.data.displayElement.nativeElement.offsetLeft;\n startMousePositionInContainer.y += this.planningGroup.data.displayElement.nativeElement.offsetTop;\n\n this.planningGroup.data.displayElement.nativeElement.style.opacity = '0.5';\n } else {\n this.currentDisplayElement.nativeElement.style.opacity = '0';\n }\n\n const dragData = this.dragDropService.onDragStart(\n event,\n draggedItem,\n this.planningGroup?.data,\n this.planningRow.data,\n indicatorWidthPx,\n startMousePositionInContainer,\n this.newGroupText,\n this.planningGrid\n );\n\n this.dragStart.emit(dragData);\n };\n\n private onDragEnd(eventData: DragDropData): void {\n if (!this.isNestedItem) {\n this.currentDisplayElement.nativeElement.style.opacity = '1';\n } else {\n this.planningGroup.data.displayElement.nativeElement.style.opacity = '1';\n }\n\n this.dragEnd.emit(eventData);\n }\n}\n","import {Point} from '../../common/interfaces/point';\nimport {PlanningGridComponent} from '../planning-display/planning-grid/planning-grid.component';\nimport {PlanningGroupData} from '../planning-items/planning-item-base/planning-group-data';\nimport {PlanningItemData} from '../planning-items/planning-item-base/planning-item-data';\nimport {PlanningRowData} from '../planning-items/planning-item-base/planning-row-data';\n\nexport class DragDropData {\n public mouseOffsetFromDragIndicator: Point;\n public startMousePositionInContainer: Point;\n public dragIndicatorPositionOnScreen: Point;\n public mousePositionInContainer: Point;\n\n public draggedItem: PlanningItemData;\n public indicatorWidthPx: number;\n\n public sourceRow: PlanningRowData;\n public sourceGroup: PlanningGroupData;\n\n public targetGrid: PlanningGridComponent;\n public isInsideGrid: boolean;\n public targetRow: PlanningRowData;\n public targetItem: PlanningItemData;\n public targetChildItem: PlanningItemData;\n public targetTime: Date;\n public shiftKey: boolean;\n\n public dropEffect: 'none' | 'copy' | 'link' | 'move' = 'move';\n\n public get dropAllowed(): boolean {\n return this.dropEffect === 'move' || this.dropEffect === 'link';\n }\n\n public set dropAllowed(value: boolean) {\n this.dropEffect = value ? 'move' : 'none';\n }\n}\n","
\n
\n

{{ newGroupText }}

\n
\n
\n \n
\n
\n","import {Component, ElementRef, TemplateRef, ViewChild} from '@angular/core';\nimport {Point} from '../../../common/interfaces/point';\nimport {PlanningGroupData} from '../../planning-items/planning-item-base/planning-group-data';\nimport {DragDropData} from '../planning-drag-drop-data';\n\n@Component({\n templateUrl: './planning-drag-indicator.component.html',\n styleUrls: ['./planning-drag-indicator.component.scss']\n})\nexport class PlanningDragIndicatorComponent {\n @ViewChild('container')\n public set container(value: ElementRef) {\n if (this._container === value) {\n return;\n }\n this._container = value;\n this.setPosition(this.position);\n }\n\n public get container(): ElementRef {\n return this._container;\n }\n\n @ViewChild('newGroupHeader')\n public newGroupHeader: ElementRef;\n\n public templateContext = {\n $implicit: (reference: HTMLDivElement): void => {\n if (this.groupTimelabelRef !== reference) {\n this.groupTimelabelRef = reference;\n }\n }\n };\n\n private groupTimelabelRef: HTMLDivElement;\n\n public template: TemplateRef;\n public width: number;\n public itemClass: string;\n public groupClass: string;\n\n public newGroupText: string;\n\n private isNestedItem: boolean;\n private hoveredOverPlanningGroup: boolean;\n\n private position: Point = {x: 0, y: 0};\n private _container: ElementRef;\n\n public init(data: DragDropData, newGroupText: string): void {\n this.newGroupText = newGroupText;\n this.width = data.indicatorWidthPx;\n this.template = data.draggedItem?.template;\n this.itemClass = data.draggedItem?.class;\n this.isNestedItem = data.sourceGroup && data.draggedItem !== data.sourceGroup;\n\n if (this.isNestedItem) {\n this.groupClass = data.sourceGroup?.class;\n }\n\n this.updateIndicator(data);\n }\n\n public updateIndicator(data: DragDropData): void {\n this.hoveredOverPlanningGroup = data.targetItem instanceof PlanningGroupData;\n this.setPosition(data.dragIndicatorPositionOnScreen);\n\n if (this.newGroupText != null && this.isNestedItem) {\n this.setHeight();\n this.setReactiveIndicatorStyling();\n }\n }\n\n private setPosition(position: Point): void {\n this.position = position;\n\n if (this.container != null) {\n this.container.nativeElement.style.left = `${this.position.x}px`;\n this.container.nativeElement.style.top = `${this.position.y}px`;\n }\n }\n\n private setHeight(): void {\n if (this.container == null) {\n return;\n }\n\n if (this.hoveredOverPlanningGroup) {\n this.container.nativeElement.classList.add('item-in-group');\n } else {\n this.container.nativeElement.classList.remove('item-in-group');\n }\n }\n\n private setReactiveIndicatorStyling(): void {\n if (this.newGroupHeader == null || this.container == null) {\n return;\n }\n\n if (!this.hoveredOverPlanningGroup) {\n this.container.nativeElement.classList.add('header-visible');\n this.newGroupHeader.nativeElement.classList.add('show-element');\n } else {\n this.container.nativeElement.classList.remove('header-visible');\n this.newGroupHeader.nativeElement.classList.remove('show-element');\n }\n }\n}\n","import {AfterViewInit, Component, ElementRef, ViewChild} from '@angular/core';\nimport {DateTimeFormat} from '../../../common/datetime-format.enum';\nimport {DateTimePipe} from '../../../custom-pipes/date-time-pipe/date-time.pipe';\nimport {PlanningGroupData} from '../../planning-items/planning-item-base/planning-group-data';\nimport {DragDropData} from '../planning-drag-drop-data';\n\n@Component({\n templateUrl: './planning-hour-indicator.component.html',\n styleUrls: ['./planning-hour-indicator.component.scss']\n})\nexport class PlanningHourIndicatorComponent implements AfterViewInit {\n @ViewChild('container')\n public container: ElementRef;\n\n @ViewChild('indicator')\n public indicator: ElementRef;\n\n @ViewChild('dateText')\n public dateText: ElementRef;\n\n @ViewChild('dropIndicator')\n public dropIndicator: ElementRef;\n\n public date: Date;\n public showDropIndicator = false;\n public position: {\n top: number;\n left: number;\n height: number;\n };\n\n private isNestedItem = false;\n\n public constructor(private readonly dateTimePipe: DateTimePipe) {}\n\n public ngAfterViewInit(): void {\n if (!this.position) {\n return;\n }\n this.updatePosition();\n }\n\n public show(): void {\n if (!this.container) {\n return;\n }\n this.container.nativeElement.style.opacity = '1';\n }\n\n public hide(): void {\n if (!this.container) {\n return;\n }\n this.container.nativeElement.style.opacity = '0';\n }\n\n public init(data: DragDropData): void {\n this.isNestedItem = data.sourceGroup && data.draggedItem !== data.sourceGroup;\n this.calculateNewPosition(data);\n }\n\n public calculateNewPosition(data: DragDropData): void {\n this.show();\n data.targetTime = null;\n const topOffset = data.targetGrid.COLUMN_HEADER_HEIGHT / 2;\n this.position = {\n left: data.mousePositionInContainer.x - data.mouseOffsetFromDragIndicator.x,\n top: topOffset,\n height: data.dragIndicatorPositionOnScreen.y - data.targetGrid.bodyContainerOffset.y - topOffset\n };\n this.showDropIndicator = false;\n const grid = data.targetGrid;\n\n if (data.mousePositionInContainer.x < grid.ROW_INDICATOR_WIDTH) {\n data.dropAllowed = false;\n }\n\n this.collideWithDropTarget(data);\n\n this.collideWithCurrentTime(data);\n\n data.targetTime ??= grid.getDateForHorizontalPosition(this.position.left - grid.ROW_INDICATOR_WIDTH);\n this.date = data.targetTime;\n this.updatePosition();\n }\n\n private collideWithDropTarget(data: DragDropData): void {\n if (!data.dropAllowed || !this.isNestedItem) {\n return;\n }\n\n let dropTarget = data.targetChildItem;\n if (data.targetItem instanceof PlanningGroupData && dropTarget == null) {\n if (data.targetItem.items.length === 0) {\n this.position.left = data.targetItem.displayElement.nativeElement.offsetLeft + data.targetGrid.ROW_INDICATOR_WIDTH;\n data.targetTime = data.targetItem.startDate;\n this.showDropIndicator = true;\n\n this.position.height =\n data.targetItem.displayElement.nativeElement.getBoundingClientRect().y +\n data.targetItem.displayElement.nativeElement.clientHeight -\n data.targetGrid.bodyContainerOffset.y -\n this.position.top;\n } else {\n dropTarget = data.targetItem.items[data.targetItem.items.length - 1];\n }\n }\n\n if (!dropTarget || data.draggedItem instanceof PlanningGroupData) {\n return;\n }\n\n if (dropTarget === data.draggedItem) {\n this.hide();\n return;\n }\n\n const targetStart = dropTarget.displayElement.nativeElement.offsetLeft + data.targetItem.displayElement.nativeElement.offsetLeft + data.targetGrid.ROW_INDICATOR_WIDTH;\n const targetEnd = targetStart + dropTarget.displayElement.nativeElement.clientWidth;\n if (this.position.left - targetStart < targetEnd - this.position.left) {\n this.position.left = targetStart;\n data.targetTime = dropTarget.startDate;\n } else {\n this.position.left = targetEnd;\n data.targetTime = dropTarget.endDate;\n }\n this.showDropIndicator = true;\n this.position.height =\n data.targetItem.displayElement.nativeElement.getBoundingClientRect().y + data.targetItem.displayElement.nativeElement.clientHeight - data.targetGrid.bodyContainerOffset.y - this.position.top;\n }\n\n private collideWithCurrentTime(data: DragDropData): void {\n if (!data.targetGrid.currentTime) {\n return;\n }\n const currentTimeLeft = (data.targetGrid.getLeftPercentForDate(data.targetGrid.currentTime) / 100) * data.targetGrid.rowWidth + data.targetGrid.ROW_INDICATOR_WIDTH;\n if (this.position.left < currentTimeLeft) {\n this.position.left = currentTimeLeft;\n data.targetTime = data.targetGrid.currentTime;\n }\n }\n\n private updatePosition(): void {\n if (!this.indicator || !this.container) {\n return;\n }\n this.indicator.nativeElement.style.top = `${this.position.top}px`;\n this.container.nativeElement.style.left = `${this.position.left}px`;\n this.indicator.nativeElement.style.height = `${this.position.height}px`;\n this.dateText.nativeElement.innerText = this.dateTimePipe.transform(this.date, DateTimeFormat.TIME_SIMPLE);\n this.dropIndicator.nativeElement.style.opacity = this.showDropIndicator ? '1' : '0';\n }\n}\n","
\n
\n

\n
\n \n
\n
\n
\n","import {ComponentRef, EventEmitter, Injectable, NgZone, ViewContainerRef} from '@angular/core';\nimport {take} from 'rxjs';\nimport {Point} from '../../common/interfaces/point';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {PlanningGridComponent} from '../planning-display/planning-grid/planning-grid.component';\nimport {PlanningGroupData} from '../planning-items/planning-item-base/planning-group-data';\nimport {PlanningItemData} from '../planning-items/planning-item-base/planning-item-data';\nimport {PlanningRowData} from '../planning-items/planning-item-base/planning-row-data';\nimport {DragDropData} from './planning-drag-drop-data';\nimport {PlanningDragIndicatorComponent} from './planning-drag-indicator/planning-drag-indicator.component';\nimport {PlanningHourIndicatorComponent} from './planning-hour-indicator/planning-hour-indicator.component';\n\n@Injectable()\nexport class PlanningDragDropService {\n private dragIndicatorRef: ComponentRef;\n private dragIndicator: PlanningDragIndicatorComponent;\n private hourIndicator: PlanningHourIndicatorComponent;\n private emptyDragImage: Element;\n private dragDropData: DragDropData;\n private readonly DRAGGING_INSIDE_GRID = 'dragging-inside-grid';\n\n public dragEnd = new EventEmitter();\n public drag = new EventEmitter();\n public get dragActive(): boolean {\n return !AssertionUtils.isNullOrUndefined(this.dragIndicatorRef);\n }\n\n public constructor(private readonly ngZone: NgZone) {}\n\n public onDragStart(\n event: DragEvent,\n item: PlanningItemData,\n sourceGroup: PlanningGroupData,\n sourceRow: PlanningRowData,\n indicatorWidthPx: number,\n startMousePositionInContainer: Point,\n newGroupText: string,\n targetGrid: PlanningGridComponent,\n viewContainer: ViewContainerRef = null\n ): DragDropData {\n event.stopPropagation();\n\n if (event.dataTransfer != null) {\n event.dataTransfer.effectAllowed = 'linkMove';\n }\n\n targetGrid.calculateRowWidth();\n targetGrid.onDestroy.pipe(take(1)).subscribe(() => this.reset());\n\n this.dragDropData = new DragDropData();\n\n this.dragDropData.draggedItem = item;\n this.dragDropData.sourceRow = sourceRow;\n this.dragDropData.targetGrid = targetGrid;\n this.dragDropData.sourceGroup = sourceGroup;\n this.dragDropData.indicatorWidthPx = indicatorWidthPx;\n this.dragDropData.startMousePositionInContainer = startMousePositionInContainer;\n\n this.dragDropData.mouseOffsetFromDragIndicator = {x: event.offsetX, y: event.offsetY};\n this.dragDropData.dragIndicatorPositionOnScreen = {x: event.clientX - this.dragDropData.mouseOffsetFromDragIndicator.x, y: event.clientY - this.dragDropData.mouseOffsetFromDragIndicator.y};\n\n this.dragDropData.mousePositionInContainer = {x: this.dragDropData.startMousePositionInContainer.x, y: this.dragDropData.startMousePositionInContainer.y};\n this.dragIndicatorRef = (viewContainer ?? this.dragDropData.targetGrid.dragContainer).createComponent(PlanningDragIndicatorComponent);\n this.dragIndicator = this.dragIndicatorRef.instance;\n this.dragIndicator.init(this.dragDropData, newGroupText);\n\n this.hourIndicator ??= this.dragDropData.targetGrid.dragContainer.createComponent(PlanningHourIndicatorComponent).instance;\n this.hourIndicator.init(this.dragDropData);\n\n this.emptyDragImage ??= document.createElement('div');\n event.dataTransfer?.setDragImage(this.emptyDragImage, 0, 0);\n\n this.addGridEventListeners();\n\n return this.dragDropData;\n }\n\n private onDrag = (event: DragEvent): void => {\n event.preventDefault();\n this.dragDropData.shiftKey = event.shiftKey;\n this.dragDropData.dragIndicatorPositionOnScreen = {\n x: event.clientX - this.dragDropData.mouseOffsetFromDragIndicator.x,\n y: event.clientY - this.dragDropData.mouseOffsetFromDragIndicator.y\n };\n this.dragDropData.mousePositionInContainer = {\n x: this.dragDropData.startMousePositionInContainer.x + event.offsetX - this.dragDropData.mouseOffsetFromDragIndicator.x,\n y: this.dragDropData.startMousePositionInContainer.y + event.offsetY - this.dragDropData.mouseOffsetFromDragIndicator.y\n };\n this.dragDropData.dropAllowed = this.dragDropData.isInsideGrid && this.mouseIsRightOfCurrentTime();\n\n this.changeHourHeaderRow();\n this.drag.emit(this.dragDropData);\n this.dragIndicator.updateIndicator(this.dragDropData);\n this.hourIndicator.calculateNewPosition(this.dragDropData);\n };\n\n private changeHourHeaderRow(): void {\n if (this.dragDropData.dropAllowed) {\n this.dragDropData.targetGrid.bodyContainer.nativeElement.classList.add(this.DRAGGING_INSIDE_GRID);\n } else {\n this.dragDropData.targetGrid.bodyContainer.nativeElement.classList.remove(this.DRAGGING_INSIDE_GRID);\n }\n }\n\n private mouseIsRightOfCurrentTime(): boolean {\n const grid = this.dragDropData.targetGrid;\n if (!grid.currentTime) {\n return true;\n }\n\n const currentTimeLeft = (grid.getLeftPercentForDate(grid.currentTime) / 100) * grid.rowWidth + grid.ROW_INDICATOR_WIDTH;\n return this.dragDropData.mousePositionInContainer.x >= currentTimeLeft;\n }\n\n private onGridDragEnter = (event: DragEvent): void => {\n event.preventDefault();\n const targets = event.composedPath();\n const currentRow = targets.find((target: EventTarget) => target instanceof HTMLElement && target.classList.contains('planning-item-row') && target.hasAttribute('data-rowIndex')) as HTMLElement;\n const targetRowIndex = Number(currentRow?.getAttribute('data-rowIndex'));\n\n this.dragDropData.targetRow = null;\n this.dragDropData.targetItem = null;\n this.dragDropData.isInsideGrid = false;\n this.dragDropData.targetChildItem = null;\n\n if (isNaN(targetRowIndex)) {\n return;\n }\n\n const targetRow = this.dragDropData.targetGrid.rowIndicators[targetRowIndex];\n this.dragDropData.targetRow = targetRow?.data;\n this.dragDropData.isInsideGrid = targetRow !== undefined && targets.includes(this.dragDropData.targetGrid.bodyContainer.nativeElement);\n\n const targetItem = targetRow?.data.items.find((item: PlanningItemData) => targets.includes(item.displayElement.nativeElement));\n this.dragDropData.targetItem = targetItem;\n\n if (!(targetItem instanceof PlanningGroupData)) {\n return;\n }\n\n const itemInGroup = targetItem.items.find((item: PlanningItemData) => targets.includes(item.displayElement.nativeElement));\n this.dragDropData.targetChildItem = itemInGroup;\n };\n\n private onGridDragOver = (event: DragEvent): void => {\n event.preventDefault();\n event.dataTransfer.dropEffect = this.dragDropData.dropEffect;\n };\n\n private onDragEnd = (event: DragEvent): void => {\n event.preventDefault();\n this.removeGridEventListeners();\n this.dragIndicator.template = null;\n this.hourIndicator.hide();\n this.dragEnd.emit(this.dragDropData);\n this.dragIndicatorRef.destroy();\n this.dragIndicatorRef = this.dragIndicator = null;\n this.dragDropData.targetGrid.bodyContainer.nativeElement.classList.remove(this.DRAGGING_INSIDE_GRID);\n };\n\n private preventDefault = (event: DragEvent): void => {\n event.preventDefault();\n };\n\n private addGridEventListeners(): void {\n window.addEventListener('dragend', this.onDragEnd);\n this.ngZone.runOutsideAngular(() => {\n window.addEventListener('drag', this.onDrag);\n window.addEventListener('dragover', this.onGridDragOver);\n window.addEventListener('dragleave', this.preventDefault);\n window.addEventListener('dragenter', this.onGridDragEnter);\n });\n }\n\n private removeGridEventListeners(): void {\n window.removeEventListener('dragend', this.onDragEnd);\n this.ngZone.runOutsideAngular(() => {\n window.removeEventListener('drag', this.onDrag);\n window.removeEventListener('dragover', this.onGridDragOver);\n window.removeEventListener('dragleave', this.preventDefault);\n window.removeEventListener('dragenter', this.onGridDragEnter);\n });\n }\n\n private reset(): void {\n this.dragIndicatorRef = null;\n this.dragIndicator = null;\n this.hourIndicator = null;\n this.dragDropData = null;\n this.emptyDragImage = null;\n }\n}\n","\n
\n
\n \n
\n
\n \n
\n
\n
\n \n
\n","import {AfterContentChecked, Component, ElementRef, Input, OnDestroy, OnInit, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {BaseComponent} from '../../../base-component';\nimport {PlanningGridComponent} from '../../planning-display/planning-grid/planning-grid.component';\nimport {PlanningRowComponent} from '../../planning-row/planning-row.component';\nimport {PlanningGroupData} from '../planning-item-base/planning-group-data';\n\n@Component({\n selector: 'vdw-planning-group',\n templateUrl: './planning-group.component.html',\n styleUrls: ['./planning-group.component.scss']\n})\nexport class PlanningGroupComponent extends BaseComponent implements OnInit, OnDestroy, AfterContentChecked {\n public readonly data = new PlanningGroupData();\n\n @Input()\n public groupText: string;\n\n @Input()\n public set dataTransfer(value: any) {\n this.data.dataTransfer = value;\n }\n\n public get dataTransfer(): any {\n return this.data.dataTransfer;\n }\n\n @Input()\n public set startDate(value: Date) {\n this.data.startDate = value;\n }\n\n public get startDate(): Date {\n return this.data.startDate;\n }\n\n @Input()\n public set endDate(value: Date) {\n this.data.endDate = value;\n }\n\n public get endDate(): Date {\n return this.data.endDate;\n }\n\n @Input()\n public set applyCustomBorder(value: boolean) {\n this.data.applyCustomBorder = value;\n }\n\n public get applyCustomBorder(): boolean {\n return this.data.applyCustomBorder;\n }\n\n @Input()\n public set clickable(value: boolean) {\n this.data.clickable = value;\n }\n\n public get clickable(): boolean {\n return this.data.clickable;\n }\n\n @Output()\n public selected = this.data.selected;\n\n @ViewChild('groupTemplate')\n public set template(value: TemplateRef) {\n this.data.template = value;\n }\n\n public constructor(\n private readonly row: PlanningRowComponent,\n private readonly grid: PlanningGridComponent,\n private readonly hostElement: ElementRef\n ) {\n super();\n }\n\n public ngOnInit(): void {\n this.row.data.addItem(this.data);\n this.data.sortItems();\n }\n\n public ngAfterContentChecked(): void {\n this.data.sortItems();\n this.data.class = this.hostElement.nativeElement.className;\n }\n\n public ngOnDestroy(): void {\n this.row.data.removeItem(this.data);\n }\n\n public getEndDateForPositioning(): Date {\n return new Date(Math.min(this.endDate.getTime(), this.grid.endDate.getTime()));\n }\n\n public getStartDateForPositioning(): Date {\n return new Date(Math.max(this.startDate.getTime(), this.grid.startDate.getTime()));\n }\n}\n","import {PlanningItemData} from './planning-item-data';\n\nexport class PlanningGroupData extends PlanningItemData {\n public get items(): readonly PlanningItemData[] {\n return this._items;\n }\n\n private _items: PlanningItemData[] = [];\n\n public addItem(item: PlanningItemData): void {\n if (this._items.includes(item)) {\n return;\n }\n this._items.push(item);\n }\n\n public removeItem(item: PlanningItemData): void {\n const itemIndex = this._items.indexOf(item);\n if (itemIndex < 0) {\n return;\n }\n this._items.splice(itemIndex, 1);\n }\n\n public sortItems(): void {\n this._items.sort((a: PlanningItemData, b: PlanningItemData) => a.startDate?.getTime() - b.startDate?.getTime());\n }\n}\n","import {ElementRef, EventEmitter, TemplateRef} from '@angular/core';\nimport moment, {Duration, duration} from 'moment';\nimport {BehaviorSubject, Observable} from 'rxjs';\nimport {AssertionUtils} from '../../../common/utils/assertion-utils';\n\nexport class PlanningItemData {\n public get startDate(): Date {\n return this._startDate;\n }\n\n public set startDate(value: Date) {\n if (!AssertionUtils.datesAreEqual(this._startDate, value)) {\n this._startDate = value;\n this.onPeriodChanged();\n }\n }\n\n public get endDate(): Date {\n return this._endDate;\n }\n\n public set endDate(value: Date) {\n if (!AssertionUtils.datesAreEqual(this._endDate, value)) {\n this._endDate = value;\n this.onPeriodChanged();\n }\n }\n\n public get applyCustomBorder(): boolean {\n return this._applyCustomBorder;\n }\n\n public set applyCustomBorder(value: boolean) {\n this._applyCustomBorder = value;\n }\n\n public get applyBackground(): boolean {\n return this._applyBackground;\n }\n\n public set applyBackground(value: boolean) {\n this._applyBackground = value;\n }\n\n public get duration(): Duration {\n return this._duration;\n }\n\n public get displayElement(): ElementRef {\n return this._displayElement.value;\n }\n\n public set displayElement(value: ElementRef) {\n if (this._displayElement.value !== value) {\n this._displayElement.next(value);\n }\n }\n\n public get displayElementChanges(): Observable> {\n return this._displayElement.asObservable();\n }\n\n public dataTransfer: any;\n public template: TemplateRef;\n public periodChanged = new EventEmitter();\n public selected = new EventEmitter();\n public class = '';\n\n public clickable = false;\n public draggable = false;\n\n private _endDate: Date;\n private _startDate: Date;\n private _duration: Duration;\n private _applyCustomBorder = false;\n private _applyBackground = true;\n\n private _displayElement = new BehaviorSubject>(undefined);\n\n protected onPeriodChanged(): void {\n this._duration = duration(moment(this._endDate).diff(this._startDate));\n this.periodChanged.emit();\n }\n}\n","import {Directive, Input, OnDestroy, OnInit, Optional, Output, TemplateRef} from '@angular/core';\nimport {PlanningRowComponent} from '../../planning-row/planning-row.component';\nimport {PlanningGroupComponent} from '../planning-group/planning-group.component';\nimport {PlanningItemData} from '../planning-item-base/planning-item-data';\n\n@Directive({\n selector: '[vdwPlanningItem]'\n})\nexport class PlanningItemDirective implements OnInit, OnDestroy {\n public readonly data = new PlanningItemData();\n\n @Input()\n public set startDate(value: Date) {\n this.data.startDate = value;\n }\n\n public get startDate(): Date {\n return this.data.startDate;\n }\n\n @Input()\n public set endDate(value: Date) {\n this.data.endDate = value;\n }\n\n public get endDate(): Date {\n return this.data.endDate;\n }\n\n @Input()\n public set applyCustomBorder(value: boolean) {\n this.data.applyCustomBorder = value;\n }\n\n public get applyCustomBorder(): boolean {\n return this.data.applyCustomBorder;\n }\n\n @Input()\n public set applyBackground(value: boolean) {\n this.data.applyBackground = value;\n }\n\n public get applyBackground(): boolean {\n return this.data.applyBackground;\n }\n\n @Input()\n public set dataTransfer(value: any) {\n this.data.dataTransfer = value;\n }\n\n public get dataTransfer(): any {\n return this.data.dataTransfer;\n }\n\n @Input()\n public set clickable(value: boolean) {\n this.data.clickable = value;\n }\n\n public get clickable(): boolean {\n return this.data.clickable;\n }\n\n @Input()\n public set class(value: string) {\n this.data.class = value;\n }\n\n public get class(): string {\n return this.data.class;\n }\n\n @Output()\n public selected = this.data.selected;\n\n public constructor(\n template: TemplateRef,\n @Optional() private readonly group: PlanningGroupComponent,\n private readonly row: PlanningRowComponent\n ) {\n this.data.template = template;\n }\n\n public ngOnInit(): void {\n this.registerSelf();\n }\n\n public ngOnDestroy(): void {\n this.unRegisterSelf();\n }\n\n private registerSelf(): void {\n if (this.group != null) {\n this.group.data.addItem(this.data);\n } else {\n this.row.data.addItem(this.data);\n }\n }\n\n private unRegisterSelf(): void {\n if (this.group != null) {\n this.group.data.removeItem(this.data);\n } else {\n this.row.data.removeItem(this.data);\n }\n }\n}\n","import {EventEmitter} from '@angular/core';\nimport {PlanningItemData} from './planning-item-data';\n\nexport class PlanningRowData {\n public dataTransfer: any;\n public clickable = false;\n public selected = new EventEmitter();\n\n private _items: PlanningItemData[] = [];\n\n public get items(): readonly PlanningItemData[] {\n return this._items;\n }\n\n public addItem(item: PlanningItemData): void {\n if (this._items.includes(item)) {\n return;\n }\n this._items.push(item);\n }\n\n public removeItem(item: PlanningItemData): void {\n const itemIndex = this._items.indexOf(item);\n if (itemIndex < 0) {\n return;\n }\n this._items.splice(itemIndex, 1);\n }\n}\n","\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n","import {Component, Input, Output, TemplateRef, ViewChild} from '@angular/core';\nimport {ColorConstants} from '../../common/colors-variables.generated';\nimport {PlanningRowData} from '../planning-items/planning-item-base/planning-row-data';\n\n@Component({\n selector: 'vdw-planning-row',\n templateUrl: './planning-row.component.html',\n styleUrls: ['./planning-row.component.scss']\n})\nexport class PlanningRowComponent {\n public readonly data = new PlanningRowData();\n\n @Input()\n public color = 'white';\n\n @Input()\n public icon = '';\n\n @Input()\n public indicatorText = 'Indicator';\n\n @Input()\n public set dataTransfer(value: any) {\n this.data.dataTransfer = value;\n }\n\n public get dataTransfer(): any {\n return this.data.dataTransfer;\n }\n\n @Input()\n public set clickable(value: boolean) {\n this.data.clickable = value;\n }\n\n public get clickable(): boolean {\n return this.data.clickable;\n }\n\n @Input()\n public rowBackgroundColor = ColorConstants.PRIMARY_COLOR_WHITE;\n\n @Output()\n public selected = this.data.selected;\n\n @ViewChild(TemplateRef)\n public template: TemplateRef;\n}\n","import {duration, Duration, Moment} from 'moment';\n\nexport class ShiftInstance {\n private _name: string;\n private _start: Moment;\n private _end: Moment;\n private _durationInMinutes: number;\n\n public alternate = false;\n\n public constructor(start: Moment, end: Moment, name?: string) {\n this._name = name;\n this._start = start;\n this._end = end;\n this._durationInMinutes = this.getDuration().asMinutes();\n }\n\n public get name(): string {\n return this._name;\n }\n\n public get start(): Moment {\n return this._start;\n }\n\n public get end(): Moment {\n return this._end;\n }\n\n public get durationInMinutes(): number {\n return this._durationInMinutes;\n }\n\n public getDuration(): Duration {\n return duration(this.end.diff(this.start));\n }\n\n public fit(min: Moment, max: Moment): void {\n if (this.start < min) {\n this._start = min;\n }\n if (this.end > max) {\n this._end = max;\n }\n this._durationInMinutes = this.getDuration().asMinutes();\n }\n}\n","import {AfterContentInit, Component, ContentChildren, Input, QueryList} from '@angular/core';\nimport moment, {duration} from 'moment';\nimport {map, startWith, takeUntil, tap} from 'rxjs';\nimport {BaseComponent} from '../../base-component';\nimport {AssertionUtils} from '../../common/utils/assertion-utils';\nimport {ShiftInstance} from './shift-instance';\nimport {ShiftComponent} from './shift.component';\n\n@Component({\n selector: 'vdw-shift-schedule',\n template: ``\n})\nexport class ShiftScheduleComponent extends BaseComponent implements AfterContentInit {\n @Input()\n public days: number[];\n\n @ContentChildren(ShiftComponent)\n private shiftsQuery: QueryList;\n\n private shifts: ShiftComponent[];\n\n public ngAfterContentInit(): void {\n this.shiftsQuery.changes\n .pipe(\n takeUntil(this.unSubscribeOnViewDestroy),\n startWith(undefined),\n map(() => this.shiftsQuery.toArray()),\n tap(this.sortShifts)\n )\n .subscribe((shifts: ShiftComponent[]) => (this.shifts = shifts));\n }\n\n public getShiftsForPeriod(start: Date, end: Date): ShiftInstance[] {\n if (AssertionUtils.isEmpty(this.days) || AssertionUtils.isEmpty(this.shifts)) {\n return [];\n }\n\n const startDate = moment(start);\n const refDate = startDate.clone().startOf('day').add(-1, 'd');\n\n const endDate = moment(end);\n const result: ShiftInstance[] = [];\n while (refDate < endDate) {\n for (const shift of this.shifts) {\n this.addShiftInstancesForDate(refDate, shift, result, startDate);\n }\n refDate.add(1, 'd');\n }\n\n if (!AssertionUtils.isEmpty(result) && result[result.length - 1].end < endDate) {\n this.addEmptySpace(result, refDate, endDate, startDate);\n }\n\n result?.forEach((instance: ShiftInstance) => instance.fit(startDate, endDate));\n return result?.filter((instance: ShiftInstance) => instance.durationInMinutes > 0);\n }\n\n public getShiftsForDay(date: Date): ShiftInstance[] {\n return this.getShiftsForPeriod(moment(date).startOf('day').toDate(), moment(date).endOf('day').toDate());\n }\n\n private addShiftInstancesForDate(refDate: moment.Moment, shift: ShiftComponent, result: ShiftInstance[], startDate: moment.Moment): void {\n while (!this.days.includes(refDate.weekday())) {\n refDate.add(1, 'd');\n }\n\n let shiftStart = shift.getStartOnDate(refDate);\n this.addEmptySpace(result, refDate, shiftStart, startDate);\n\n const shiftEnd = shift.getEndOnDate(refDate);\n if (shiftEnd < shiftStart) {\n shiftEnd.add(1, 'd');\n }\n if (shiftStart < startDate) {\n shiftStart = startDate.clone();\n }\n\n if (shiftEnd <= startDate) {\n return;\n }\n result.push(new ShiftInstance(shiftStart, shiftEnd, shift.name));\n }\n\n private addEmptySpace(result: ShiftInstance[], refDate: moment.Moment, shiftStart: moment.Moment, startDate: moment.Moment): void {\n const previousIterEnd = result.length > 0 ? result[result.length - 1].end : refDate;\n const emptySpaceDuration = duration(shiftStart.diff(previousIterEnd));\n if (emptySpaceDuration.asMinutes() < 0) {\n throw new Error('Overlapping shifts are not allowed!');\n }\n\n if (emptySpaceDuration.asMinutes() === 0 || shiftStart <= startDate) {\n return;\n }\n result.push(new ShiftInstance(previousIterEnd, shiftStart));\n }\n\n private sortShifts(shifts: ShiftComponent[]): void {\n shifts.sort((shiftA: ShiftComponent, shiftB: ShiftComponent) => {\n const [hoursA, minutesA] = shiftA.getTimeAsNumeric(shiftA.start);\n const [hoursB, minutesB] = shiftB.getTimeAsNumeric(shiftB.start);\n if (hoursA === hoursB) {\n return minutesA - minutesB;\n }\n return hoursA - hoursB;\n });\n }\n}\n","import {Component, Input} from '@angular/core';\nimport {Moment} from 'moment';\n\n@Component({\n selector: 'vdw-shift',\n template: ``\n})\nexport class ShiftComponent {\n @Input()\n public start: string;\n\n @Input()\n public end: string;\n\n @Input()\n public name: string;\n\n public getStartOnDate(date: Moment): Moment {\n const [startHours, startMinutes] = this.getTimeAsNumeric(this.start);\n return this.getDateWithTime(date, startHours, startMinutes);\n }\n\n public getEndOnDate(date: Moment): Moment {\n const [endHours, endMinutes] = this.getTimeAsNumeric(this.end);\n return this.getDateWithTime(date, endHours, endMinutes);\n }\n\n public getTimeAsNumeric(time: string): [number, number] {\n const [hours, minutes] = time.split(':').map((s: string) => Number(s));\n return [hours, minutes];\n }\n\n private getDateWithTime(date: Moment, hours: number, minutes: number): Moment {\n return date.clone().set('hours', hours).set('minutes', minutes);\n }\n}\n","export enum TimeViewMode {\n HOUR = 'HOUR',\n DAY = 'DAY'\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {merge, reduce} from 'lodash-es';\nimport {TranslateService} from '../translate.service';\n\n@Pipe({\n name: 'bmsTranslateAsync'\n})\nexport class BmsTranslateAsyncPipe implements PipeTransform {\n private readonly translate: TranslateService;\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public transform(value: any, ...args: any[]): any {\n return this.translate.get(\n value,\n reduce(args, (mergedArgs: any, arg: any) => merge(mergedArgs, arg))\n );\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\nimport {merge, reduce} from 'lodash-es';\nimport {TranslateService} from '../translate.service';\n\n@Pipe({\n name: 'bmsTranslate'\n})\nexport class BmsTranslatePipe implements PipeTransform {\n private readonly translate: TranslateService;\n\n public constructor(translate: TranslateService) {\n this.translate = translate;\n }\n\n public transform(value: any, ...args: any[]): any {\n return this.translate.instant(\n value,\n reduce(args, (mergedArgs: any, arg: any) => merge(mergedArgs, arg))\n );\n }\n}\n","import {Injectable} from '@angular/core';\nimport useMessage from '@messageformat/core';\nimport {L10nLocale, L10nTranslationService} from 'angular-l10n';\nimport {isArray, isString, reduce} from 'lodash-es';\nimport {Observable, of as observableOf} from 'rxjs';\n\n@Injectable({providedIn: 'root'})\nexport class TranslateService {\n private readonly l10nTranslationService: L10nTranslationService;\n\n public constructor(l10nTranslationService: L10nTranslationService) {\n this.l10nTranslationService = l10nTranslationService;\n }\n\n private static compile(params: any, value: any, language: string): string {\n let result: string;\n\n if (value && isString(value)) {\n result = new useMessage(language).compile(value)(params);\n } else {\n result = value;\n }\n return result;\n }\n\n public get(keys: string | string[], params?: any, language?: string): Observable {\n let result: Observable;\n if (isArray(keys)) {\n result = observableOf(\n reduce(\n keys,\n (translations: Record, key: string) => {\n translations[key] = this.instant(key, params, language);\n return translations;\n },\n {}\n )\n );\n } else {\n result = observableOf(this.instant(keys, params, language));\n }\n return result;\n }\n\n public getLocale(): L10nLocale {\n return this.l10nTranslationService.getLocale();\n }\n\n public instant(keys: string | string[], params?: any, language?: string): string | any {\n const translatedParams = params ? {} : params;\n if (params) {\n Object.keys(params).forEach((key: string) => (translatedParams[key] = typeof params[key] === 'string' ? this.instant(params[key], language) : params[key]));\n }\n\n return TranslateService.compile(translatedParams, this.l10nTranslationService.translate(keys, translatedParams, language), language);\n }\n\n public setLocale(l10nLocale: L10nLocale): Promise {\n return this.l10nTranslationService.setLocale(l10nLocale);\n }\n\n public has(key: string, language?: string): boolean {\n return this.l10nTranslationService.has(key, language);\n }\n}\n","import {NgModule} from '@angular/core';\nimport {BmsTranslateAsyncPipe} from './pipes/bms-translate-async.pipe';\nimport {BmsTranslatePipe} from './pipes/bms-translate.pipe';\nimport {TranslateService} from './translate.service';\n\n@NgModule({\n declarations: [BmsTranslatePipe, BmsTranslateAsyncPipe],\n providers: [TranslateService],\n exports: [BmsTranslatePipe, BmsTranslateAsyncPipe]\n})\nexport class TranslationModule {}\n","import {NotImplementedError} from '../error/not-implemented-error';\n\nexport abstract class WindowRef {\n public get nativeWindow(): Window | Record {\n throw new NotImplementedError();\n }\n}\n","import {Injectable} from '@angular/core';\nimport {WindowRef} from './window-ref';\n\n@Injectable()\nexport class BrowserWindowRef extends WindowRef {\n public constructor() {\n super();\n }\n\n public get nativeWindow(): Window | Record {\n return window;\n }\n}\n","import {isPlatformBrowser} from '@angular/common';\nimport {ClassProvider, FactoryProvider, InjectionToken, PLATFORM_ID} from '@angular/core';\nimport {BrowserWindowRef} from './browser-window-ref';\nimport {WindowRef} from './window-ref';\n\nexport const WINDOW = new InjectionToken('WindowToken');\n\nexport function windowFactory(browserWindowRef: BrowserWindowRef, platformId: Record): Window | Record {\n if (isPlatformBrowser(platformId)) {\n return browserWindowRef.nativeWindow;\n }\n return {};\n}\n\nconst browserWindowProvider: ClassProvider = {\n provide: WindowRef,\n useClass: BrowserWindowRef\n};\n\nconst windowProvider: FactoryProvider = {\n provide: WINDOW,\n useFactory: windowFactory,\n deps: [WindowRef, PLATFORM_ID]\n};\n\nexport const WINDOW_PROVIDERS = [browserWindowProvider, windowProvider];\n","var map = {\n\t\"./af\": 85637,\n\t\"./af.js\": 85637,\n\t\"./ar\": 6777,\n\t\"./ar-dz\": 74508,\n\t\"./ar-dz.js\": 74508,\n\t\"./ar-kw\": 67504,\n\t\"./ar-kw.js\": 67504,\n\t\"./ar-ly\": 95373,\n\t\"./ar-ly.js\": 95373,\n\t\"./ar-ma\": 92412,\n\t\"./ar-ma.js\": 92412,\n\t\"./ar-ps\": 78823,\n\t\"./ar-ps.js\": 78823,\n\t\"./ar-sa\": 36670,\n\t\"./ar-sa.js\": 36670,\n\t\"./ar-tn\": 36448,\n\t\"./ar-tn.js\": 36448,\n\t\"./ar.js\": 6777,\n\t\"./az\": 23009,\n\t\"./az.js\": 23009,\n\t\"./be\": 28299,\n\t\"./be.js\": 28299,\n\t\"./bg\": 4685,\n\t\"./bg.js\": 4685,\n\t\"./bm\": 11171,\n\t\"./bm.js\": 11171,\n\t\"./bn\": 23590,\n\t\"./bn-bd\": 5841,\n\t\"./bn-bd.js\": 5841,\n\t\"./bn.js\": 23590,\n\t\"./bo\": 54309,\n\t\"./bo.js\": 54309,\n\t\"./br\": 54130,\n\t\"./br.js\": 54130,\n\t\"./bs\": 8033,\n\t\"./bs.js\": 8033,\n\t\"./ca\": 55294,\n\t\"./ca.js\": 55294,\n\t\"./cs\": 53028,\n\t\"./cs.js\": 53028,\n\t\"./cv\": 5807,\n\t\"./cv.js\": 5807,\n\t\"./cy\": 70342,\n\t\"./cy.js\": 70342,\n\t\"./da\": 38269,\n\t\"./da.js\": 38269,\n\t\"./de\": 11489,\n\t\"./de-at\": 42123,\n\t\"./de-at.js\": 42123,\n\t\"./de-ch\": 17757,\n\t\"./de-ch.js\": 17757,\n\t\"./de.js\": 11489,\n\t\"./dv\": 28152,\n\t\"./dv.js\": 28152,\n\t\"./el\": 7687,\n\t\"./el.js\": 7687,\n\t\"./en-au\": 46668,\n\t\"./en-au.js\": 46668,\n\t\"./en-ca\": 76798,\n\t\"./en-ca.js\": 76798,\n\t\"./en-gb\": 53615,\n\t\"./en-gb.js\": 53615,\n\t\"./en-ie\": 91364,\n\t\"./en-ie.js\": 91364,\n\t\"./en-il\": 79907,\n\t\"./en-il.js\": 79907,\n\t\"./en-in\": 70533,\n\t\"./en-in.js\": 70533,\n\t\"./en-nz\": 33190,\n\t\"./en-nz.js\": 33190,\n\t\"./en-sg\": 51096,\n\t\"./en-sg.js\": 51096,\n\t\"./eo\": 3962,\n\t\"./eo.js\": 3962,\n\t\"./es\": 37726,\n\t\"./es-do\": 65010,\n\t\"./es-do.js\": 65010,\n\t\"./es-mx\": 63654,\n\t\"./es-mx.js\": 63654,\n\t\"./es-us\": 59043,\n\t\"./es-us.js\": 59043,\n\t\"./es.js\": 37726,\n\t\"./et\": 25343,\n\t\"./et.js\": 25343,\n\t\"./eu\": 90728,\n\t\"./eu.js\": 90728,\n\t\"./fa\": 60787,\n\t\"./fa.js\": 60787,\n\t\"./fi\": 71771,\n\t\"./fi.js\": 71771,\n\t\"./fil\": 45335,\n\t\"./fil.js\": 45335,\n\t\"./fo\": 69761,\n\t\"./fo.js\": 69761,\n\t\"./fr\": 1670,\n\t\"./fr-ca\": 28991,\n\t\"./fr-ca.js\": 28991,\n\t\"./fr-ch\": 97280,\n\t\"./fr-ch.js\": 97280,\n\t\"./fr.js\": 1670,\n\t\"./fy\": 24203,\n\t\"./fy.js\": 24203,\n\t\"./ga\": 69858,\n\t\"./ga.js\": 69858,\n\t\"./gd\": 38605,\n\t\"./gd.js\": 38605,\n\t\"./gl\": 27365,\n\t\"./gl.js\": 27365,\n\t\"./gom-deva\": 33896,\n\t\"./gom-deva.js\": 33896,\n\t\"./gom-latn\": 95587,\n\t\"./gom-latn.js\": 95587,\n\t\"./gu\": 97950,\n\t\"./gu.js\": 97950,\n\t\"./he\": 92029,\n\t\"./he.js\": 92029,\n\t\"./hi\": 51897,\n\t\"./hi.js\": 51897,\n\t\"./hr\": 29816,\n\t\"./hr.js\": 29816,\n\t\"./hu\": 22253,\n\t\"./hu.js\": 22253,\n\t\"./hy-am\": 28196,\n\t\"./hy-am.js\": 28196,\n\t\"./id\": 51307,\n\t\"./id.js\": 51307,\n\t\"./is\": 95474,\n\t\"./is.js\": 95474,\n\t\"./it\": 23099,\n\t\"./it-ch\": 45807,\n\t\"./it-ch.js\": 45807,\n\t\"./it.js\": 23099,\n\t\"./ja\": 19127,\n\t\"./ja.js\": 19127,\n\t\"./jv\": 30182,\n\t\"./jv.js\": 30182,\n\t\"./ka\": 10758,\n\t\"./ka.js\": 10758,\n\t\"./kk\": 93444,\n\t\"./kk.js\": 93444,\n\t\"./km\": 72034,\n\t\"./km.js\": 72034,\n\t\"./kn\": 46223,\n\t\"./kn.js\": 46223,\n\t\"./ko\": 83064,\n\t\"./ko.js\": 83064,\n\t\"./ku\": 8714,\n\t\"./ku-kmr\": 10961,\n\t\"./ku-kmr.js\": 10961,\n\t\"./ku.js\": 8714,\n\t\"./ky\": 12062,\n\t\"./ky.js\": 12062,\n\t\"./lb\": 84796,\n\t\"./lb.js\": 84796,\n\t\"./lo\": 19279,\n\t\"./lo.js\": 19279,\n\t\"./lt\": 106,\n\t\"./lt.js\": 106,\n\t\"./lv\": 11840,\n\t\"./lv.js\": 11840,\n\t\"./me\": 42240,\n\t\"./me.js\": 42240,\n\t\"./mi\": 13588,\n\t\"./mi.js\": 13588,\n\t\"./mk\": 15518,\n\t\"./mk.js\": 15518,\n\t\"./ml\": 37823,\n\t\"./ml.js\": 37823,\n\t\"./mn\": 98657,\n\t\"./mn.js\": 98657,\n\t\"./mr\": 61285,\n\t\"./mr.js\": 61285,\n\t\"./ms\": 43014,\n\t\"./ms-my\": 86253,\n\t\"./ms-my.js\": 86253,\n\t\"./ms.js\": 43014,\n\t\"./mt\": 20167,\n\t\"./mt.js\": 20167,\n\t\"./my\": 47940,\n\t\"./my.js\": 47940,\n\t\"./nb\": 50014,\n\t\"./nb.js\": 50014,\n\t\"./ne\": 49023,\n\t\"./ne.js\": 49023,\n\t\"./nl\": 34208,\n\t\"./nl-be\": 71412,\n\t\"./nl-be.js\": 71412,\n\t\"./nl.js\": 34208,\n\t\"./nn\": 81354,\n\t\"./nn.js\": 81354,\n\t\"./oc-lnc\": 40870,\n\t\"./oc-lnc.js\": 40870,\n\t\"./pa-in\": 80389,\n\t\"./pa-in.js\": 80389,\n\t\"./pl\": 7342,\n\t\"./pl.js\": 7342,\n\t\"./pt\": 34774,\n\t\"./pt-br\": 73003,\n\t\"./pt-br.js\": 73003,\n\t\"./pt.js\": 34774,\n\t\"./ro\": 85333,\n\t\"./ro.js\": 85333,\n\t\"./ru\": 73451,\n\t\"./ru.js\": 73451,\n\t\"./sd\": 43921,\n\t\"./sd.js\": 43921,\n\t\"./se\": 59682,\n\t\"./se.js\": 59682,\n\t\"./si\": 80582,\n\t\"./si.js\": 80582,\n\t\"./sk\": 4348,\n\t\"./sk.js\": 4348,\n\t\"./sl\": 95337,\n\t\"./sl.js\": 95337,\n\t\"./sq\": 39358,\n\t\"./sq.js\": 39358,\n\t\"./sr\": 50683,\n\t\"./sr-cyrl\": 69382,\n\t\"./sr-cyrl.js\": 69382,\n\t\"./sr.js\": 50683,\n\t\"./ss\": 51156,\n\t\"./ss.js\": 51156,\n\t\"./sv\": 29855,\n\t\"./sv.js\": 29855,\n\t\"./sw\": 18536,\n\t\"./sw.js\": 18536,\n\t\"./ta\": 15373,\n\t\"./ta.js\": 15373,\n\t\"./te\": 37809,\n\t\"./te.js\": 37809,\n\t\"./tet\": 61297,\n\t\"./tet.js\": 61297,\n\t\"./tg\": 92527,\n\t\"./tg.js\": 92527,\n\t\"./th\": 85862,\n\t\"./th.js\": 85862,\n\t\"./tk\": 79331,\n\t\"./tk.js\": 79331,\n\t\"./tl-ph\": 44387,\n\t\"./tl-ph.js\": 44387,\n\t\"./tlh\": 3592,\n\t\"./tlh.js\": 3592,\n\t\"./tr\": 79732,\n\t\"./tr.js\": 79732,\n\t\"./tzl\": 99570,\n\t\"./tzl.js\": 99570,\n\t\"./tzm\": 83553,\n\t\"./tzm-latn\": 7699,\n\t\"./tzm-latn.js\": 7699,\n\t\"./tzm.js\": 83553,\n\t\"./ug-cn\": 25674,\n\t\"./ug-cn.js\": 25674,\n\t\"./uk\": 69974,\n\t\"./uk.js\": 69974,\n\t\"./ur\": 45773,\n\t\"./ur.js\": 45773,\n\t\"./uz\": 357,\n\t\"./uz-latn\": 77135,\n\t\"./uz-latn.js\": 77135,\n\t\"./uz.js\": 357,\n\t\"./vi\": 20043,\n\t\"./vi.js\": 20043,\n\t\"./x-pseudo\": 40767,\n\t\"./x-pseudo.js\": 40767,\n\t\"./yo\": 80150,\n\t\"./yo.js\": 80150,\n\t\"./zh-cn\": 21828,\n\t\"./zh-cn.js\": 21828,\n\t\"./zh-hk\": 86644,\n\t\"./zh-hk.js\": 86644,\n\t\"./zh-mo\": 79305,\n\t\"./zh-mo.js\": 79305,\n\t\"./zh-tw\": 31860,\n\t\"./zh-tw.js\": 31860\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 = 35358;"],"x_google_ignoreList":[1592]}